我正在搜索vim脚本来清除vim中的寄存器, 我找到了this helpful script
现在我正在插入带有函数的代码并将其放入我的.vimrc
文件
function ClearReg()
let regs='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-"'
let i=0
while (i<strlen(regs))
exec 'let @'.regs[i].'=""'
let i=i+1
endwhile
unlet regs
endfunction
我的问题是
1.是创建函数并将其放在.vimrc文件中的正确方法吗?
2.如果我想使用这个脚本作为插件,我应该把这个脚本添加到哪个路径?
答案 0 :(得分:5)
喜欢将功能放在自动加载插件中。它们充当了延迟加载的库插件。
&rtp/autoload/lh
下,并且这些函数的名称类似于lh#foo#bar()
。多亏了这一点,不存在与定义foo#bar()
函数的另一个插件冲突的风险。foo#bar#titi()
的函数已在&rtp/autoload/foo/bar.vim
。感谢自动加载插件,我还可以控制我的函数,插件(库)per(by?)插件(库)的日志记录级别。例如,在最近的autoload/lh/async.vim
中,我用以下内容启动脚本:
" credits....
let s:k_version = '3132'
" ## Misc Functions {{{1
" # Version {{{2
function! lh#async#version()
return s:k_version
endfunction
" # Debug {{{2
let s:verbose = get(s:, 'verbose', 0)
function! lh#async#verbose(...)
if a:0 > 0 | let s:verbose = a:1 | endif
return s:verbose
endfunction
function! s:Log(expr, ...)
call call('lh#log#this',[a:expr]+a:000)
endfunction
function! s:Verbose(expr, ...)
if s:verbose
call call('s:Log',[a:expr]+a:000)
endif
endfunction
function! lh#async#debug(expr) abort
return eval(a:expr)
endfunction
允许我以lh#aynch#debug('s:job_queue')
为例获取任何脚本变量(或函数)的内部值,并跟踪完成的内容:
function! s:start_next() dict abort " {{{3
...
call s:Verbose('Starting next job: %1', job)
在:call lh#async#verbose(1)
(以及:LHLogs qf
)之后(当我使用此库在后台生成标记时),会在quickfix窗口中显示我:
autoload/lh/async.vim|100| Push or start job: {'txt': 'ctags OTB', 'cmd': 'cd /path/to/src/OTB && ctags --tag-relative=yes --c++-kinds=+pf --fields=+imaSftx{c++.properties} --extra=+q --languages=C,C++ -f ossimplugins.tags -R', 'callback': function('<SNR>256_callback', {'output': [], 'callback': function('<SNR>256_callback')}), 'close_cb': function('<SNR>256_TagGenerated', ['/path/to/src/OTB/ossimplugins.tags', '', {'output': [], 'callback': function('<SNR>256_callback')}]), 'before_start_cb': function('delete', ['/path/to/src/OTB/ossimplugins.tags']), 'args': {'callback': function('<SNR>256_callback', {'output': [], 'callback': function('<SNR>256_callback')}), 'close_cb': function('<SNR>256_TagGenerated', ['/path/to/src/OTB/ossimplugins.tags', '', {'output': [], 'callback': function('<SNR>256_callback')}])}} at 1-th position
autoload/lh/async.vim|116| Starting next job: {'txt': 'ctags OTB', 'cmd': 'cd /path/to/src/OTB && ctags --tag-relative=yes --c++-kinds=+pf --fields=+imaSftx{c++.properties} --extra=+q --languages=C,C++ -f ossimplugins.tags -R', 'callback': function('<SNR>256_callback', {'output': [], 'callback': function('<SNR>256_callback')}), 'close_cb': function('<SNR>256_TagGenerated', ['/path/to/src/OTB/ossimplugins.tags', '', {'output': [], 'callback': function('<SNR>256_callback')}]), 'before_start_cb': function('delete', ['/path/to/src/OTB/ossimplugins.tags']), 'args': {'callback': function('<SNR>256_callback', {'output': [], 'callback': function('<SNR>256_callback')}), 'close_cb': function('<SNR>256_TagGenerated', ['/path/to/srcsrc/OTB/ossimplugins.tags', '', {'output': [], 'callback': function('<SNR>256_callback')}])}}
autoload/lh/async.vim|126| job_start(['/bin/bash', '-c', 'cd /path/to/src/OTB && ctags --tag-relative=yes --c++-kinds=+pf --fields=+imaSftx{c++.properties} --extra=+q --languages=C,C++ -f ossimplugins.tags -R']) status: {'status': 'run', 'stoponexit': 'term', 'exitval': 0, 'exit_cb': 0, 'channel': channel 0 open, 'process': 22266}
autoload/lh/async.vim|148| Job finished process 22266 dead -- {'status': 'dead', 'stoponexit': 'term', 'exitval': 0, 'exit_cb': 0, 'channel': channel 0 closed, 'process': 22266}
我也可以要求在lh-tags插件中生成日志,或者代替async-library。
对于非常简单的脚本来说,这当然有点过分。但是代码越复杂,这种方法就越有用。
关于把它放在哪里。默认情况下,您可以将自动加载插件(或任何其他文件)存储在* nix下的$HOME/.vim/autoload/
或Windows下的$HOME/vimfiles/autoload/
下。但是,如果有一天您希望共享它,或者将其放入自己的存储库,那么存储插件的确切目录将取决于您使用的软件包管理器。首先从:help 'rtp'
开始,然后阅读包管理器的文档。