Existem muitas maneiras de prosseguir.
A- Você pode escrever um script simples que contenha as linhas que deseja executar e invocá-lo manualmente. ex:
" $HOME/.vim/macros/foo.vim
:v/\S/d_
:update
" EOF
" and from vim
:runtime macros/foo.vim
" or
:so ~/.vim/macros/foo.vim
B- Você pode ter um plugin que contenha algo que irá disparar o que você deseja executar. Se a ação for um pouco complexa, geralmente preferimos definir uma função para fins de manutenção.
B.1. Se a função é curta o suficiente e usada toda vez que você usa o vim, você pode defini-la em seu plugin.
B.1.1. Se você preferir invocar a função diretamente (geralmente nunca o caso) com :call Foo()
, você deve torná-la pública, dando a ela um nome que comece com uma letra maiúscula:
" ~/.vim/plugin/foo.vim
function! Foo()
:v/\S/d_
:update
endfunction
(Essa solução polui o namespace global , além disso, outros plugins podem anulá-lo.)
B.1.2 Normalmente, definimos um mapeamento ou um comando que chamará a função. Desta forma, a função pode ser feita local para o script atual - seu nome começa com s:
.
" ~/.vim/plugin/foo.vim
function! s:Foo()
:v/\S/d_
:update
endfunction
Agora você pode definir um comando:
" ~/.vim/plugin/foo.vim
command! -nargs=0 Foo call s:Foo()
ou um mapeamento:
" ~/.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. Se a função é realmente longa por si só, ou por causa das outras funções que requer para realizar seu trabalho, e / ou se a função é raramente usada, preferimos defini-la em um plugin de autoload:
" ~/.vim/autoload/yourinitials/foo.vim
" NB: I use my initials (lh) to avoid name clashes on common filenames
function! yourinitials#foo#bar()
....
e a chamada para a função (pública) do plugin é feita usando o ... nome da função:
" ~/.vim/plugin/foo.vim
command! -nargs=0 Foo call yourinitials#foo#bar()
nnoremap <Plug>Foo :call yourinitials#foo#bar()<cr>
Últimas notas:
Geralmente fornecemos proteções anti-inclusão em plugins (e ftplugins), mas não em scripts simples ou em plug-ins de carregamento automático. Isso porque alguém pode querer impedir, de seus arquivos .vimrc, que alguns plugins sejam carregados. Observação: o plugin muTemplate que eu estou mantendo tem esqueletos para os diferentes tipos de scripts vim.
No entanto, podemos em algum momento querer recarregar um plugin em particular que estamos mantendo para usar / testar / ajustar a (nova) função (s) que estamos desenvolvendo. Nesse caso, é importante que as definições de funções e comandos sejam atingidas com um !
para permitir sua substituição.