vim - 在 VIM 退出时关闭所有 NERDtree 实例
问题描述
如果您在退出 VIM 时打开了任何 NERDTree 实例,那么当您再次打开会话时,您会收到许多错误:
Error detected while processing BufLeave Autocommands for "NERD_tree_*":
E121: Undefined variable: b:NERDTree
Error detected while processing WinLeave Autocommands for "NERD_tree_*":
Error detected while processing BufLeave Autocommands for "NERD_tree_*":
E121: Undefined variable: b:NERDTree
Error detected while processing WinLeave Autocommands for "NERD_tree_*":
我试图:tabdo NERDTreeClose
在 vim 退出时自动执行(例如使用 qa 或 wqa 或 qa!等)
我要补充:
autocmd VimLeave * tabdo NERDTreeClose<CR>
或者
autocmd VimLeave * :tabdo NERDTreeClose<CR>
最后有或没有<CR>
,但我无法让它工作。
有什么建议么?
解决方案
[neo]Vim
我以前在创建(和重新进入)会话和多个实例的组合中遇到了完全相同的问题NERDTree
。
由于稍后将解释的原因,我的解决方案可能不是您正在寻找的确切答案,它是首先关闭所有NERDTree
实例,然后再创建或更新[neo]Vim
-Session 以供以后使用。因此,到目前为止,您一直在尝试tabdo
的几个“阶段”为时已晚,因为自动命令的触发事件是VimLeave
.
我的主要建议(也是我个人的手段)是创建一个快速键绑定,它执行我上面提到的两个过程,并结合快速保存全部串行:
cnoremap W tabdo NERDTreeClose <bar> wa <bar> mksession! ~/.vim/My_Session.vim
可以轻松地记住它是w
命令行模式下用于保存(单个缓冲区)的默认设置的大哥。
此方法的一个警告是,NERDTree
当重新进入从上面保存的会话时,所有实例都将关闭。然而,这可以通过调用NERDTreeToggle
withVimEnter
作为触发事件来解决
autocmd
。
如果您坚持使用autocmd
此功能,我建议将上面列出的两个过程放入一个函数中,然后像您之前尝试过的那样使用autocmd
来调用该函数(使用[neo]Vim
命令:call) ,当然前提是您感到被迫VimLeave
在每次退出期间保存会话。我个人并不赞同这一点,因为我会迅速启动[neo]Vim
以快速记录无关紧要的事情并迅速退出的情况很多,这当然不需要保存会话。
作为旁注:autocmd 的语法:
:au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
因此,cmd
直接用命令替换,即您在原始帖子中尝试的前缀冒号是一种弊端。
推荐阅读
- javascript - 循环执行获取请求
- python - “目录名称无效”在 Windows 中使用 os.makedirs 和名为“aux”的文件夹
- twilio - 特维利奥
动词没有完成一个 20 秒的 wav 文件 非常被执行 - github-pages - GitHub Pages 和 Google 域设置 - 必须在域的 www 版本之前输入 https://
- javascript - 使用ajax提交表单时如何发送电子邮件
- regex - 如何在 python 中引用特定的变量列表项?
- vb.net - 带有 score_threshold 的 AutoML REST 调用返回 400 Bad Request
- r - 你如何在 R Plotly 饼图中将标题居中?
- unity3d - Photon 2 无法加入随机房间
- python - 如何使 Altair 绘图响应