Як я можу змусити Vim ігнорувати всю конфігурацію користувача, як ніби він був щойно встановлений?


21

Для того, щоб переконатися, що на поведінку не впливає моя особиста конфігурація, я хочу запустити Vim таким чином, що ігнорує всі мої встановлені користувачем конфігураційні файли, як ніби Vim щойно був встановлений вперше, і користувач запустив його негайно.

Це вирішується у FAQ, що говорить про те, що відповідь потрібно запустити Vim із наступної команди:

vim -u NONE -U NONE -N -i NONE

Це отримує більшу частину шляху там, але runtimepathпараметр все ще містить ~/.vimі, зокрема, ~/.vim/after((наприклад, якщо я згодом увімкну розпізнавання типу файлу та зміну файлового типу, код ~/.vim/after/syntax/the_relevant_filetype.vimбуде виконаний).

Я можу вирішити цю конкретну проблему, застосувавши такі команди при запуску *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... але я не впевнений, що:

  1. Це надійне рішення: чи це єдині шляхи, які можуть спричинити настрій конфігурації користувача? Чи є ще щось, про що я не думав?
  2. Є кращий спосіб досягти бажаного результату.

* Використовуючи аргументи --cmdабо -u vimrcоболонки, або просто ввівши їх вручну.

EDIT : Ось один конкретний приклад такої проблеми, яку я намагаюся вирішити. (Хоча я хотів би, щоб рішення виправити будь-які інші можливі проблеми, з якими я, можливо, ще не стикався.):

  1. Створіть файл ~ / .vim / after / ftplugin / c.vim, що містить вміст:

    noremap i :echom "This is not default behaviour"<CR>
    

    Тепер у нас є встановлена ​​користувачем конфігурація, яку ми хочемо ігнорувати. Перевіримо рішення, запропоноване FAQ.

  2. Запустіть Vim командою:

    vim -u NONE -U NONE -N -i NONE
    
  3. Введіть команди:

    :filetype plugin on
    :set ft=c
    i
    

Бажана поведінка : Vim повинен увійти в режим Вставка. Це те, що було б, якщо б не існувало налаштування користувача.

Спостережувана поведінка : Vim видає "Це не типова поведінка"


У системі, схожій на Unix, що робити HOME=/dev/null vim -u NONE:?
муру

@muru Приємна ідея, і, напевно, варто додати як відповідь, але це не ідеально . Ви, очевидно, втрачаєте здатність, наприклад :cd ~, але також розташування viminfoфайлу за замовчуванням знаходиться в $ HOME, що може спричинити E138. Я думаю, що найкращим рішенням може бути створення нового, порожнього каталогу та використання його для $ HOME.
Багатий

@muru Щойно мені спало на думку, що якщо ви встановлюєте $ HOME, імовірно, вам також не потрібно вказувати -u NONE?
Багатий

1
в такому випадку це /tmpможе бути краще, це була моя перша думка, але потім я вибрав / dev / null як чорну діру. ... Або щось подібне HOME=$(mktemp -d) vim ....
муру

Чи не буде він читати системний vimrc, якщо ви не використовуєте -u NONE? Я думаю, залежить від того, яка поведінка вам потрібна.
муру

Відповіді:


16

Щодо Vim 8.0.1554 (на жаль, ще не Neovim), ви можете використовувати vim --clean. Цей метод рекомендується :help bugs.

:help --clean Документи:

Подібно до "-у ЗАМОВЛЕННЯ -У НІКОЛІ -І НЕ":
- ініціалізація з файлів та змінних оточення пропускається
- "runtimepath" і "packpath" встановлюються для виключення записів домашнього каталогу (не відбувається з -у ЗАМОВЛЕННЯМИ).
- the | defaults.vim | скрипт завантажений, що означає "несумісний": використовуйте параметри Vim за замовчуванням
- ні | gvimrc | скрипт завантажений
- жоден файл viminfo не читається і не записується


1
Приємно! Це набагато простіше, ніж возитися зі $HOMEзмінною. Розробники Goodjob Vim. І дякую тобі за відповідь!
Багатий

1
--cleanтакож працює з neovimmaster тепер ( github.com/neovim/neovim/commit/… , щоб бути включеним у 0.4.0), але не виключає домашнього каталогу.
Крістіан Класон

(все ж цей патч чекає його перенесення)
Крістіан Класон

11

Одним із способів усунення файлів, призначених для користувача, буде використання іншого значення $HOME. Щоб нічого не можна читати чи писати (наприклад, viminfo), ви можете використовувати /dev/null:

HOME=/dev/null vim -u NONE

Це призведе до помилок щодо viminfo, тож замість цього ви можете створити тимчасову папку або використати існуючу (наприклад /tmp):

HOME=$(mktemp -d) vim -u NONE

З такою $HOME, -u NONEможе не знадобитися, в залежності від того, що адміністратор додав в загальносистемний vimrc. Наприклад, на всі лабораторні системи я адмініструвати, я додав /etc/vim/vimrc.local(джерела за замовчуванням упакованого Vim в /etc/vim/vimrc) , що має nocompatible, syntaxі т.д., безліч, filetype onа також.


3
vim -i НІКОЛИ, щоб запобігти завантаженню viminfo
Крістіан Брабандт

1

Я не можу відповісти багато на це, але один момент, який я не бачу згадуваного, і повторно відповідав на тлумачення того, що є в заголовку

Як я можу змусити Vim ігнорувати всю конфігурацію користувача, як ніби він був щойно встановлений?

деякі запропонували vim -u NONE абоvim -u NORC

це певним чином трохи більше баребонів, ніж просто жоден файл vimrc. Коли я набираю "i", він не говорить "вставити". Ви можете все одно сказати "вставити". Якщо ви почали vim із пустим файлом vimrc, він відображатиметься вставкою

це тому, що vim спочатку завантажує конфігурацію за замовчуванням.

Ви можете вказувати vim на цей файл за замовчуванням, щоб отримати ефект того, що файл vimrc порожній. Переконайтеся, що у вас є /etc/vim/vimrc, і ви можете робити vim -u /etc/vim/vimrc або на OSX, як файл за замовчуванням/usr/share/vim/vicmrc


Я думаю, що саме це зробить для вас vim -clean.
quemeraisc

@quemeraisc vim --cleanзавантажується defaults.vim. Ця відповідь стосується системи vimrc (див :help system-vimrc.), Яку , на мою думку, не завантажено vim --clean.
Багатий

@barlap: Для того, щоб уникнути плутанини з defaults.vim (див :help defaults.vim), може бути краще , щоб змінити формулювання , default configщоб system vimrcв цій відповіді. Або ще краще, обговоріть обидва у відповіді!
Багатий

0

Від Vim-FAQ 2,5 :

2.5. У мене з «Вімом» є якась проблема. Як визначити, що це проблема з моїм налаштуванням або з Vim? / Я знайшов помилку у Vim?

По-перше, вам слід з’ясувати, чи є помилка у фактичних файлах часу виконання чи будь-якому плагіні, який поширюється з Vim, чи є простим побічним ефектом будь-якого параметра конфігурації з вашого .vimrc чи .gvimrc. Тому спочатку почніть vim так:

vim -u NONE -U NONE -N -i NONE

це запускає Vim у несумісному режимі (-N), не читаючи файл viminfo (-i NONE), не читаючи жодного файлу конфігурації (-u NONE для нечитання файлу .vimrc та -U NONE для нечитання файлу .gvimrc) або навіть плагін.


1
Незважаючи на те, що перебуває у FAQ, це насправді не працює з причин, зазначених у питанні.
Багатий

@Rich З вашого коментаря до запитання: ensure that none of the behaviour I'm seeing is caused by user config- тоді виглядає, що ви намагаєтесь зробити саме те, що пояснено в цьому FAQ. Я перечитав ваше запитання і досі не розумію, які причини ви згадали.
mMontu

Я справді намагаюся зробити саме те, що пояснюється в FAQ. Але рішення, яке воно дає, не працює через runtimepathналаштування.
Багатий

Що саме не так runtimepath? Здається, цей параметр за замовчуванням, як пояснено в :help rtp. Як ця цінність впливає на ваш тест?
mMontu

@Rich Я маю на увазі, чи бачите ви якісь відмінності в порівнянні зі свіжою установкою після ввімкнення виявлення файлів?
mMontu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.