我想制作一个执行一系列命令(基本上只有两行)的脚本:
:v / \ S / d :w
但我找不到有关如何完成的教程。任何人?
有很多方法可以进行。
答:您可以编写一个简单的脚本,其中包含要执行的行,然后手动调用它。前任:
" $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。如果该函数足够简短并且每次使用vim都可以使用,则可以在插件中定义它。
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()
....
并使用...函数名称完成从插件对(public)函数的调用:
" ~/.vim/plugin/foo.vim
command! -nargs=0 Foo call yourinitials#foo#bar()
nnoremap <Plug>Foo :call yourinitials#foo#bar()<cr>
最后说明:
我们通常在插件(和ftplugins)上提供反包含防护,但在普通脚本或自动加载插件上不提供。这是因为可能要阻止他们的.vimrc加载某些插件。备注:我正在维护的插件muTemplate具有用于各种vim脚本的框架。
但是,有时我们可能想重新加载我们正在维护的特定插件,以便使用/测试/调整我们正在开发的(新)功能。在这种情况下,重要的是将功能和命令定义打上!
以允许其覆盖。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句