Как обнаружить 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