NERDTree Cómo abrir un archivo y cerrar automáticamente el búfer del explorador

10

Cuando se usa el complemento NERDTree, el comportamiento predeterminado es abrir un nuevo archivo y mantener abierto el búfer NERDTree. Lo que quiero hacer es mantener este comportamiento predeterminado, pero también anularlo cuando lo desee para que el búfer NERDTree se cierre después de abrir un archivo.

Sé que puedo usar let NERDTreeQuitOnOpen=1para cerrar automáticamente el búfer NERDTree cuando abro un nuevo archivo, pero esta opción anula totalmente el comportamiento predeterminado (que no es lo que quiero).

Idealmente, me gustaría saber si hay una función incorporada en NERDTree para hacer lo que quiero. (He estado buscando pero no encontré nada así, así que supongo que en realidad no existe)

Y si eso no existe, tuve dos ideas:

  • El primero es crear una función que se establezca NERDTreeQuitOnOpenen 1, abra el archivo y luego vuelva NERDTreeQuitOnOpena establecerlo 0.

  • El segundo es crear la siguiente asignación: map d<CR> <CR> :NERDTree <CR> :bd<CR>que abre el archivo (primero <CR>), vuelve al búfer NERDTree ( :NERDTree <CR>) y cierra este búfer ( :bd <CR>). Debería mejorarlo para que el mapeo solo exista en el búfer NERDTree, pero creo que es una solución bastante fea y creo que se puede mejorar.

¿Qué idea sería la mejor y por qué? ¿O hay una opción aún mejor?

statox
fuente
@ Peter: Gracias por tu comentario, el artículo es bastante interesante y probablemente intentaré descubrir el concepto de explorador dividido. Creo que entiendo la ventaja de lo que se explica en el artículo, pero el problema es que en realidad no resuelve mi problema, solo aconseja cambiar la herramienta que uso. No estoy en contra de cambiar mis hábitos, pero me gustaría resolver mi problema primero y luego probar una nueva herramienta :)
statox
Pregunta relacionada sin respuesta en SU: superuser.com/q/821720/334516 . Tal vez map d<cr> <cr>:NERDTreeClose<cr>para el mapeo?
muru
@muru: Gracias, su mapeo funciona bien y parece menos feo que el mío :) Acerca de la pregunta sobre SU, no estoy seguro de que esté totalmente relacionado, ya que quiere abrir el archivo en el búfer de NERDTree mientras que quiero ábralo en un nuevo búfer y luego cierre el búfer NERDTree: termina con una ventana dividida, mientras que quiero terminar con 2 búferes que no están en una ventana dividida.
statox

Respuestas:

5

Como la pregunta no parece generar mucha respuesta, solo la responderé con la sugerencia de @muru, que es lo que he usado durante una semana antes de cambiarme al explorador netrw. (Por supuesto, si aparece una mejor opción, con mucho gusto desmarcaré la mía como aceptada y aceptaré la nueva)

La idea es utilizar el siguiente mapeo:

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

Lo que abre el archivo como se hace generalmente y luego llama a la función que cierra el búfer NERDTree sin importar dónde esté el cursor.

EDITAR: Recientemente volví a NERDTree y volví a trabajar en mi solución: la asignación que sugerí antes funcionaba, pero como existía en cada búfer tuve que presionar ddos veces cada vez que quería eliminar algo que es bastante molesto. (Tal vez podría haber cambiado la timeoutconfiguración, pero me gusta la forma en que está configurada actualmente para mí, también no quería asignarla en otra combinación de teclas).

Así que reemplacé mi primera solución por las siguientes líneas a mi .vimrc:

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

De esta forma, la asignación se crea solo en los NERDTreebúferes y no se mete con mi flujo de trabajo en los otros búferes.

statox
fuente