NERDTree Как открыть файл и автоматически закрыть буфер обозревателя

10

При использовании плагина NERDTree поведение по умолчанию заключается в открытии нового файла и сохранении открытого буфера NERDTree. Я хочу сохранить это поведение по умолчанию, но также переопределить его, когда я хочу, чтобы буфер NERDTree был закрыт после того, как я открыл файл.

Я знаю, что могу использовать let NERDTreeQuitOnOpen=1для автоматического закрытия буфера NERDTree при открытии нового файла, но эта опция полностью переопределяет поведение по умолчанию (а это не то, что мне нужно).

В идеале я хотел бы знать, есть ли встроенная функция в NERDTree, чтобы делать то, что я хочу. (Я искал, но ничего подобного не нашел, так что полагаю, что на самом деле его не существует)

И если этого не существует, у меня было две идеи:

  • Во-первых, нужно создать функцию, которая будет установлена NERDTreeQuitOnOpenна 1, открыть файл, а затем снова установить NERDTreeQuitOnOpenна 0.

  • Второй - создать следующее отображение: map d<CR> <CR> :NERDTree <CR> :bd<CR>которое открывает файл (первый <CR>), возвращается в буфер NERDTree ( :NERDTree <CR>) и закрывает этот буфер ( :bd <CR>). Я должен улучшить его, чтобы отображение существовало только в буфере NERDTree, но я чувствую, что это довольно уродливое решение, и я думаю, что оно может быть улучшено.

Какая идея будет лучшей и почему? Или есть еще лучший вариант?

statox
источник
1
Обязательная статья: Масло и уксус - раздельные окна и ящик проекта
Питер Ринкер
@Peter: Спасибо за ваш комментарий, статья довольно интересная, и я, вероятно, попробую netrw и концепцию split explorer. Я думаю, что понимаю преимущество того, что объясняется в статье, но проблема в том, что это на самом деле не решает мою проблему, а просто советует сменить инструмент, который я использую. Я не против изменения своих привычек, но я хотел бы сначала решить свою проблему, а затем попробовать новый инструмент :)
statox
Связанный, оставшийся без ответа вопрос по SU: superuser.com/q/821720/334516 . Может map d<cr> <cr>:NERDTreeClose<cr>для картографии?
Муру
@muru: Спасибо, ваше отображение работает нормально, и оно кажется менее уродливым, чем мое :). Что касается вопроса о SU, я не уверен, что он полностью связан, так как он хочет открыть файл в буфере NERDTree, тогда как я хочу откройте его в новом буфере и затем закройте буфер NERDTree: он заканчивается разделенными окнами, тогда как я хочу получить 2 буфера не в разделенном окне.
statox

Ответы:

5

Поскольку вопрос, кажется, не вызывает много ответов, я просто отвечу на него предложением @muru, которым я пользовался в течение недели, прежде чем переключиться на проводник netrw. (Конечно, если придет лучший вариант ответа, я с радостью сниму галочку с принятого и приму новый)

Идея состоит в том, чтобы использовать следующее отображение:

map d<cr> <cr>:NERDTreeClose<cr>

Который открывает файл, как обычно, и затем вызывает функцию, которая закрывает буфер NERDTree, независимо от того, где находится курсор.

РЕДАКТИРОВАТЬ: Я недавно переключился на NERDTree и переработал свое решение: отображение, которое я предлагал ранее, работало, но, поскольку оно существовало в каждом буфере, мне приходилось дважды нажимать dкаждый раз, когда я хотел удалить что-то, что довольно раздражает. (Возможно, я мог бы изменить timeoutнастройки, но мне нравится способ, которым он в настоящее время установлен для меня, также я не хотел отображать его на другую комбинацию клавиш).

Поэтому я заменил свое первое решение на следующие строки .vimrc:

autocmd BufEnter NERD_tree_* nmap  d<CR> <CR> :NERDTreeToggle <CR>
autocmd BufLeave NERD_tree_* unmap d<CR>

Таким образом, отображение создается только в NERDTreeбуферах и не мешает моему рабочему процессу в других буферах.

statox
источник