【问题标题】:Close all NERDtree instances on VIM exit在 VIM 退出时关闭所有 NERDtree 实例
【发布时间】:2020-03-31 17:12:49
【问题描述】:

如果您在退出 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_*":

我试图在 vim 退出时自动执行 :tabdo NERDTreeClose(例如,使用 qa 或 wqa 或 qa! 等)

我正在补充:

autocmd VimLeave * tabdo NERDTreeClose<CR>autocmd VimLeave * :tabdo NERDTreeClose<CR>

最后有或没有<CR>,但我不能让它工作。

有什么建议吗?

【问题讨论】:

    标签: vim nerdtree


    【解决方案1】:

    我之前遇到过与以下组合完全相同的问题 创建(并重新输入)[neo]Vim-sessions 和多个 NERDTree-instances。

    我的解决方案,这可能不是您正在寻找的准确答案 由于后面会解释的原因,是首先关闭所有NERDTree 实例创建或更新[neo]Vim-Session 以供以后使用。 因此,到目前为止,您一直在尝试使用 tabdo 进行一些“阶段” 晚了,因为自动命令的触发事件是VimLeave

    我的主要建议(也是我个人的手段)是创建一个快速的 执行我上面提到的两个过程的键绑定以及快速 串行保存:

    cnoremap W tabdo NERDTreeClose <bar> wa <bar> mksession! ~/.vim/My_Session.vim
    

    它可以被舒适地记住为默认w的大哥 用于保存的命令行模式(单个缓冲区)。

    此方法的一个警告是NERDTree 的所有实例都将被关闭 重新进入从上面保存的会话时。然而,这可能有点 通过调用NERDTreeToggleVimEnter 作为触发事件来补救 autocmd.

    如果你坚持使用autocmd,我建议把这两个 上面列出的过程到一个函数中并使用autocmd 来调用它 功能(使用[neo]Vim 命令:调用)VimLeave 就像你有 之前尝试过,当然是假设您在每次退出时都必须保存会话。我个人不赞同这一点,因为实例很多 我会迅速启动[neo]Vim 快速记录一些无关紧要的事情 并迅速退出,这当然不需要保存会话。

    附带说明:autocmd 的语法:

    :au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
    

    因此,直接用命令替换cmd,即前缀冒号作为你 在您的原始帖子中尝试过是一种弊端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多