2010-01-14 12 views
43

Tengo el siguiente en mi .vimrc:salir automáticamente de vim si NERDTree es pasado y solo buffer de

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" Open NERDTree by default 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
autocmd VimEnter * NERDTree 
autocmd VimEnter * wincmd p 

Así,

% vim file.txt 

abre NERDTree y centra el cursor en el buffer archivo.txt . Hago mis ediciones, y presiono: q en el buffer, y me queda. . . NERDTree. Esto es molesto

Podría usar: qa para cerrar todos los buffers, y salir de vim, pero estoy acostumbrado a: q tropo. Así que me pregunto si hay una manera de detectar que el buffer único que queda es NERDTree, y "unificar" las dos memorias intermedias, a los efectos de: q

Editar

Pedid y recibir: https://github.com/scrooloose/nerdtree/issues#issue/21

Respuesta

68

Se ha publicado un script para hacer exactamente esto en la lista de problemas de NERDTree. Consulte issue-21 en GitHub para nerdtree.

Esto lleva a la única línea de comandos para su vimrc here:

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif 
+0

Gracias, ese script es precisamente lo que estaba buscando. Probablemente deberías obtener el cheque, pero por desgracia, es demasiado tarde. . . Tendrás que conformarte con un voto popular. – g33kz0r

+0

@Noah: puede cambiar su respuesta aceptada. – abcd

+0

@yoda está hecho. – g33kz0r

1

una idea en la necesidad de aplicación:

se podría escribir una función que, cuando se le llama, comprueba si el único amortiguador restante (o quizás el único tampón no ayuda, si lo prefiere) es una memoria intermedia NERDTree y , si es así, lo elimina (o simplemente se cierra).

Luego haga que autocmd lo ejecute cada vez que se borre/oculte un búfer/lo que suceda realmente cuando: q (me avergüenza admitir que no estoy del todo seguro).

+1

Eso es lo que hace http://stackoverflow.com/a/5403847/15690. – blueyed

+0

¡Genial! Veo que es tu respuesta a la que apunta tu enlace, muy genial. (Para que quede claro, sin embargo, esa respuesta tiene marca de tiempo 13 meses después de esta, que publiqué 17 minutos después de que el OP publicó por primera vez su pregunta sobre SO hace más de cuatro años y medio, así que voy a tratar esta como parte del registro histórico y déjalo aquí.) –

0

Podría :cabbrv q qa pero le aconsejaría que no lo haga porque lo olvidará cuando realmente desee q.

0

Me gusta hacer esto: cmap bq :bufdo q<CR> para cerrar todos los buffers con dos teclas presionadas en el modo de comando.

12
function! s:CloseIfOnlyControlWinLeft() 
    if winnr("$") != 1 
    return 
    endif 
    if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1) 
     \ || &buftype == 'quickfix' 
    q 
    endif 
endfunction 
augroup CloseIfOnlyControlWinLeft 
    au! 
    au BufEnter * call s:CloseIfOnlyControlWinLeft() 
augroup END 

Desde mi vimrc, basado en una versión de janus repo.

Mejoras: también se cierra si solo queda una ventana de revisión. En su lugar, utiliza el autocomando BufEnter, que se requiere para que &bt funcione correctamente.

+0

Esto funciona muy bien –

Cuestiones relacionadas