Suponiendo que tengo varios archivos abiertos como búfer en Vim. Los archivos tienen *.cpp
, *.h
y 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 file3
funciona. Así que ¿hay algún modo de evaluar *.xml
a 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-rsi
instalado (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.foo
y 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
:bufdo
porque 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#3
eliminará 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