2008-11-01 17 views
229

Soy nuevo en VIM. Uso los comandos :e y :w para editar y escribir un archivo que son muy convenientes. No estoy seguro si hay un comando "cerrar" para cerrar el archivo actual sin salir de VIM?¿Cerrar archivo sin salir de la aplicación VIM?

Sé que el comando :q se puede usar para cerrar un archivo, pero si es el último, VIM también se cierra; En realidad, en Mac OS MacVIM no lo hace. Solo la ventana VIM está cerrada y podría usar Control-N para abrir un VIM en blanco nuevamente. Me gustaría que VIM permanezca abierto con una pantalla en blanco.

Respuesta

306

Esto borra la memoria intermedia (que se traduce para cerrar el archivo)

:bd 
+5

tuya es mejor que la mía por lo que el PO pidió, aunque tiendo a preferir: enew porque me gusta tener el búfer de memoria intermedia en la lista. :) – Rytmis

+2

Cuando hago esto, vim muestra el primer buffer, pero aún puedo acceder al buffer –

+12

@Martin, para eliminar completamente el buffer, use **: bw ** – sebnow

8

Si ya ha guardado el último archivo, entonces: enew es su amigo (: ¡nuevo, si no quiere guardar el último archivo). Tenga en cuenta que el archivo original seguirá estando en su lista de almacenamiento intermedio (la accesible a través de: ls).

17
:[N]bd[elete][!]      *:bd* *:bdel* *:bdelete* *E516* 
:bd[elete][!] [N] 
       Unload buffer [N] (default: current buffer) and delete it from 
       the buffer list. If the buffer was changed, this fails, 
       unless when [!] is specified, in which case changes are lost. 
       The file remains unaffected. Any windows for this buffer are 
       closed. If buffer [N] is the current buffer, another buffer 
       will be displayed instead. This is the most recent entry in 
       the jump list that points into a loaded buffer. 
       Actually, the buffer isn't completely deleted, it is removed 
       from the buffer list |unlisted-buffer| and option values, 
       variables and mappings/abbreviations for the buffer are 
       cleared.
20

Si tiene varias ventanas divididas en la ventana de Vim a continuación: bd cierra la ventana dividida del archivo actual ... entonces me gustaría usar algo un poco más avanzado:

map fc <Esc>:call CleanClose(1) 

map fq <Esc>:call CleanClose(0) 


function! CleanClose(tosave) 
if (a:tosave == 1) 
    w! 
endif 
let todelbufNr = bufnr("%") 
let newbufNr = bufnr("#") 
if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr)) 
    exe "b".newbufNr 
else 
    bnext 
endif 

if (bufnr("%") == todelbufNr) 
    new 
endif 
exe "bd".todelbufNr 
endfunction 
+11

Ahora, ¿qué hace este fragmento? – dolzenko

+1

Probablemente desee después de las llamadas para ejecutar realmente el comando. – dma

+2

@dolzenko asigna 'fc' y 'fq' en modo normal para guardar opcionalmente el búfer actual y luego cambiar a un nuevo búfer antes de eliminar el original. Esto preserva cualquier división que haya configurado. – dma

3

: bd se pueden mapear. Lo mapeo a F4, shift-F4 si necesito forzar el cierre debido a algún cambio que ya no quiero.

37

Como ya se ha mencionado, que busca : bd, sin embargo, esto no elimina completamente el buffer, sigue siendo accesible:

:e foo 
:e bar 
:buffers 
    1 #h "foo"       line 1 
    2 %a "bar"       line 1 
Press ENTER or type command to continue 
:bd 2 
:buffers 
    1 %a "foo"       line 1 
Press ENTER or type command to continue 
:b 2 
2 bar 

Es posible que en vez desee : BW que elimina por completo eso.

:bw 2 
:b 2 
E86: Buffer 2 does not exist 

Sin saber acerca : BW me molestó durante bastante tiempo.

+0

Solo tenga en cuenta que la ayuda de VIM dice esto sobre ': bw' -" No use esto a menos que sepa lo que está haciendo ". – mato

5

Si modificar un archivo y desea cerrarlo sin salir de VIM y sin guardar, debe escribir :bd!

0

he mapeado bd para F4 con insertar lo siguiente en su archivo .vimrc y presionando F4, se va a cerrar el archivo actual.

:map <F4> :bd<CR> 
Cuestiones relacionadas