Как обнаружить vi (не vim) в .vimrc? - PullRequest
17 голосов
/ 12 марта 2009

Я несу vimrc на все машины, на которых я работаю, и он, естественно, содержит опции, которых нет в старой версии vi.

Если я случайно запускаю сеанс vi на компьютере, где vi не является псевдонимом vim и / или vim не установлен, vi читает vimrc и выдает кучу досадных ошибок, чтобы сообщить мне, что такая опция не поддерживается .

Я знаю, что всегда могу просто ввести "vim" вместо "vi" и установить переменную EDITOR в vim (для visudo и т. Д.), Но есть ли строка, которую я могу добавить в начало vimrc, которая рано выходить из скрипта, если файл читается с помощью vi?

Ответы [ 4 ]

35 голосов
/ 12 марта 2009

Если vi на самом деле не является ссылкой на vim, он не должен читать .vimrc , он должен читать .exrc . Тот факт, что он читает .vimrc, указывает на то, что на самом деле это более ранняя версия vim. Если это так, вы можете использовать конструкцию vim «if» для ограничения новых функций, например:

:if version >= 500
:  version-5-specific-commands
:endif

Тип:

:help if

в vim для получения дополнительной информации.

14 голосов
/ 29 июня 2009

Если вы хотите получить более подробные данные в своих чеках, вы также можете проверить отдельные функции.

У меня есть это в моем .vimrc:

if has("eval")
    " Syntax stuff
    let java_highlight_all=1
endif


if has("autocmd")
    " Buffers
    autocmd BufEnter * cd %:p:h
endif
6 голосов
/ 12 марта 2009

Non-vim не читает .vimrc, он ищет .exrc. Вы можете обнаружить более старые версии vim, используя «if version> = 500»

3 голосов
/ 10 февраля 2013

"vi" читает vimrc, потому что он наверняка скомпилирован с именем "vi". И он, вероятно, скомпилирован «чтобы быть очень совместимым с Vi», поэтому вы можете попробовать проверить функцию «совместимый» для обнаружения «vi»:

if !has("compatible")
   let g:loaded_matchparen=1
   syntax off
endif
...