Как я могу заставить Vim игнорировать все пользовательские настройки, как если бы они были недавно установлены?

21

Чтобы убедиться, что моя личная конфигурация не влияет на поведение, я хочу запустить Vim таким образом, чтобы игнорировать все мои установленные пользователем файлы конфигурации, как если бы Vim только что был впервые установлен заново, а пользователь запустил его. немедленно.

Об этом говорится в разделе часто задаваемых вопросов, в котором говорится, что ответом является запуск Vim следующей командой:

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

Это проходит большую часть пути, но runtimepathопция все еще содержит ~/.vimи, в частности, ~/.vim/after(например, если я впоследствии включу обнаружение типа файла и изменю тип файла, ~/.vim/after/syntax/the_relevant_filetype.vimбудет выполнен код in ).

Я могу обойти эту проблему, вызывая следующие команды при запуске *:

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

... но я не уверен, что:

  1. Это надежное решение: это единственные пути, которые могут повлиять на настройку пользователя? Есть ли что-нибудь еще, о чем я не думал?
  2. Существует лучший способ достижения желаемого результата.

* Используя аргументы --cmdили -u vimrcshell, или просто вводя их вручную.

РЕДАКТИРОВАТЬ : Вот один конкретный пример проблемы, которую я пытаюсь решить. (Хотя я хотел бы, чтобы решение исправляло любые другие возможные проблемы, которые я, возможно, еще не учел.):

  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 документы:

Аналогично «-u ПО УМОЛЧАНИЮ -U НЕТ -i НЕТ»:
- инициализация из файлов и переменных среды пропускается
- «runtimepath» и «packpath» настроены на исключение записей домашнего каталога (не происходит с -u DEFAULTS).
- | defaults.vim | скрипт загружен, что подразумевает 'nocompatible': использовать Vim по умолчанию
- no | gvimrc | скрипт загружен
- файл viminfo не читается и не записывается

jasonszhao
источник
1
Ницца! Это намного проще, чем возиться с $HOMEпеременной. Goodjob Vim разработчики. И спасибо вам за ответ!
Богатое
1
--cleanneovimтеперь также работает на master ( 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. Когда я набираю «я», он не говорит «вставить». Вы можете хотеть, чтобы это все еще сказало 'вставка'. Если вы запустили vim с пустым файлом vimrc, то он покажет insert

это потому, что vim сначала загружает конфигурацию по умолчанию.

Вы можете указать vim на этот файл по умолчанию, чтобы получить эффект пустого файла vimrc. Проверьте, что у вас есть /etc/vim/vimrc, и вы можете сделать vim -u /etc/vim/vimrc или на OSX, файл по умолчанию/usr/share/vim/vicmrc

barlop
источник
Я думаю, это именно то, что 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. У меня есть (xyz) (некоторые) проблемы с Vim. Как определить, что это проблема с моей настройкой или с Vim? / Нашел ли я ошибку в Vim?

Во-первых, вам необходимо выяснить, есть ли ошибка в реальных файлах среды выполнения или в любом плагине, который распространяется с Vim, или это простой побочный эффект любого параметра конфигурации из вашего .vimrc или .gvimrc. Итак, сначала запустите vim так:

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

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

mMontu
источник
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
@ Я имею в виду, вы видите какие-либо различия по сравнению с новой установкой после включения обнаружения типов файлов?
mMontu