Suponiendo que tengo varios archivos abiertos como búfer en Vim. Los archivos tienen *.cpp, *.hy algunos lo son *.xml. Quiero cerrar todos los archivos XML con :bd *.xml. Sin embargo, Vim no lo permite (E93: Más de una coincidencia ...).
¿Hay alguna forma de hacer esto?
PD: Sé que :bd file1 file2 file3funciona. Así que ¿hay algún modo de evaluar *.xmla file1.xml file2.xml file3.xml?

<tab>solo le permite recorrer las coincidencias, poniendo una sola entrada en la línea de comando,<C-a>agrega todas las coincidencias a la vez.vim-rsiinstalado (creo que es imprescindible para todos en * nix), para obtener el<C-a>trabajo de la forma original en la línea de comandos, debe usar<C-x><C-a>en su lugar.Eliminará el rango de búfer de 3 a 5.
fuente
También puede utilizar alternativamente:
fuente
Puedes usar esto.
Debería ser bastante fácil agregarlo a un comando.
fuente
glob()solo le dará los archivos existentes (en su disco duro) y no los búferes abiertos.fnameescape()almacenar los nombres en búfer.c:/Program files/foo.bar, e inclusofoo.bar.fooy funcionó perfectamente.fnameescape()puede haber sido necesario si utilicé los nombres de búfer. Pero solo estoy verificando si los nombres de búfer coinciden con una expresión dada:\.{ext}$- Le doy números de búfer a: bd`. No tengo ninguna razón para escapar de nada para la coincidencia de expresiones regulares.Pruebe el siguiente guión. El ejemplo es para "txt", cámbielo según sea necesario, por ejemplo, a "xml". Los búferes modificados no se eliminan. Presione \ bd para eliminar los búferes.
[Editar] Lo mismo sin: bufdo (según lo solicitado por Luc Hermitte, vea el comentario a continuación)
fuente
:bufdoporque ensucia la ventana actual.Yo también necesitaba esta funcionalidad todo el tiempo. Esta es la solución que tengo en mi vimrc.
Ahora, puedo hacer
:BW regex(por ejemplo,:BW \.cpp$y borrar todos los búferes coincidentes que coinciden con ese patrón en su nombre de ruta.Si desea eliminar en lugar de limpiar, por supuesto, puede reemplazar
exec 'bw ' . join(l:matchList, ' ')conexec 'bd ' . join(l:matchList, ' ')fuente
:badd,:bdelete,:bufdo,:bn...)Muy simple: usa el
:bd[elete]comando. Por ejemplo,:bd[elete] buf#1 buf#5 buf#3eliminará los búferes 1, 3 y 5.fuente
Puedes usar:
luego, utilice
<c-a>para facilitar la finalización de todos los archivos abiertos del tipo de archivo especificado.por ejemplo, tiene 1.xml, 2.xml, 3.xml y 4.xml, puede hacer:
entonces presione
<c-a>vim se autocompletará de la siguiente manera:
puede simplemente presionar enter para completar el comando.
Si ha realizado cambios en uno de los archivos mencionados anteriormente, recuerde hacer:
fuente