Como você prefere alternar entre buffers no Vim?

92

Já experimentei o MiniBufExplorer , mas geralmente acabo com várias janelas mostrando ou o fecho totalmente. O que eu gostaria é algo como LustyJuggler com pesquisa incremental, a maneira como alterno entre buffers no Emacs. Certamente existe um script como este?

Alexey Romanov
fonte

Respostas:

23

Eu uso o plugin Command-T vim do Wincent Colaiuta há alguns meses. Wincent escreveu as partes que precisam ser rápidas em C, e devo dizer que é! E, eu acho que sua lógica de correspondência de padrão de arquivo é ainda melhor do que o Command-T do Textmate. Confira o screencast .

O plug-in Command-T para VIM fornece um mecanismo extremamente rápido e intuitivo para abrir arquivos com um número mínimo de pressionamentos de tecla. É denominado "Command-T" porque é inspirado na janela "Go to File" vinculada a Command-T no TextMate.

Os arquivos são selecionados digitando caracteres que aparecem em seus caminhos e são ordenados por um algoritmo que sabe que os caracteres que aparecem em certos locais (por exemplo, imediatamente após um separador de caminho) devem receber mais peso.

A troca de buffer mais fácil contém muitas dicas úteis. Eu adaptei o seguinte ao meu .vimrc, que faz o preenchimento automático do nome do buffer, mapeia os comandos de troca de buffer mais úteis para as minhas teclas <Leader> e de linha inicial do lado esquerdo e mostra o número do buffer atual na linha de status :

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

Eu também uso o MiniBufExplorer , que fornece uma lista compacta de cada buffer listado em sua própria divisão horizontal no topo.

David Rivers
fonte
73

Eu costumava usar uma combinação de guias e várias instâncias do gvim, mantendo grupos de arquivos relacionados como guias em cada instância. Contanto que eu não tenha acabado com muitas guias em uma instância, a barra de guias mostra o nome de cada arquivo que você está editando rapidamente.

Então li uma postagem de Jamis Buck sobre como ele mudou do TextMate de volta para o vim e aprendeu alguns truques excelentes:

  • Ctrl-w s e Ctrl-w v para dividir a janela atual
  • Ctrl-6 para alternar entre dois buffers na mesma janela.
  • o incrível fuzzyfinder.vim que dá a você a pesquisa de preenchimento automático de arquivos em seu diretório atual ou de buffers que você tenha aberto no momento
  • Os próprios fuzzy_file_finder e fuzzyfinder_textmate de Jamis , que modificam ligeiramente como o fuzzyfinder funciona para se comportar mais como um recurso semelhante no TextMate (pelo que posso dizer, a diferença é que corresponde a qualquer lugar no nome do arquivo em vez de apenas desde o início). Assista a este vídeo para vê-lo em ação.

Agora, tenho apenas uma instância do gvim, maximizada, e divido em várias janelas para que possa ver vários arquivos de uma vez. Eu liguei Ctrl-F a fuzzyfinder_textmate, então agora se eu digitar (digamos) Ctrl-F, mod/usobele abre app / models / user_observer.rb. Quase nunca mais me preocupo com guias.

Atualização 07/08/2010

Embora o fuzzyfinder_textmate continue incrível, como Casey aponta nos comentários, ele não é mais mantido. Além disso, ele (e / ou fuzzyfinder.vim) fica um pouco lento e instável ao trabalhar com grandes projetos (muitos diretórios ou arquivos), então estou procurando uma alternativa.

Felizmente, parece haver uma alternativa muito agradável na forma de Wincent Colaiuta 's Command-T plug-in . Este tem um comportamento muito semelhante (se não ligeiramente melhor) ao fuzzyfinder_textmate, mas é visivelmente mais rápido; ele também possui recursos interessantes, como a capacidade de abrir o arquivo encontrado em uma divisão ou divisão vertical. Obrigado (e votos positivos!) A David Rivers por apontar para ele.

Sam Stokes
fonte
Sim, o fuzzyfinder se encaixa muito bem no que eu quero.
Alexey Romanov
O fuzzyfinder_textmate de Jamis completa o vim. Deve realmente se tornar um recurso central!
csexton
Parece que Jami parou de trabalhar neste projeto. Talvez o autor original use esses recursos? weblog.jamisbuck.org/2009/1/28/…
cmcginty
Sam, obrigado pelos adereços que você me deu (no meu aniversário!): D
David Rivers
14
Experimente o plugin ctrlp vim ( kien.github.com/ctrlp.vim ) que implementa o fuzzyfinder, mas com muitos recursos mais úteis :)
Philip
33

Eu uso o básico - ' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'

orip
fonte
8
:-) Nunca pensei que veria "simples" e "': ls' + ': bn' / ': bp' + ': b <part-of-name>'" na mesma frase.
paxdiablo
16
Pax, ainda não consigo ver. :-)
csexton
Isso, mais :map <c-n> :bn<cr>e :map <c-p> :bp<cr>, uma vez que C-ne C-psão rápidos de digitar e permitem alternar entre os buffers se você pressioná-los repetidamente. (Eu nunca os usei para o propósito original.) É como alternar entre as guias do navegador com C-PgUpe C-PgDnou qualquer atalho que seu navegador tenha.
Tobia
Ctrl + N é o padrão para 'Novo arquivo' na maioria dos outros editores e Ctrl + P é o comando de colagem, portanto, para a maioria das pessoas, eles serão realmente confusos. O vim-unimpaired de Tim Pope fornece [bpara o buffer anterior e ]bpara o próximo buffer. Mais um monte de outras guloseimas que usam o conceito de ]para o próximo e [para o anterior.
icc97 de
31

Eu gosto de "ctrl-w s" e "ctlr-w v" para dividir a janela. Então mapeio as teclas de movimento (h, j, k, l) com ctrl pressionado para mover entre as janelas divididas:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

Ter que mover minha mão para as teclas de seta é irritante.

Em seguida, eu configuro ctlr-tab para alternar entre buffers na janela atual (como muitos outros ambientes):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

Isso funcionou muito bem para mim nos últimos anos, embora o vim sempre tenha mais segredos do que você possa imaginar.

Dave Ray
fonte
3
Seu comentário "alternar para arquivo alternativo" é enganoso porque o Vim já tem um arquivo alternativo, é o arquivo anterior em que você estava e você pode alternar os arquivos atuais (%) e alternativos (#) facilmente usando ctrl-6.
graywh
10
Além disso, <Cw> com hjkl mudará as janelas - as teclas de seta não são necessárias.
graywh
4
<CS-Tab> está pedindo RSI. :bp:bn
Mapeei
3
Remapear <SJ> parece uma escolha ruim no modo normal, já que é comumente usado (para concatenar linhas).
Michael Percy,
18
nmap <Leader>bb :ls<CR>:buffer<Space>

e ninguém mencionou o bom plugin ctrlp.vim . Usando este plugin, você pode pesquisar o buffer por nome.

KOlegA
fonte
Eu gosto desse mapeamento! Inteligente e flexível.
Ivan
14

eu uso

CTRL- Jpara o próximo buffer

CTRL- Kpara buffer anterior

CTRL- Lpara a próxima guia

CTRL- Hpara a guia anterior

Aqui está a .vimrcconfiguração:

map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
map <C-L> :tabn<CR>
map <C-H> :tabp<CR>

Veja http://syskall.com/my-biggest-vim-productivity-boost/

Olivier Lalonde
fonte
5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>
Terminus
fonte
1
O mais interessante com o Vim é que você aprende alguma coisa todos os dias!
Luc M
A questão é sobre buffers , não guias ... mas você pode :tab sballprimeiro, ou em vez de usar :tabnvocê deve usar:buffer
pera
5

Recentemente, tornei-me mais minimalista.

Para ciclo de buffers que eu uso ]be [bdo intacto: https://github.com/tpope/vim-unimpair

Para pular direto para um buffer aberto, basta usar o preenchimento da guia do Vim com :b. Algumas letras são suficientes para chegar a qualquer buffer aberto com uma ou duas guias.

Da mesma forma que os buffers abertos, eu uso :ecom caminhos relativos e tabulação completa.

Eu também uso :lsocasionalmente para ver quais buffers abri (e para verificar seu status modificado).

Para me livrar de um buffer, eu uso :bwpara limpar o buffer. Eu geralmente faço uma divisão temporária e altero os buffers para preservar meu layout, já que :bwtambém fecha a janela ativa.

Todas as coisas do minibuf que experimentei acabaram me irritando, e não quero que alguma coisa de correspondência inteligente abra arquivos aleatórios para mim. Se eu realmente precisar procurar por algo, uso NERDtree ( :e .).

IDK, Ultimamente também abandonei o Yankring (porque ele estraga xp) e comecei a usar registradores, e recentemente decidi que os movimentos f/ tsão a melhor coisa de todos os tempos ...

kitsu.eb
fonte
Isso tudo é um ótimo conselho. Eu mapeei <leader>llpara :ls. Também é muito útil ter certeza de que você tem set wildmenuna sua, .vimrcpois então você obtém um pequeno menu que apresenta todas as alternativas para:b
icc97
2

O excelente Buffer Explorer , o ser tornou-se uma memória muscular tão forte que me encontro desejando poder usá-lo em outras aplicações. Acho que é extremamente rápido ao editar ativamente mais de dois arquivos.

csexton
fonte
2

Passei um bom tempo construindo meu .vimrc para trabalhar com este projeto HTML :: Mason no qual estou há quatro anos, então eu tenho uma mistura estranha de guias e janelas divididas. Para sua apreciação:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>
Jack M.
fonte
2

Eu uso tselectbuffer . É muito rápido e ao contrário do bufexplorer não ocupa espaço na sua janela. Ele também tem uma busca incremental. Eu tentei o minibufexplorer e achei a navegação no buffer um pouco difícil.

Taurus Olson
fonte
Obrigado pelo ponteiro, agora eu uso os dois. Os padrões para BufExplorer são ,be, ,bs, ,bv, então eu mapeados TSelectBuffer para ,bb.
Brady Trainor
2

Para listar e alternar entre os buffers que uso:

nnoremap <Leader>l :ls<CR>:b<space>

Para alternar entre buffers:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>
Diegoviola
fonte
2

Eu mapeei <S-J>e <S-K>para :bpe :bn, embora admita que não o use porque o número de arquivos é maior que 10. Eu mapeei <C-J>e <C-K>para as guias anterior e seguinte do Terminal Gnome e geralmente executo 4 instâncias do vim para cada uma os 4 projetos diferentes em que trabalho. Eu ainda realmente desejo que o buffer anterior e o próximo vão para o histórico dos buffers nos quais tenho trabalhado, e não para a ordem na lista de buffers.

puk
fonte
2

Eu uso tselectbuffer. É muito rápido e ao contrário do bufexplorer não ocupa espaço na sua janela. Ele também tem uma busca incremental. Eu tentei o minibufexplorer e achei a navegação no buffer um pouco difícil.

anita
fonte
0

eu uso simples: vsplit com ^ W + w / ^ W + re: tabnew com combinações de teclas Ctrl + Alt + PgUp / PgDown.

Eimantas
fonte
1
Tenho que concordar com o que Zathrus disse aqui . As guias no Vim (ou Emacs com TabBar) simplesmente não funcionam como nas interfaces com guias usuais.
Alexey Romanov
0

Quando há vários buffers abertos em uma sessão do Vim, pode se tornar difícil controlar os buffers e seus respectivos números. Se for esse o caso, mudar para um arquivo diferente pode ser mais fácil usando um mapa simples:

: nnoremap (F5): buffers (CR): buffer (Espaço)

vim.wikia.com

rícino
fonte