Как обнаружить vi (не vim) в .vimrc?

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

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

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

Ответы

Ответ 1

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

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

Тип:

:help if

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

Ответ 2

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

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

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


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

Ответ 3

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

Ответ 4

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

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