Ранее я сталкивался с точно такой же проблемой, связанной с созданием (и повторным входом) [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
непосредственно на команду, т. Е. Префикс двоеточия, который вы пробовали в исходном посте, является злоупотребление служебным положением.