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?

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.


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.


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>'


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.


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.


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


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>

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 ...


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.


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>

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.


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>

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.


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.


0

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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.