Закройте все экземпляры NERDtree на выходе VIM - PullRequest
0 голосов
/ 31 марта 2020

Если у вас есть открытые экземпляры 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_*":

Я пытаюсь автоматически выполнить :tabdo NERDTreeClose при выходе из vim ( например, с qa или wqa или qa! et c)

Я добавляю:

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

с <CR> или без него на конец, но я не могу заставить его работать.

Есть предложения?

1 Ответ

1 голос
/ 01 апреля 2020

Ранее я сталкивался с точно такой же проблемой, связанной с созданием (и повторным входом) [neo]Vim -сессион и нескольких NERDTree -экземпляров.

Мое решение, которое, возможно, не является точным ответом, который вы ищете по причине, которая будет объяснена позже, состояло в том, чтобы сначала закрыть все NERDTree экземпляров до создание или обновление [neo]Vim -сессии для последующего использования. То, что вы пытались до сих пор с tabdo, таким образом, слишком поздно для нескольких «этапов», так как инициирующим событием для автокоманды является VimLeave.

Мое основное предложение (также мое личное средство) состоит в том, чтобы создать быстрое связывание клавиш, которое выполняет две процедуры, которые я описал выше, в сочетании с быстрым сохранением всех в серийном режиме:

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

который можно легко запомнить как старшего брата по умолчанию w в режиме командной строки для сохранения (один буфер).

Единственное предостережение этого метода в том, что все экземпляры NERDTree будут закрыты при повторном входе в сеанс, сохраненный сверху. Это, однако, можно несколько исправить, вызвав NERDTreeToggle с VimEnter в качестве инициирующего события для autocmd.

Если вы настаиваете на использовании autocmd для этого, я бы предложил поставить две процедуры зачислен выше в функцию и используйте autocmd для вызова этой функции (с помощью команды [neo]Vim: call) после VimLeave, как вы это делали ранее, конечно, при условии, что вы чувствуете необходимость сохранять сеанс во время каждого Выход. Лично я не одобряю это, поскольку было много случаев, когда я быстро запускал [neo]Vim для быстрой заметки чего-то несущественного и быстрого выхода, что, конечно, не требует сохранения сеанса.

В качестве sidenote: синтаксис autocmd:

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

, таким образом, замените cmd непосредственно на команду, т. Е. Префикс двоеточия, который вы пробовали в исходном посте, является злоупотребление служебным положением.

...