如何在vimscript函数中执行全局命令?
如何编写执行:NERDTree命令的函数?注意:我使用的是neovim,但我假设vimscript语法是相同的 这是我的密码如何在vimscript函数中执行全局命令?,vim,nerdtree,neovim,Vim,Nerdtree,Neovim,如何编写执行:NERDTree命令的函数?注意:我使用的是neovim,但我假设vimscript语法是相同的 这是我的密码 nmap <expr> <C-n> Toggle() func Toggle() if g:open == 0 let g:open += 1 execute g:NERDTreeCWD else let g:open -= 1 execute g:NERDTreeClose endfunc nmap T
nmap <expr> <C-n> Toggle()
func Toggle()
if g:open == 0
let g:open += 1
execute g:NERDTreeCWD
else
let g:open -= 1
execute g:NERDTreeClose
endfunc
nmap Toggle()
func Toggle()
如果g:open==0
设g:open+=1
执行g:NERDTreeCWD
其他的
设g:open-=1
执行g:NERDTreeClose
endfunc
NERDTree命令是自定义的Ex命令,因此您可以通过:NERDTreeCWD
然后按Enter键(以交互方式)调用它们。在Vimscript中,可以删除:
前缀
可能部分混淆(也可以在注释中看到)源于NERDTree命令由同名全局函数实现的事实:
:verbose command NERDTreeCWD
Name Args Address Complete Definition
| NERDTreeCWD 0 call NERDTreeCWD()
因此,您也可以绕过自定义函数,直接调用NERDTreeCWD(),但这会使您依赖于插件的实现细节,因此不鼓励这样做
实现NERDTree切换
你知道插件已经有一个命令了吗
此外,您不需要定义自己的标志变量(
g:open
),只需重用插件中的一个(通过g:NERDTree.IsOpen()函数公开)。是的,这使您依赖于插件细节(但这看起来像是一个公共API,而不是内部实现,所以它应该更稳定)-这仍然比试图重新发明轮子要好。(您的全局标志在多个选项卡页上会出现问题-每个选项卡页都可能有一个NERDTree处于活动状态或未处于活动状态。)您不需要,因为您不进行评估。你需要()
。因此:g:NERDTreeCWD()
和g:NERDTreeClose()
。函数不需要g:
,变量只需要help:g
)。所以:NERDTreeCWD()
非常感谢您提供的有用信息。我应该在前面解释的是,我正在尝试解决一个问题:nerdtreetobggle,其中命令打开父目录的第二个不需要的树,该树在切换后仍然存在。其想法是使用NERDTreeCWD,因为它不会生成不需要的父树。我尝试使用call NERDTreeCWD()
但是我得到了这个错误E523:这里不允许
。