Используйте общий код для плагина типа файла

У меня есть общий набор команд, которые я хочу запускать в нескольких плагинах различных типов файлов Vim. Например, для html, xml и xhtml есть несколько общих настроек, которые я хочу использовать. Где лучше всего поместить этот общий код и как мне загрузить его в отдельные файлы плагинов?


person brianmearns    schedule 06.05.2014    source источник
comment
Самым простым решением было бы обернуть все настройки в function и использовать autocmd Filtype html, xml, xhtml call MySettings(). Но это должно быть помещено в конец вашего .vimrc, чтобы переопределить любые ранее настроенные настройки.. что вы подразумеваете под как мне загрузить его в отдельные файлы плагина?   -  person DOOM    schedule 06.05.2014
comment
Я просто имею в виду, что если я храню некоторый общий код в одном файле, как заставить его выполнять этот код из другого файла. Думаю, я бы просто использовал source, но я хочу сделать это независимым от системы способом, поэтому я не могу использовать абсолютные пути.   -  person brianmearns    schedule 06.05.2014


Ответы (1)


Общий код в целом

Для повторного использования (локальных в буфере) команд или сопоставлений вы можете определить их в (глобальной) функции и вызвать ее из ftplugin:

" Put this in your .vimrc, or make it an autoload function.
function SetupCommands()
    command! -buffer ...
endfunction

" in your ftplugin script:
call SetupCommands()

Или просто поместите их в отдельный скрипт, который вы :source по запросу, например. ~/.vim/mysetup.vim:

" in your ftplugin script:
runtime mysetup.vim

Наследование типов файлов

Однако ваш вопрос касается особой формы повторного использования: XML, HTML и (X)HTML имеют много общего. Не существует авторитетного способа структурировать его: HTML — это форма XML (но с нарушенной валидностью), XHTML, вероятно, одновременно является и XML, и HTML.

Например, я определяю сокращения для HTML в ~/.vim/ftplugin/html_abb.vim:

inoremap <buffer> <C-CR> <lt>br>

и унаследовать (и переопределить) это в ~/.vim/ftplugin/xhtml_abb.vim:

runtime! ftplugin/html_abb.vim
inoremap <buffer> <C-CR> <lt>br/>

С подходом :runtime вы можете даже смешивать и сочетать: определять инструменты для общего XML и наследовать их для HTML (даже если они могут жаловаться на синтаксис), но определять сокращения для HTML и наследовать их для XHTML, но не для XML. Vim обеспечивает всю гибкость, вы сами выбираете структуру, которая вам подходит.

person Ingo Karkat    schedule 06.05.2014