Учебное руководство по созданию плагина VIM?

Я хотел бы сделать сценарий, который выполняет ряд команд (в основном всего две строки):

:v/\S/d
:w

Но я не могу найти учебное руководство о том, как сделан. Кто-либо?

8
задан 22.09.2016, 08:44

1 ответ

Существует много способов продолжиться.

A-You может записать простой сценарий, который содержит строки, Вы хотите выполнить, и вызвать его вручную. исключая:

" $HOME/.vim/macros/foo.vim
:v/\S/d_
:update
" EOF

" and from vim
:runtime macros/foo.vim
" or
:so ~/.vim/macros/foo.vim

B-у Вас может быть плагин, который содержит что-то, что инициирует то, что Вы хотите выполнить. Если действие немного сложно, мы обычно предпочитаем определять функцию в целях обслуживания.

B.1. Если функция достаточно коротка и использовала каждый раз, когда Вы используете энергию, можно определить ее в плагин.

B.1.1. Если Вы предпочитаете вызывать функцию непосредственно (обычно никогда случай) с :call Foo(), необходимо обнародовать его путем давания ему имени, которое начинается с прописной буквы:

" ~/.vim/plugin/foo.vim
function! Foo()
    :v/\S/d_
    :update
endfunction

(Что решение загрязняет глобальное пространство имен, кроме того, другие плагины могут отвергнуть его.)

B.1.2 Обычно, мы определяем или отображение или команду, которая вызовет функцию. Таким образом, функция может быть сделана локальной для текущего сценария - его имя запускается с s:.

" ~/.vim/plugin/foo.vim
function! s:Foo()
    :v/\S/d_
    :update
endfunction

Теперь можно или определить команду:

" ~/.vim/plugin/foo.vim
command! -nargs=0 Foo call s:Foo()

или отображение:

" ~/.vim/plugin/foo.vim
" to call a script-local function from a mapping (defined in the same script!)
" we need to use <sid> instead of s:
nnoremap µ :call <sid>Foo()<cr>

" or the more "professional" way that permits other users to choose another 
" trigger for the mapping
nnoremap <Plug>Foo :call <sid>Foo()<cr>
if !hasmapto('<Plug>Foo', 'n')
    nmap µ <Plug>Foo
endif

" ~/.vimrc
" this way some users may bind the action to anything else in their .vimrc
" while the default mapping on µ is defined for the all the other users
:nmap <f11> <Plug>Foo

B.2. Если функция действительно долга отдельно, или из-за других функций она требует для выполнения ее работы, и/или если функция редко используется, мы предпочитаем определять ее в плагине автозагрузки:

" ~/.vim/autoload/yourinitials/foo.vim
" NB: I use my initials (lh) to avoid name clashes on common filenames
function! yourinitials#foo#bar()
   ....

и вызов к (общедоступной) функции от плагина сделан с помощью... имени функции:

" ~/.vim/plugin/foo.vim
command! -nargs=0 Foo call yourinitials#foo#bar()
nnoremap <Plug>Foo :call yourinitials#foo#bar()<cr>

Последние примечания:

Мы обычно обеспечиваем защиту антивключения на плагинах (и ftplugins), но не на простых сценариях, ни на плагинах автозагрузки. Это вызвано тем, что можно хотеть предотвратить от их .vimrc, некоторые плагины, которые будут загружены. Комментарий: плагин muTemplate, который я поддерживаю, имеет skeletons для различных видов сценариев энергии.

Однако мы можем когда-то хотеть перезагрузить один конкретный плагин, который мы поддерживаем для использования/тестирования/настраивания (новой) функции (функций), которую мы разрабатываем. В этом случае важно, чтобы функции и управляли, чтобы по определениям ударили с a ! разрешать их переопределение.

13
ответ дан 07.12.2019, 14:00

Теги

Похожие вопросы