¿Cerrar archivo sin salir de la aplicación VIM?

258

Uso los comandos :ey :wpara editar y escribir un archivo. No estoy seguro de si hay un comando "cerrar" para cerrar el archivo actual sin salir de Vim.

Sé que el :qcomando se puede usar para cerrar un archivo, pero si es el último archivo, Vim también se cierra; En realidad, en Mac OS MacVim se cierra. Sólo la ventana de Vim se cierra y se podría utilizar Control- Npara abrir una ventana de Vim en blanco de nuevo. Me gustaría que Vim permanezca abierto con una pantalla en blanco.

David.Chu.ca
fuente

Respuestas:

343

Esto elimina el búfer (que se traduce para cerrar el archivo)

:bd 
Vinko Vrsalovic
fuente
66
Lo tuyo es mejor que el mío para lo que pidió el OP, aunque tiendo a preferir: enew porque me gusta tener el buffer en la lista de buffer. :)
Rytmis
2
Cuando hago esto, vim muestra el primer búfer, pero aún puedo acceder al búfer
Martin Andersson
18
@ Martin, para eliminar completamente el búfer, use : bw
sebnow
43

Como ya se mencionó, está buscando :bd, sin embargo, esto no elimina completamente el búfer, todavía es 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

En su lugar, puede desear lo :bwque lo elimina por completo.

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

No saber sobre :bweso me molestó durante bastante tiempo.

sebnow
fuente
3
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
23

Si tiene varias ventanas divididas en su ventana Vim, :bdcierra la ventana dividida del archivo actual, por lo que me gusta 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
Gowri
fuente
13
¿Ahora qué hace este fragmento?
dolzenko
1
Probablemente desee <CR> después de las llamadas para ejecutar realmente el comando.
dma
2
@dolzenko mapea '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 conserva cualquier división que haya configurado.
dma
Parece una buena idea. Sin embargo, cuando lo intento aparece el siguiente mensaje de error: "No se puede redefinir la función CleanClose: está en uso"
jononomo
2
No reasigne "f". . . "f" es realmente super útil. Con este mapeo, nunca puede "buscar" hacia adelante para "c" o "q".
tandrewnichols
17
: [N] bd [elete] [!] *: Bd * *: bdel * *: bdelete * * E516 *
: bd [elete] [!] [N]
                Descargar el búfer [N] (predeterminado: búfer actual) y eliminarlo de
                La lista de búfer. Si se cambió el búfer, esto falla,
                a menos que se especifique [!], en cuyo caso se pierden los cambios.
                El archivo no se ve afectado. Cualquier ventana para este búfer es
                cerrado. Si el buffer [N] es el buffer actual, otro buffer
                se mostrará en su lugar. Esta es la entrada más reciente en
                la lista de salto que apunta a un búfer cargado.
                En realidad, el búfer no se elimina por completo, se elimina
                de la lista de almacenamiento intermedio | unlisted-buffer | y valores de opciones,
                Las variables y las asignaciones / abreviaturas para el búfer son
                despejado
efímero
fuente
9

Si ya guardó el último archivo, entonces :enewes su amigo ( :enew!si no desea guardar el último archivo). Tenga en cuenta que el archivo original seguirá estando en su lista de búfer (al que se puede acceder mediante :ls).

Rytmis
fuente
6

Si modifica un archivo y desea cerrarlo sin salir de Vim y sin guardar, debe escribir :bd!.

pablofiumara
fuente
3

:bdpuede ser mapeado Me asignarlo a F4, Shift- F4si necesidad de forzar a cerrar debido a algún cambio ya no quiero.

wbogacz
fuente
2

El complemento bufkill.vim agrega BDetc., para eliminar el búfer sin cerrar ninguna división (como bd) lo haría solo.

azulado
fuente
1

Inserte lo siguiente en su archivo .vimrc y, al presionar F4, cerrará el archivo actual.

:map <F4> :bd<CR>
Stryker
fuente