什么是在 vim 中放置函数的常规文件
whats is the conventional file to put a function in vim
我正在搜索 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. 如果我想将此脚本用作插件,我应该将此脚本放在哪个路径?
更喜欢将函数放在自动加载插件中。它们充当延迟加载的库插件。
- 这将加快您的开始时间。
- 这也将减少名称冲突。例如,我所有的自动加载插件都在
&rtp/autoload/lh
下,函数的名称类似于 lh#foo#bar()
。因此,不存在与定义 foo#bar()
函数的另一个插件发生冲突的风险。
- 这是一种自动记录。您知道在
&rtp/autoload/foo/bar.vim
. 中某处定义了一个名为 foo#bar#titi()
的函数
感谢自动加载插件,我还可以控制我的功能的日志记录级别,插件(库)每个(通过?)插件(库)。例如在最近的 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 windows 中显示我(当我使用这个库在后台生成标签时):
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'
开始,然后阅读包管理器的文档。
我正在搜索 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. 如果我想将此脚本用作插件,我应该将此脚本放在哪个路径?
更喜欢将函数放在自动加载插件中。它们充当延迟加载的库插件。
- 这将加快您的开始时间。
- 这也将减少名称冲突。例如,我所有的自动加载插件都在
&rtp/autoload/lh
下,函数的名称类似于lh#foo#bar()
。因此,不存在与定义foo#bar()
函数的另一个插件发生冲突的风险。 - 这是一种自动记录。您知道在
&rtp/autoload/foo/bar.vim
. 中某处定义了一个名为
foo#bar#titi()
的函数
感谢自动加载插件,我还可以控制我的功能的日志记录级别,插件(库)每个(通过?)插件(库)。例如在最近的 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 windows 中显示我(当我使用这个库在后台生成标签时):
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'
开始,然后阅读包管理器的文档。