在 VIM 退出时关闭所有 NERDtree 实例
Close all NERDtree instances on VIM exit
如果您在退出时打开了任何 NERDTree 实例 VIM,那么当您再次打开会话时,您会收到一些错误:
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_*":
我正在尝试在 vim 退出时自动执行 :tabdo NERDTreeClose
(例如使用 qa 或 wqa 或 qa! 等)
我正在添加:
autocmd VimLeave * tabdo NERDTreeClose<CR>
或
autocmd VimLeave * :tabdo NERDTreeClose<CR>
最后有或没有 <CR>
但我无法让它工作。
有什么建议吗?
我以前遇到过与以下组合完全相同的问题
创建(并重新进入)[neo]Vim
-会话和多个 NERDTree
-实例。
我的解决方案,可能不是您正在寻找的准确答案
由于稍后将解释的原因,是 首先 关闭所有 NERDTree
实例 before 创建或更新 [neo]Vim
-Session 供以后使用。
到目前为止,您使用 tabdo
所做的尝试也有一些 "stages"
晚了,因为自动命令的触发事件是VimLeave
。
我的主要建议(也是我个人的手段)是创建一个快速
执行我上面提到的两个过程的键绑定结合快速
串行保存:
cnoremap W tabdo NERDTreeClose <bar> wa <bar> mksession! ~/.vim/My_Session.vim
作为默认 w
中的大哥,可以轻松记住
用于保存的命令行模式(单个缓冲区)。
此方法的一个警告是 NERDTree
的所有实例都将关闭
重新进入从上面保存的会话时。然而,这可能有点
通过以 VimEnter
作为触发事件调用 NERDTreeToggle
来补救
autocmd
.
如果你坚持要使用 autocmd
,我建议把这两个
上面列出的过程进入一个函数并使用 autocmd
来调用它
功能(使用 [neo]Vim
命令:调用)在 VimLeave
就像你有
之前尝试过,当然是假设您在每次退出时都不得不保存会话。我个人不赞同这一点,因为这样的例子很多
我会迅速启动 [neo]Vim
以快速记录一些无关紧要的事情
并迅速退出,这当然不需要保存会话。
旁注:autocmd 的语法:
:au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
因此,直接将 cmd
替换为命令,即前缀冒号
试过你原来的post是个弊端。
如果您在退出时打开了任何 NERDTree 实例 VIM,那么当您再次打开会话时,您会收到一些错误:
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_*":
我正在尝试在 vim 退出时自动执行 :tabdo NERDTreeClose
(例如使用 qa 或 wqa 或 qa! 等)
我正在添加:
autocmd VimLeave * tabdo NERDTreeClose<CR>
或
autocmd VimLeave * :tabdo NERDTreeClose<CR>
最后有或没有 <CR>
但我无法让它工作。
有什么建议吗?
我以前遇到过与以下组合完全相同的问题
创建(并重新进入)[neo]Vim
-会话和多个 NERDTree
-实例。
我的解决方案,可能不是您正在寻找的准确答案
由于稍后将解释的原因,是 首先 关闭所有 NERDTree
实例 before 创建或更新 [neo]Vim
-Session 供以后使用。
到目前为止,您使用 tabdo
所做的尝试也有一些 "stages"
晚了,因为自动命令的触发事件是VimLeave
。
我的主要建议(也是我个人的手段)是创建一个快速 执行我上面提到的两个过程的键绑定结合快速 串行保存:
cnoremap W tabdo NERDTreeClose <bar> wa <bar> mksession! ~/.vim/My_Session.vim
作为默认 w
中的大哥,可以轻松记住
用于保存的命令行模式(单个缓冲区)。
此方法的一个警告是 NERDTree
的所有实例都将关闭
重新进入从上面保存的会话时。然而,这可能有点
通过以 VimEnter
作为触发事件调用 NERDTreeToggle
来补救
autocmd
.
如果你坚持要使用 autocmd
,我建议把这两个
上面列出的过程进入一个函数并使用 autocmd
来调用它
功能(使用 [neo]Vim
命令:调用)在 VimLeave
就像你有
之前尝试过,当然是假设您在每次退出时都不得不保存会话。我个人不赞同这一点,因为这样的例子很多
我会迅速启动 [neo]Vim
以快速记录一些无关紧要的事情
并迅速退出,这当然不需要保存会话。
旁注:autocmd 的语法:
:au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
因此,直接将 cmd
替换为命令,即前缀冒号
试过你原来的post是个弊端。