Supondo que eu tenha vários arquivos abertos como buffers no Vim. Os arquivos têm *.cpp
, *.h
e alguns são *.xml
. Eu quero fechar todos os arquivos XML com :bd *.xml
. No entanto, o Vim não permite isso (E93: Mais de uma correspondência ...).
Há alguma maneira de fazer isso?
PS Eu sei que :bd file1 file2 file3
funciona. Para que eu possa de algum modo avaliar *.xml
a file1.xml file2.xml file3.xml
?
<tab>
apenas permite percorrer as correspondências, colocando uma única entrada na linha de comando e<C-a>
adicionando todas as correspondências de uma só vez.vim-rsi
instalado (acho que é obrigatório para todos no * nix), para obter o<C-a>
trabalho da maneira original na linha de comando, você deve usá-lo<C-x>
<C-a>
.Exclui o intervalo do buffer de 3 a 5.
fonte
Você também pode usar como alternativa:
fonte
Você pode usar isso.
Deve ser bastante fácil adicioná-lo a um comando.
fonte
glob()
fornecerá apenas arquivos existentes (no disco rígido) e não buffers abertos.fnameescape()
armazenar nomes em buffer.c:/Program files/foo.bar
, e mesmofoo.bar.foo
e funcionou perfeitamente.fnameescape()
pode ter sido necessário se eu usasse os nomes dos buffers. Mas só estou verificando se os nomes dos buffers correspondem a uma determinada expressão:\.{ext}$
- Dou números de buffer para: bd`. Não tenho nenhuma razão para escapar de nada para a correspondência de expressões regulares.Experimente o script abaixo. O exemplo é para "txt", altere-o conforme necessário, por exemplo, para "xml". Buffers modificados não são excluídos. Pressione \ bd para excluir os buffers.
[Editar] Mesmo sem: bufdo (conforme solicitado por Luc Hermitte, veja o comentário abaixo)
fonte
:bufdo
, pois mexe com a janela atual.Eu também precisava dessa funcionalidade o tempo todo. Esta é a solução que tenho no meu vimrc.
Agora, eu posso fazer
:BW regex
(por exemplo,:BW \.cpp$
e limpar todos os buffers correspondentes que correspondam a esse padrão em seu nome de caminho.Se você deseja excluir, em vez de limpar, é claro que pode substituir
exec 'bw ' . join(l:matchList, ' ')
porexec 'bd ' . join(l:matchList, ' ')
fonte
:badd
,:bdelete
,:bufdo
,:bn
...)Muito simplesmente: use o
:bd[elete]
comando Por exemplo,:bd[elete] buf#1 buf#5 buf#3
excluirá os buffers 1, 3 e 5.fonte
Você pode apenas usar:
use apenas
<c-a>
para facilitar a conclusão de todos os arquivos abertos do tipo de arquivo especificado.por exemplo, você tem 1.xml, 2.xml, 3.xml e 4.xml, você pode:
então aperte
<c-a>
O vim será preenchido automaticamente para você da seguinte maneira:
você pode simplesmente pressionar enter para concluir o comando.
Se você fez alterações em um dos arquivos mencionados acima, lembre-se de fazer:
fonte