Чому не буду 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ігнорується.
Сукіма

Відповіді:


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.