Почему vim не получает исходный код моего файла .vimrc


9

Сегодня я обнаружил, что мой .vimrcне вступил в силу. Это было хорошо всего несколько часов назад.

Когда я запустил vim с $vim --plugin, :scriptnamesничего не повторилось: .vimrcфайл не был получен. (Примечание: /etc/vimrcбыл удален для устранения этой проблемы.)

Затем я попытался Google и нашел $VIMINITпеременную подозрительным.

Вот значение $VIMINIT:

$ echo $VIMINIT
set number

Vim документация о VIMINIT:

 c. Four places are searched for initializations.  The first that exists
    is used, the others are ignored.  The $MYVIMRC environment variable is
    set to the file that was first found, unless $MYVIMRC was already set.
    -  The environment variable VIMINIT (see also |compatible-default|) (*)
       The value of $VIMINIT is used as an Ex command line.
    -  The user vimrc file(s):
                "$HOME/.vimrc"      (for Unix and OS/2) (*)
                "s:.vimrc"          (for Amiga) (*)
                "home:.vimrc"       (for Amiga) (*)
                "$VIM/.vimrc"       (for OS/2 and Amiga) (*)
                "$HOME/_vimrc"      (for MS-DOS and Win32) (*)
                "$VIM/_vimrc"       (for MS-DOS and Win32) (*)
            Note: For Unix, OS/2 and Amiga, when ".vimrc" does not exist,
            "_vimrc" is also tried, in case an MS-DOS compatible file
            system is used.  For MS-DOS and Win32 ".vimrc" is checked
            after "_vimrc", in case long file names are used.
            Note: For MS-DOS and Win32, "$HOME" is checked first.  If no
            "_vimrc" or ".vimrc" is found there, "$VIM" is tried.
            See |$VIM| for when $VIM is not set.
    -  The environment variable EXINIT.
       The value of $EXINIT is used as an Ex command line.
    -  The user exrc file(s).  Same as for the user vimrc file, but with
       "vimrc" replaced by "exrc".  But only one of ".exrc" and "_exrc" is
       used, depending on the system.  And without the (*)!

Я не мог полностью понять документацию vim. Кажется, что это $VIMINITможет испортить запуск vim.

Очистить $VIMINIT:

$ VIMINIT=
$ echo $VIMINIT

Проблема все еще существует.


2
«Используется первое существующее, остальные игнорируются». $VIMINITимеет прецедент над любым .vimrcфайлом. И это удовлетворяет правилу «первым пришел - первым обслужен». Так что да .vimrcигнорируется.
Sukima

Ответы:


10

Расширение на ответ @ mMontu; Vim ищет инициализацию в порядке того списка, пока не найдет его. Поскольку $VIMINITпеременная имеет прецедент для .vimrcфайла, она удовлетворяет поиску и любой другой опции, после чего она игнорируется .

Причина, по которой это все еще не работает после:

$ VIMINIT=
$ echo $VIMINIT

Если (1) вы устанавливаете локальную переменную, а не переменную окружения. Это должно быть экспортировано:

$ export VIMINIT=

(2) это все еще не будет работать, потому что VIMINITвсе еще определено:

$ printenv | grep VIMINIT
VIMINIT=

Что должно произойти, это удаление из окружающей среды все вместе:

$ unset VIMINIT
$ printenv | grep VIMINIT || echo "Gone"
Gone

(Эти команды относятся к Bash. Измените их, чтобы они соответствовали вашей предпочтительной оболочке, если необходимо.)


Но это работает только для сеанса, как насчет его отмены? или, возможно, поиск, где установлена ​​переменная, так что вы можете пойти и удалить ее?
Фэн Ю

8

Вы, вероятно, неправильно поняли документацию:

 c. Four places are searched for initializations.  The first that exists
    is used, the others are ignored.

Таким образом, если вы используете VIMINIT, vimrc не будет загружен.

-  The environment variable VIMINIT (see also |compatible-default|) (*)
   The value of $VIMINIT is used as an Ex command line.

Вы устанавливаете $ VIMINIT для команды Ex set number, которая в порядке в соответствии с документацией. Но если вы предпочитаете vimrc, вы должны включить set numberв этот файл вместо использования $ VIMINIT. Вы упомянули, что вы установили его пустым, и ваш vimrc все еще не был загружен, но на самом деле вы должны сбросить переменную.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.