Vim - guardar y cerrar el búfer en un comando


20

Tengo un montón de archivos de texto en un directorio y sé que tendré que editar cada uno individualmente.

Comienzo en la línea de comandos con

vim *.txt

que abre los archivos como buffers separados en vim y me deja mirando el primero. Lo edito, luego uso ': w' para guardarlo y ': bd' para cerrar el búfer y pasar al siguiente.

Este ': w: bd' para guardar y cerrar el búfer me parece largo, y sospecho que hay una forma más vim ninja de hacerlo. ¿Cuál es la forma recomendada de guardar y cerrar el búfer en el que está trabajando de una vez?


Mi forma recomendada sería simplemente pasar a la :next búfer y escribir / cerrar todo una vez que su tarea haya terminado :wqa. Esto supone que tienes :set hidden en tus ~/.vimrc.
romainl

Respuestas:


20

Al pasar los archivos a Vim en la línea de comandos, no solo se abren en búferes, sino que también llenan el lista de argumentos . Por lo tanto, puedes usar comandos como :next y :first navegar a través de ellos (y :argdo para el procesamiento por lotes, que puede ser un truco ingenioso). El comando que recomiendo para tu pregunta es :wnext (forma corta :wn ), cual :write s el búfer actual y luego va a la :next uno.

No necesitas explícitamente :bdelete un búfer, especialmente cuando está ejecutando Vim desde la línea de comandos con un conjunto de archivos y luego lo cierra cuando termina. (La única excepción que se me ocurre es descargar un archivo enorme para guardar la memoria del sistema o reutilizar una única instancia de GVIM para muchas ediciones diferentes).

Sin embargo, si realmente desea esto, simplemente defina un comando personalizado, por ej.

:command Wd write|bdelete

5
Ha mencionado dos métodos para lograr lo que solicitó el OP, pero el segundo no es obvio: :w|bd.
Jonno

- & gt; Esto tiene la ventaja de adaptarse al enfoque que utiliza el OP, aunque estoy de acuerdo :next Tiene más sentido en algunos casos.
Jonno

3

Si bien estoy de acuerdo en que no tener para eliminar los buffers abiertos que no está utilizando actualmente, me gusta eliminarlos porque tengo aerolínea vim La línea de pestañas habilitada, que muestra todos los buffers abiertos todo el tiempo en la parte superior de la ventana. Tengo lo siguiente en mi .vimrc:

nnoremap qq :w\|bd<cr>

qq guarda y cierra el búfer actual, pero también confunde con la funcionalidad "grabar macro" de vim (con la que estoy de acuerdo).


1
El incorporado ZZ viene a la mente, pero eso termina guardando y saliendo de Vim por completo, en lugar de simplemente eliminar el búfer. Minúscula zz podría ser una asignación alternativa interesante, para cualquier persona que encuentre las macros más valiosas que centrar la vista en la línea del cursor actual.
8bittree

Recientemente lo cambié a Q, después de darse cuenta de lo valiosa que puede ser la grabación en Vim.
apostl3pol
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.