Observe que você pode abrir os arquivos em janelas separadas do Vim usando vim -o a/*.php(ou -Opara usar janelas verticais) e evitar a navegação no buffer - este é um ótimo método para apenas alguns arquivos, mas com 23 arquivos, eles terão apenas algumas linhas / colunas cada.
Cascabel
1
@ Jeffefi: Obrigado por apontar isso! Eu nunca usei a opção -o antes.
Léo Léopold Hertz
Sobre o assunto de janela se divide. Se você já está no Vim e deseja abrir outro arquivo em uma divisão: esp para horizontal: evsp para vertical.
Lanzafame
Respostas:
558
Uma palavra de cautela: "o w em bw não significa gravação, mas wipeout!"
Mais dos manuais:
: bd
Descarregue o buffer [N] (padrão: buffer atual) e exclua-o da lista de buffers. Se o buffer foi alterado, isso falhará, a menos que [!] Seja especificado; nesse caso, as alterações serão perdidas. O arquivo permanece inalterado.
Se você sabe o que está fazendo, também pode usar: bw
Também a possibilidade de fazer ': M, Nbd' para fechar os números de buffer M para N. Ou ': bd N1 N2 ...' onde N # é um número de buffer
bloqueado pela neve
61
O manual diz para usar apenas :bwse "você sabe o que está fazendo", o que eu não sei, então acho que vou usar :bd.
jberryman
1
Fiquei confuso com isso no começo - eu estava abrindo uma nova guia para fechar os buffers ... mas fechar o buffer na guia (usando uma linha reta :bd) também fecha a guia. O que você provavelmente quer é :bd n .. [m]ou :n,mbdpara números específicos ou intervalo de números para fechar, o que você pode fazer sem olhar para os buffers
JonnyRaa
5
wé abreviação de writecomando, de acordo com o manual do Vim, além disso, não há menção a qualquer "limpeza". A descrição do comando ( help write) começa com "Grave o buffer inteiro no arquivo atual".
amn
3
@ amn Também fiquei confuso, mas ele quis dizer que wo bwcomando significa apagamento, ele não está falando sobre o wcomando. Ele colocou este aviso lá para que as pessoas não acho que o bwcomando significava gravação tampão (o que não significa tampão wipeout.)
John
351
Se isso não for tornado óbvio pelas respostas anteriores:
: bd fechará o buffer atual. Se você não quiser pegar a lista de buffers.
Antes de encontrar: bd, nunca fazia sentido para mim que as pessoas não tivessem problemas ao fazer:: ls -> procurar número de documento -> descarregar buffer por número. As pessoas realmente acham isso eficaz?
Svend
3
@svend para uma variedade de buffers, com certeza, mas para um único a: bd é provavelmente mais eficaz.
Em vez de procurar a saída do comando: ls e excluir (descarregar, limpar ..) um buffer especificando seu número, acho que o uso de nomes de arquivo geralmente é mais eficaz.
Por exemplo, depois que abri um arquivo .txt para atualizar minhas lembranças de algum ponto importante ... copie e cole algumas linhas de texto para usar como um modelo das sortes ... etc. Eu digitaria o seguinte:
:bd txt <Tab>
Observe que a sequência correspondente não precisa estar no início do nome do arquivo.
A tabela acima exibe a lista de nomes de arquivos que correspondem a 'txt' na parte inferior da tela e mantém o comando: bd que eu digitei inicialmente intacto, pronto para ser concluído.
Aqui está um exemplo:
doc1.txt doc2.txt
:bd txt
Eu poderia retroceder sobre o bit 'txt' e digitar o nome do arquivo que desejo excluir, mas onde isso se torna realmente conveniente é que não preciso: se eu pressionar a tecla Tab pela segunda vez, o Vim concluirá automaticamente meu comando com a primeira partida:
:bd doc1.txt
Se eu quiser me livrar desse buffer em particular, só preciso pressionar Enter.
E se o buffer que eu quero excluir for a segunda (terceira .. etc.) correspondência, só preciso continuar pressionando a tecla Tab para fazer o meu comando: bd percorrer a lista de correspondências.
Naturalmente, esse método também pode ser usado para alternar para um determinado buffer por meio de comandos como: b ..: sb .. etc.
Essa abordagem é particularmente útil quando a opção 'oculta' do Vim é definida, porque a lista de buffers pode rapidamente se tornar bastante grande, cobrindo várias telas e dificultando a localização do buffer específico que estou procurando.
Para aproveitar ao máximo esse recurso, provavelmente é melhor ler o arquivo de ajuda do Vim a seguir e ajustar o comportamento da conclusão da linha de comando da Tab de acordo para que melhor se adapte ao seu fluxo de trabalho:
:help wildmode
O comportamento que descrevi acima resulta da seguinte configuração, que escolhi por razões de consistência para emular a conclusão do bash:
:set wildmode=list:longest,full
Ao contrário de usar números de buffer, o mérito dessa abordagem é que eu me lembro de pelo menos parte de um determinado nome de arquivo, permitindo-me direcionar o buffer diretamente, em vez de precisar primeiro procurar seu número através do comando: ls.
[EDIT: essa foi uma sugestão estúpida de uma época em que eu não conhecia o Vim o suficiente. Por favor, não use guias em vez de buffers; guias são os "layouts de janela" do Vim]
Esse foi um ótimo post - ele me inspirou a aprofundar ainda mais - você já viu wildmenu? É semelhante ao lustyjuggler (embora mais simples), mas está embutido (o que foi bom para mim, porque o lustyjuggler precisa +rubye o vim padrão para navios ubuntu oníricos -ruby).
Nate
@ Nate: sim, eu estou usando o wildmenu para abrir arquivos, mas quando você tem muitos arquivos no projeto, ele simplesmente não aumenta. Além disso, o vim-noxpacote do Ubuntu tem suporte a Ruby.
Leonid Shevtsov
1
Aqueles que usam um plug-in de navegação em buffer ou em árvore, como Buffergator ou NERDTree, precisarão alternar essas divisões antes de destruir o buffer atual - caso contrário, você enviará suas divisões para wonkyville
Eu uso:
"" Buffer Navigation
" Toggle left sidebar: NERDTree and BufferGator
fu! UiToggle()
let b = bufnr("%")
execute "NERDTreeToggle | BuffergatorToggle"
execute ( bufwinnr(b) . "wincmd w" )
execute ":set number!"
endf
map <silent> <Leader>w <esc>:call UiToggle()<cr>
Onde " NERDTreeToggle" nessa lista é o mesmo que digitar :NERDTreeToggle. Você pode modificar esta função para integrar com sua própria configuração.
para isso, o plugin bbye é perfeito, preservando o layout da janela ao usar :bdeleteou :bwipeout. Veja minha resposta .
Wolfson
0
Feche o buffer sem fechar a janela
Se você deseja fechar um buffer sem destruir o layout da janela (layout atual com base em divisões), você pode usar um plug-in como bbye . Com base nisso, você pode simplesmente usar
:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)
Ou simplesmente crie um mapeamento .vimrcpara facilitar o acesso, como
O Vim possui dois comandos para fechar um buffer: :bdeletee :bwipeout. O primeiro remove o arquivo da lista de buffers, limpa suas opções, variáveis e mapeamentos. No entanto, ele permanece no jumplist, então Ctrl-ovocê volta e reabre o arquivo. Se não é isso que você deseja, use :bwipeoutou o equivalente do Bbye :Bwipeoutonde você teria usado :bdelete.
vim -o a/*.php
(ou-O
para usar janelas verticais) e evitar a navegação no buffer - este é um ótimo método para apenas alguns arquivos, mas com 23 arquivos, eles terão apenas algumas linhas / colunas cada.Respostas:
Uma palavra de cautela: "o w em bw não significa gravação, mas wipeout!"
Mais dos manuais:
: bd
Se você sabe o que está fazendo, também pode usar: bw
: bw
fonte
:bw
se "você sabe o que está fazendo", o que eu não sei, então acho que vou usar:bd
.:bd
) também fecha a guia. O que você provavelmente quer é:bd n .. [m]
ou:n,mbd
para números específicos ou intervalo de números para fechar, o que você pode fazer sem olhar para os buffersw
é abreviação dewrite
comando, de acordo com o manual do Vim, além disso, não há menção a qualquer "limpeza". A descrição do comando (help write
) começa com "Grave o buffer inteiro no arquivo atual".w
obw
comando significa apagamento, ele não está falando sobre ow
comando. Ele colocou este aviso lá para que as pessoas não acho que obw
comando significava gravação tampão (o que não significa tampão wipeout.)Se isso não for tornado óbvio pelas respostas anteriores:
: bd fechará o buffer atual. Se você não quiser pegar a lista de buffers.
fonte
:bd
somente fecha o buffer enquanto (o que isso significa) enquanto:bw
também limpa todas as variáveis e REALMENTE o elimina dols
buffer.Verifique seu ID de buffer usando: buffers
você verá uma lista de buffers como
se você deseja remover o b.php do buffer
se você deseja remover / fechar todos os buffers
fonte
Em vez de procurar a saída do comando: ls e excluir (descarregar, limpar ..) um buffer especificando seu número, acho que o uso de nomes de arquivo geralmente é mais eficaz.
Por exemplo, depois que abri um arquivo .txt para atualizar minhas lembranças de algum ponto importante ... copie e cole algumas linhas de texto para usar como um modelo das sortes ... etc. Eu digitaria o seguinte:
Observe que a sequência correspondente não precisa estar no início do nome do arquivo.
A tabela acima exibe a lista de nomes de arquivos que correspondem a 'txt' na parte inferior da tela e mantém o comando: bd que eu digitei inicialmente intacto, pronto para ser concluído.
Aqui está um exemplo:
Eu poderia retroceder sobre o bit 'txt' e digitar o nome do arquivo que desejo excluir, mas onde isso se torna realmente conveniente é que não preciso: se eu pressionar a tecla Tab pela segunda vez, o Vim concluirá automaticamente meu comando com a primeira partida:
Se eu quiser me livrar desse buffer em particular, só preciso pressionar Enter.
E se o buffer que eu quero excluir for a segunda (terceira .. etc.) correspondência, só preciso continuar pressionando a tecla Tab para fazer o meu comando: bd percorrer a lista de correspondências.
Naturalmente, esse método também pode ser usado para alternar para um determinado buffer por meio de comandos como: b ..: sb .. etc.
Essa abordagem é particularmente útil quando a opção 'oculta' do Vim é definida, porque a lista de buffers pode rapidamente se tornar bastante grande, cobrindo várias telas e dificultando a localização do buffer específico que estou procurando.
Para aproveitar ao máximo esse recurso, provavelmente é melhor ler o arquivo de ajuda do Vim a seguir e ajustar o comportamento da conclusão da linha de comando da Tab de acordo para que melhor se adapte ao seu fluxo de trabalho:
O comportamento que descrevi acima resulta da seguinte configuração, que escolhi por razões de consistência para emular a conclusão do bash:
Ao contrário de usar números de buffer, o mérito dessa abordagem é que eu me lembro de pelo menos parte de um determinado nome de arquivo, permitindo-me direcionar o buffer diretamente, em vez de precisar primeiro procurar seu número através do comando: ls.
fonte
Usar:
:ls
- para listar buffers:bd#n
- para fechar o buffer em que #n é o número do buffer (usels
para obtê-lo)Exemplos:
para excluir o buffer 2:
fonte
Você também pode mapear as teclas de função próxima e anterior, facilitando a alternância entre os buffers
do meu vimrc
fonte
E se
Dessa forma, você pode editar um único arquivo à sua esquerda e navegar por todo o diretório à sua direita ... Apenas um pensamento, não a solução ...
fonte
[EDIT: essa foi uma sugestão estúpida de uma época em que eu não conhecia o Vim o suficiente. Por favor, não use guias em vez de buffers; guias são os "layouts de janela" do Vim]
Talvez mude para o uso de guias?
vim -p a/*.php
abre os mesmos arquivos em guiasgt
egT
alterne as guias:q
fecha apenas a guia atual:qa
fecha tudo e sai:tabo
fecha tudo, exceto a guia atualfonte
wildmenu
? É semelhante ao lustyjuggler (embora mais simples), mas está embutido (o que foi bom para mim, porque o lustyjuggler precisa+ruby
e o vim padrão para navios ubuntu oníricos-ruby
).vim-nox
pacote do Ubuntu tem suporte a Ruby.Aqueles que usam um plug-in de navegação em buffer ou em árvore, como Buffergator ou NERDTree, precisarão alternar essas divisões antes de destruir o buffer atual - caso contrário, você enviará suas divisões para wonkyville
Eu uso:
Onde "
NERDTreeToggle
" nessa lista é o mesmo que digitar:NERDTreeToggle
. Você pode modificar esta função para integrar com sua própria configuração.fonte
:bdelete
ou:bwipeout
. Veja minha resposta .Feche o buffer sem fechar a janela
Se você deseja fechar um buffer sem destruir o layout da janela (layout atual com base em divisões), você pode usar um plug-in como bbye . Com base nisso, você pode simplesmente usar
Ou simplesmente crie um mapeamento
.vimrc
para facilitar o acesso, comoVantagem sobre o vim's: bdelete e: bwipeout
Na documentação do plugin :
: bdelete vs: bwipeout
Na documentação do plugin :
fonte