2009-03-11 7 views
15

Я переношу vimrc ко всем машинам, над которыми я работаю, и, естественно, содержит опции, отсутствующие в старом vi.Как обнаружить vi (не vim) в .vimrc?

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

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

ответ

34

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

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

Тип:

:help if 

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

+0

Тип: вариант, чтобы выяснить, какая версия Vim это. –

+0

@anon, спасибо, что это сработало, но когда я делаю 'vi --version', он показывает' VIM - Vi IMproved 7.2 (2008 9 августа, скомпилированный 17 февраля 2012 10:24:10) ', так что это VIM, скомпилированный vi с функциями выкл. Как я могу видеть далее в описании «Малая версия без GUI». Но почему это сработало? Я что-то упускаю. – garg10may

6

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

12

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

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

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


if has("autocmd") 
    " Buffers 
    autocmd BufEnter * cd %:p:h 
endif 
3

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

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