Uma maneira de selecionar um buffer no vim poderia ser procurar a lista de buffers, usando comandos padrão como :ls
, ou com algum código externo de plugin / vimscript, para procurar uma lista em uma janela .
Digamos que eu queira pular para um buffer diretamente, o mais rápido possível.
Para percorrer a lista de buffers no modo seqüencial, agora uso <C-J>
<C-K>
atalhos, tendo definido em meu .vimrc:
" move among buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
Outra maneira (acesso direto) pode ser alternada por número : conhecendo o número do buffer, é possível alternar diretamente digitando o número do buffer seguido por <C-^>
. Então, se eu quiser mudar para o buffer número 5, pressione 5<C-^>
.
Mas isso parece não funcionar para mim (eu uso o vim 7.4 no ubuntu box, de um convidado do Windows, com teclado italiano ). Eu suspeito que é porque o ^
caractere está na tecla maiúscula ^ì
do teclado italiano, então, na verdade, ^
preciso pressionarSHIFT-^
Alguma ideia?
<c-6>
vez de<c-^>
?1<C-6>
muda para o buffer número 1. Obrigado!Respostas:
O
:b
comando também pode levar uma subcadeia do nome do arquivo do buffer para o qual você deseja viajar, o que é muito conveniente.Por exemplo, se você tem três buffers
foo
,bar
ebaz
, em seguida,:b bar
irá mudar para obar
arquivo.:b o
irá mudar para ofoo
arquivo.:b a
gera um erro porque pode significar umbar
ou outrobaz
, mas é possível corrigir o nome para ser mais específico, por exemplo : ↑ r Enter,.Isso pode ser muito útil, porque significa em vez de
você pode fazer algo como
o que é muito mais curto e fácil.
Este comando também pode levar um número, se você quiser usar isso:
fonte
:b
comando. Por exemplo, se você tiver dois bufferspath/to/foo
epath/to/tofu
, o comando:b f<Tab>
nunca corresponderápath/to/tofu
, pois corresponde no início de uma palavra empath/to/foo
.:5b
é ligeiramente mais curto, em seguida,:b 5
;-)Isto é o que eu uso:
Agora, pressionar
\b
irá listar os buffers disponíveis e se preparar:b
para você.Depois, basta digitar o número do buffer e pressionar Enter.
Ou você pode digitar parte do nome do arquivo e pressionar Enter. (No entanto, geralmente pressione Tab antes de pressionar Enter, para verificar se tenho o buffer correto. Caso contrário, continuo pedalando com Tab até encontrar o que queria.)
Na verdade, eu uso uma versão ligeiramente aprimorada do acima:
Isso impedirá que o
-- More --
prompt apareça quando você tiver mais buffers do que as linhas disponíveis para exibi-los.Mas se você normalmente tem a
'more'
opção desabilitada de qualquer maneira, esse mapeamento realmente o incomoda, porque reativa a'more'
opção depois de fazerls
!fonte
[count]<C-^>
quando você souber o número do buffer, é bastante útil quando você não souber.[count]<C-6>
parecem-me a maneira mais rápida para mudar para o tampão conhecido[count]<C-^>
esses dias. Mas isso significa que eu preciso executar o MiniBufExplorer ou algo semelhante para saber quais são os números do buffer!:CtrlPBuffer
do plugin CtrlP (4k ★)A principal característica deste plug-in é fornecer uma correspondência difusa para abrir convenientemente um buffer diferente com feedback visual.
Abra a lista de buffers difusos com
:CtrlPBuffer
ou pressione<C-p>
seguido de<C-b>
para alterar o modo parabuffer
.Digite um número suficiente de caracteres para especificar o buffer que você deseja abrir.
Você também pode usar
<C-j>
e<C-k>
para percorrer a lista e selecionar manualmente o buffer.Costumização
Se você deseja abrir a lista de buffers imediatamente com
<C-p>
, adicione a seguinte linha ao seu vimrc:Você pode usar
<C-f/b>
para alternar o modo da janela ctrlp.Eu pessoalmente uso
let g:ctrlp_cmd = 'CtrlPMRU'
. A lista usada mais recentemente (mru) também contém os buffers abertos. Se você usar diferentes modos de ctrlp e quiser manter o seu último modo, poderá definirlet g:ctrlp_cmd = 'CtrlPLastMode [--dir]'
.Plugins semelhantes
Existem mais plugins que fornecem uma lista de buffers com um prompt interativo com correspondência difusa, por exemplo
O lado escuro vs. o lado claro
(ou seja, configuração do vim com plug-in pesado e maneira vim)
Antes de decidir usar esses plugins mais complexos, estude as respostas em @Doorknob e @joeytwiddle . Em particular, verifique a linha única se uma delas já atender às suas necessidades.
nnoremap <Leader>b :b <C-d>
nnoremap <Leader>b :ls<Cr>:b<Space>
Instalar os plugins apenas para alternar de buffer pode ser um exagero. Veja também as observações em https://www.vi-improved.org/recommendations e o artigo de Drew Neil 'On sharpening the saw' .
fonte
map <leader>a <ESC>:CtrlPBuffer<CR><CR>
para saltar para o buffer previamente aberta com<leader>a
(enquanto<leader>b
apenas abre a lista tampão para mim)<C-^>
(=<C-6>
)? veja:h CTRL-^
. Afaik, isso apenas faz o que seu mapeamento<leader>a
parece fazer. Portanto, acho que você acabou de dar um exemplo do porquê as pessoas dizem que o uso de plug-ins pode levar o usuário do vim que não sabe o que o vim já pode fazer por conta própria.Além das respostas realmente úteis de joeytwiddle e Maçaneta da porta, não esqueça
:b#
, que muda para o buffer usado mais recentemente. Também pode ser feito com apenas<C-^>
. Quando você possui muitos buffers e alterna constantemente entre eles, o buffer mais recente geralmente é o destino mais comum.Pessoalmente, uso a combinação de vários métodos. Quando trabalho principalmente com dois buffers e o restante é aberto apenas para referência ocasional, costumo alternar entre eles com
:b#
ou<C-^>
. Quando preciso trabalhar com mais deles e alternar com mais frequência, uso números (como na dica de joeytwiddle) ou parte dos nomes (como na dica da maçaneta da porta) com TAB para completá-los. Quando os nomes são confusos e há muitos buffers abertos (geralmente acima de 10), eu uso o plug-in Ctrl-P com mais frequência ( https://github.com/kien/ctrlp.vim ) Com duas teclas rápidas, obtive a lista de todos eles e eu posso usar a pesquisa difusa poderosa sobre eles para encontrar rapidamente o que eu quero.fonte
[b
e]b
do pluginvim-unimpaired
(> 2k ★)Se você instalou
vim-unimpaired
, pode usar[b
(:bp[revious]
) e]b
(:bn[ext]
)para pedalar através de buffers abertos. Não há necessidade de definir mapeamentos mais preciosos para os mesmos comandos. Além disso, o salto para o primeiro e o último buffer pode ser feito por
[B
(:bf[irst]
) e]B
(:bl[ast]
)Há muito mais mapeamentos de colchetes nos
vim-unimpaired
quais você pode achar útil. Todos eles seguem o mesmo esquema, o que facilita a memorização.O lado escuro vs. o lado claro
Este plugin pode ser considerado leve e 'vimish'. É indicado pela comunidade #vim como um plug-in "não prejudica".
fonte
3[b
para pular três buffers de volta.Atualmente, estou usando a tecla
<Leader>
+number
para alternar. A chave do líder é a minha<space>
chave. Também uso o vim-airlines para mostrar o buffer nr no topo da janela.Enquanto o bufnr geralmente excede 10, então eu ajusto meu próprio mapeamento; se essa
number
é a única correspondência, troque o buffer imediatamente; caso contrário, aguarde mais entrada de número ou<space>
chave para confirmar:O código é colado a partir daqui
A propósito, eu também uso
<S-h>
e<S-l>
para:bp
e:bn
, ou:tabp
e:tabn
se mais de uma guia estiver aberta no momento. É bastante intuitivo para mim.fonte
Atualmente, estou usando
[buffer_number]<Ctrl-^>
para alternar buffers porque é muito rápido.Mas como saber o número do buffer? Eu uso MiniBufExplorer para que possa sempre ver os números tampão na parte superior do Vim.
Também uso o seguinte mapeamento, porque
<C-^>
é um pouco difícil de alcançar com uma mão.Em uma máquina nova sem configuração, volto a
:b [part_of_filename]<Tab><Enter>
fonte