По моему .vimrc
я пытаюсь использовать ftplugin
и, очевидно, использовать некоторые команды, относящиеся к этому, при условии, что он был загружен успешно. Тем не менее, я столкнулся с несколькими старыми машинами, на которых не установлен плагин. Можно ли как-то сделать загрузку этого плагина условной и добавить filetype on
и аналогичные директивы в один и тот же условный блок?
Я видел, что есть условия для цветовых схем и версии Vim, но я не видел пример, который проверял бы плагин (или не распознавал его).
NB: будь осторожен, я начинающий VimScript.
~/.vimrc
, как вы , поэтому вы не сможете протестировать эффекты плагина в вашем,~/.vimrc
если вы не протестируете на наличие файла плагина или не отложите тест до тех пор, пока плагины не будут загружены автокомандой, такой как VimEnter.Ответы:
Вы можете заключить этот блок в условие, которое использует
exists()
функцию, чтобы проверить, известна ли vim переменная, команда или функция, определенная плагином.Вот пара битов, которые у меня есть в файлах в ~ / .vim:
Обратите внимание, что приведенные выше биты находятся в файлах, которые оцениваются после обычных плагинов, здесь ftplugin и файл в
after/plugin
каталоге.Другой вариант - использовать блоки try / catch, хотя для этого требуется как минимум vim 7.0:
Если что-то в
try
разделе этого блока выходит из строя, оно переходит кcatch
разделу. Посколькуcatch
раздел пуст, он просто продолжит работу с остальной частью файла инициализации послеendtry
оператора.Поскольку это загрузка кода вручную, а не использование уже загруженного плагина, это можно сделать в самом файле .vimrc.
источник
try
конструкции? Старый Вим поймет это? Т.е. когда это было введено. Спасибо и +1 на данный момент.try
должно работать. Большое спасибо. Посмотрим, будет ли еще один ответ. В противном случае я, конечно, приму ваше.:silent! {cmd}
, которая подавляет ошибку, когда{cmd}
ее не существует. Это даже работает в Vim 6.Мой предпочтительный метод - просто проверить наличие файла плагина. Я считаю это проще.
источник
Я хотел достичь этого, сохраняя конфигурацию Vim вместе
.vimrc
, а не в кучеafter/
каталогов. Это решение, которое я придумал:Проверьте существование каждого плагина, проверив наличие любой отдельной команды, которую он предоставляет
exists()
, и установите его параметры, если он существует. (Это так же, как в принятом ответе.)Поместите все параметры, указанные выше, в функцию (вызываемую
SetPluginOptionsNow()
в моем коде).Вызывайте эту функцию для
VimEnter
события, которое запускается при входе в новый сеанс Vim, но, что важно, после загрузки всех плагинов. Из-за этого нашиexists()
проверки могут без проблем проверять функции плагина.Вот образец из этой части моей
.vimrc
.источник
airline_theme
кажется, вызывает кучу ошибок ... Я не совсем уверен, почему.Используется еще одна альтернатива
:silent! {cmd}
, которая подавляет ошибку, когда{cmd}
ее не существует. Главное преимущество в том, что это короткая одиночная команда. Это даже работает в Vim 6 и отлично подходит для дополнительных вещей.Например, он используется плагинами, которые используют repeat.vim Тима Попа для повторения отображений.
источник
!silent runtime ftplugin/man.vim | filetype on | filetype plugin on | filetype indent on
работы, чтобы закрыть все команды, следующие за!silent
или это всегда специфично для следующей команды?:silent!
не так!silent
, и это относится ко всем содержащимся командам, за исключением случаев, когда:unsilent
используется где-то внутри. (Но это редко.)Первоначально опубликовано в другой вопрос: /programming//a/48178537/2843583
В качестве альтернативы вы также можете использовать регулярное выражение, чтобы решить, есть ли плагин под рукой
runtimepath
:Преимущество этого заключается в том, что он работает с плагинами, которые имеют в
autoload
каталоге только код vimscript , который, в свою очередь, не может быть обнаружен при первоначальном анализе .vimrc, поскольку фрагменты автозагрузки загружаются во время вызова функции.источник