NERDTree Como abrir um arquivo e fechar automaticamente o buffer do explorer

10

Ao usar o plug-in NERDTree, o comportamento padrão é abrir um novo arquivo e manter o buffer NERDTree aberto. O que eu quero fazer é manter esse comportamento padrão, mas também substituí-lo quando desejar, para que o buffer NERDTree seja fechado após a abertura de um arquivo.

Eu sei que posso usar let NERDTreeQuitOnOpen=1para fechar automaticamente o buffer NERDTree quando abro um novo arquivo, mas essa opção substitui totalmente o comportamento padrão (que não é o que eu quero).

Idealmente, eu gostaria de saber se existe um recurso interno no NERDTree para fazer o que eu quero. (Estive pesquisando, mas não encontrei nada assim, acho que não existe realmente)

E se isso não existir, eu tinha duas idéias:

  • O primeiro é criar uma função que definiria NERDTreeQuitOnOpencomo 1, abra o arquivo e, em seguida, defina novamente NERDTreeQuitOnOpencomo 0.

  • O segundo é criar o seguinte mapeamento: map d<CR> <CR> :NERDTree <CR> :bd<CR>que abre o arquivo (primeiro <CR>), volta ao buffer NERDTree ( :NERDTree <CR>) e fecha esse buffer ( :bd <CR>). Eu deveria aprimorá-lo para que o mapeamento só exista no buffer NERDTree, mas acho que é uma solução bastante feia e acho que pode ser melhorada.

Qual ideia seria a melhor e por quê? Ou existe uma opção ainda melhor?

statox
fonte
11
Artigo obrigatória: Petróleo e vinagre - janelas duplas e a gaveta do projeto
Peter Rincker
@ Peter: Obrigado pelo seu comentário, o artigo é bastante interessante e provavelmente vou tentar descobrir o conceito de split explorer. Acho que entendo a vantagem do que é explicado no artigo, mas o problema é que ele realmente não resolve o meu problema, é aconselhável alterar a ferramenta que uso. Eu não sou contra mudar meus hábitos, mas eu gostaria de resolver o meu problema primeiro e depois tentar uma nova ferramenta :)
statox
Pergunta relacionada não respondida no SU: superuser.com/q/821720/334516 . Talvez map d<cr> <cr>:NERDTreeClose<cr>para o mapeamento?
Muru
@ muru: Obrigado, seu mapeamento funciona bem e parece menos feio do que o meu :) Sobre a pergunta no SU, não tenho certeza se está totalmente relacionado, pois ele deseja abrir o arquivo no buffer do NERDTree enquanto eu quero abra-o em um novo buffer e feche o buffer NERDTree: ele termina com uma janela dividida, enquanto eu quero terminar com 2 buffers que não estão em uma janela dividida.
Statox

Respostas:

5

Como a pergunta parece não gerar muita resposta, responderei com a sugestão do @muru, que é o que eu uso há uma semana antes de mudar para o netrw explorer. (É claro que, se surgir uma resposta melhor, eu desmarcarei com prazer o meu como aceito e aceito o novo)

A ideia é usar o seguinte mapeamento:

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

O que abre o arquivo normalmente, e depois chama a função que fecha o buffer NERDTree, não importa onde esteja o cursor.

EDIT: Recentemente, mudei de volta para o NERDTree e reformulei minha solução: o mapeamento que sugeri antes estava funcionando, mas como existia em todos os buffers, tive que pressionar dduas vezes cada vez que quis excluir algo que é bastante irritante. (Talvez eu possa ter alterado as timeoutconfigurações, mas gosto da maneira como está definida atualmente para mim, também não queria mapeá-lo em outra combinação de teclas).

Então substituí minha primeira solução pelas seguintes linhas na minha .vimrc:

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

Dessa forma, o mapeamento é criado apenas nos NERDTreebuffers e não interfere no meu fluxo de trabalho nos outros buffers.

statox
fonte