Comecei a usar o Vim para desenvolver scripts Perl e estou começando a achar muito poderoso.
Uma coisa que eu gosto é poder abrir vários arquivos de uma só vez com:
vi main.pl maintenance.pl
e então pule entre eles com:
:n
:prev
e veja com qual arquivo é aberto:
:args
E para adicionar um arquivo, posso dizer:
:n test.pl
que espero que seja adicionado à minha lista de arquivos, mas apaga minha lista de arquivos atual e, quando digito :args
, só tenho test.pl
aberto.
Então, como posso adicionar e remover arquivos na minha lista de argumentos?
:N
parece ser uma maneira mais fácil de ir para o arquivo anterior ...Respostas:
Por que não usar guias (introduzidas no Vim 7)? Você pode alternar entre as guias com
:tabn
e:tabp
, Com:tabe <filepath>
você pode adicionar uma nova guia; e com um regular:q
ou:wq
você fecha uma guia. Se você mapear:tabn
e:tabp
para suas teclas F7/, F8poderá alternar facilmente entre arquivos.Se não há que muitos arquivos ou você não tem Vim 7, você também pode dividir a tela em vários arquivos:
:sp <filepath>
. Em seguida, você pode alternar entre as telas divididas com Ctrl+ We, em seguida, uma tecla de seta na direção que deseja mover (ou em vez das teclas de seta, wpara a próxima e Wpara a tela dividida anterior)fonte
ZZ
em vez de:wq
(como normalmente salvar e fechar)gt
vai para a próxima guia egT
para a guia anterior.-p
sinalizador para abrir vários arquivos em guias na linha de comando. Por exemplo,gvim -p main.pl maintenance.pl
abrirá esses dois arquivos em guias.Listagem
Para ver uma lista dos buffers atuais, eu uso:
Abertura
Para abrir um novo arquivo, eu uso
com conclusão aprimorada da guia (coloque a
set wildmenu
sua.vimrc
).Nota: você também pode usar o
:find
que pesquisará um conjunto de caminhos para você, mas precisará personalizá-los primeiro.Comutação
Para alternar entre todos os arquivos abertos, eu uso
com conclusão aprimorada da guia (ainda
set wildmenu
).Nota:
:b#
escolhe o último arquivo visitado, para que você possa usá-lo para alternar rapidamente entre dois arquivos.Usando janelas
Ctrl-W s
eCtrl-W v
para dividir a janela atual horizontal e verticalmente. Você também pode usar:split
e:vertical split
(:sp
e:vs
)Ctrl-W w
para alternar entre janelas abertas eCtrl-W h
(ouj
ouk
oul
) para navegar pelas janelas abertas.Ctrl-W c
fechar a janela atual eCtrl-W o
fechar todas as janelas, exceto a atual.Iniciar o vim com um sinalizador
-o
ou-O
abre cada arquivo em sua própria divisão.Com tudo isso, não preciso de abas no Vim, e meus dedos encontram meus amortecedores, não meus olhos.
Nota: se você deseja que todos os arquivos acessem a mesma instância do Vim, inicie o Vim com a
--remote-silent
opçãofonte
:b
é um comando muito poderoso porque pode aceitar números e nomes de buffer como argumentos. O que mais? Ele também suporta o preenchimento de guias em qualquer parte do nome do arquivo. Digamos que você tenha o foo.txt aberto no buffer 2, você pode digitar:b 2<Enter>
ou:b foo.txt
ou:b oo<Tab><Enter>
editar esse arquivo. Sim, o último completaria 'oo' para 'foo.txt' quando você pressionasse <Tab>.nnoremap gb :ls<cr>:b<space>
. Quando digitogb
no modo de comando, ele lista meus buffers e tipos abertos:b
, prontos para começar a digitar um nome / número de buffer.:b
aceitará uma correspondência de substring desde que não seja ambígua. Então se você tem arquivos abertosfoo
,bar
ebaz
, apenas:b z
é o suficiente para mudar para obaz
buffer, e:b oo
ou:b o
vai levá-lo para ofoo
buffer.para lista de buffers abertos
:bp
buffer anterior:bn
próximo buffer:bn
(n
um número) mova para o enésimo buffer:b <filename-part>
com tecla de tabulação que fornece preenchimento automático (incrível !!)Em algumas versões do vim,
bn
ebp
são reaisbnext
ebprevious
respectivamente. A conclusão automática da guia é útil nesse caso.Ou, quando estiver no modo normal, use
^
para alternar para o último arquivo em que estava trabalhando.Além disso, você pode salvar sessões do vim
O comando acima salva os buffers de arquivo aberto atuais e as configurações em
~/today.ses
. Você pode carregar essa sessão usandoSem problemas para lembrar de onde você parou ontem. ;)
fonte
"
marca para ir para onde você estava no arquivo da última vez.Para adicionar à
args
lista:Para excluir da
args
lista:No seu exemplo, você pode usar
:argedit
test.pl para adicionar test.pl àargs
lista e editar o arquivo em uma etapa.:help args
fornece muito mais detalhes e uso avançadofonte
Eu uso comandos de buffer -
:bn
(próximo buffer),:bp
(buffer anterior):buffers
(lista de buffers abertos):b<n>
(buffer aberto n):bd
(delete buffer).:e <filename>
será aberto em um novo buffer.fonte
Eu acho que você pode estar usando o comando errado para olhar a lista de arquivos que você abriu.
Tente fazer um
:ls
para ver a lista de arquivos que você abriu e você verá:Você pode navegar pelos arquivos consultando-os pelos números listados, por exemplo: 3b
ou você pode dividir sua tela digitando o número, mas usando sb em vez de apenas b.
Como um% de lado se refere ao arquivo atualmente visível e # se refere ao arquivo alternativo.
Você pode alternar facilmente entre esses dois arquivos pressionando Ctrl Shift 6
Editar: como
:ls
você pode usar:reg
para ver o conteúdo atual de seus registros, incluindo os registros de 0 a 9 que contêm o que você excluiu. Isso é especialmente útil se você deseja reutilizar algum texto que você excluiu anteriormente.fonte
O Vim (mas não o Vi!) Original tem abas que considero (em muitos contextos) superiores aos buffers. Você pode dizer
:tabe [filename]
para abrir um arquivo em uma nova guia. O ciclo entre guias é feito clicando na guia ou nas combinações de teclas [ n ]gt
egT
. O Graphical Vim tem até abas gráficas.fonte
vim -p dir/*
. Max tamanho da guia é de 10, mas você pode alterá-lo no~/.vimrc
ajustetabpagemax
para algum outro valor.Muitas respostas aqui! O que eu uso sem reinventar a roda - os plugins mais famosos (que não vão morrer tão cedo e são usados por muitas pessoas) são ultra rápidos e nerds.
EDIT: Recentemente, tenho usado o dyng / ctrlsf.vim para pesquisar com exibição contextual (como a pesquisa sublime) e mudei o mecanismo de ag para ripgrep . O desempenho é excelente.
EDIT2: Juntamente com o CtrlSF, você pode usar o mg979 / vim-visual-multi , fazer alterações em vários arquivos de uma só vez e, no final, salvá-los de uma só vez.
fonte
Coisas como
:e
e:badd
aceitarão apenas UM argumento, portanto, o seguinte falharáSe você deseja adicionar vários arquivos do vim, use
arga[dd]
fonte
Algumas respostas neste tópico sugerem o uso de guias e outras sugerem o uso de buffer para realizar a mesma coisa. Guias e buffers são diferentes. Eu sugiro fortemente que você leia este artigo " Vim Tab madness - Buffers vs Tabs ".
Aqui está um bom resumo que eu retirei do artigo:
Resumo:
fonte
:help window
no VimAo usar vários arquivos no vim, eu uso esses comandos principalmente (com ~ 350 arquivos abertos):
:b <partial filename><tab>
(pule para um buffer):bw
(limpeza do buffer, remova um buffer):e <file path>
(edite, abra um novo buffer>pltags
- habilitar o salto para definições de sub-rotina / métodofonte
:b <partial filename><tab>
maisset wildmenu
em suas.vimrc
obras bem para quando você tem toneladas de buffers abertos. Então você apenas combina parcialmente e percorre as que encontra. Em outros editores decentes, você tem uma localização difusa, mas normalmente não pode restringir essa localização difusa apenas aos arquivos que você abriu.Adicionar outra resposta, pois isso não é coberto por nenhuma das respostas
Para alterar todos os buffers para
tab
exibição.abrirá todos os buffers para a visualização em guias. Em seguida, podemos usar qualquer comando relacionado à guia
detalhes em
:help tab-page-commands
.Podemos instruir o vim a abrir, como visualização de guia, vários arquivos por
vim -p file1 file2
.alias vim='vim -p'
será útil.A mesma coisa também pode ser alcançada seguindo o comando automático em
~/.vimrc
De qualquer forma, para responder à pergunta: Para adicionar à lista de argumentos:
arga file
,Para excluir da lista arg:
argd pattern
Mais em
:help arglist
fonte
Você pode querer usar marcas globais do Vim .
Dessa forma, você pode saltar rapidamente entre os arquivos e até o local marcado no arquivo. Além disso, os comandos principais são curtos:
'C
leva-me ao código com o qual estou trabalhando,'T
leva-me ao teste de unidade em que estou trabalhando.Quando você muda de lugar, a redefinição das marcas também é rápida:
mC
marca o novo ponto do código,mT
marca o novo ponto do teste.fonte
Eu uso o mesmo arquivo .vimrc para o gVim e a linha de comando do Vim. Eu costumo usar guias no gVim e buffers na linha de comando Vim, então eu tenho meu .vimrc configurado para facilitar o trabalho com os dois:
Isso impede os mapeamentos existentes para He L, mas torna a alternância entre arquivos extremamente rápida e fácil. Basta pressionar Hpara o próximo e Lpara o anterior; esteja usando guias ou buffers, você obterá os resultados pretendidos.
fonte
Se você for usar vários buffers, acho que o mais importante é ocultar, para que você possa alternar os buffers, mesmo que você tenha alterações não salvas no que está deixando.
fonte
Se estiver usando apenas comandos internos do vim , o melhor que eu já vi para alternar entre vários buffers é o seguinte:
Combina perfeitamente os comandos
:ls
e:b
- listando todos os buffers abertos e esperando que você insira o comando para alternar o buffer.Dado o mapeamento acima no vimrc, depois que você digita
<Leader>f
,23
para ir para o buffer 23,#
para ir para o buffer alternativo / MRU,<Tab>
ou<C-i>
para o preenchimento automático,<CR>
ou<Esc>
para permanecer no buffer atualUm instantâneo da saída para o mapeamento de teclas acima é:
No instantâneo acima:
%a
para atual,h
para oculta,#
para anterior, vazio para não foi alternado para.+
para modificado.Além disso, eu sugiro fortemente
set hidden
. Veja:help 'hidden'
.fonte
:b
e:ls
muito, mas de forma independente. Eu acho que isso se torna menos útil quando você tem mais do que um valor de página de buffers, mas, em seguida, você ainda pode simplesmente cair de volta para:b
nnoremap <leader>f :ls<cr>:b<space>
, o que podeset more
as coisas só fazem diferença quando há muitos arquivos abertos (mais de uma página), por exemplovim /usr/include/*
, embora sejam menos úteis.Eu uso o seguinte, isso fornece muitos recursos que você esperaria ter em outros editores, como Sublime Text / Textmate
.vimrc
:let g:airline#extensions#tabline#enabled = 1
. Isso exibe automaticamente todos os buffers como cabeçalhos de guias quando você não tem páginas de guias abertasset wildmenu
em sua.vimrc
em seguida, quando você digita:b <file part>
+ Tabpara um buffer você receberá uma lista de possíveis buffers que você pode usar / direita setas para percorrer esquerda:Explore
mas facilita muito o trabalho. Você apenas digita-
para abrir o explorer, que é a mesma chave que para subir um diretório no explorer. Torna a navegação mais rápida (no entanto, com fzf eu raramente uso isso):cdo
nos resultados para pesquisar e substituirfonte
Minha maneira de trabalhar efetivamente com vários arquivos é usar o tmux.
Permite dividir janelas vertical e horizontalmente, como em:
Eu trabalho dessa maneira em minhas máquinas mac e linux e acho melhor do que o mecanismo de comutação de painel de janela nativo fornecido (em Macs). Acho a troca mais fácil e apenas com o tmux consegui que a 'nova página no mesmo diretório atual' funcionasse no meu mac (apesar do fato de que parece haver opções para abrir novos painéis no mesmo diretório), o que é uma peça surpreendentemente crítica. Um novo painel instantâneo no local atual é incrivelmente útil. Um método que cria novos painéis com as mesmas combinações de teclas para os dois sistemas operacionais é fundamental para mim e um bônus para todos pela futura compatibilidade pessoal. Além de vários painéis tmux, também tentei usar várias guias, por exemplo e várias novas janelas, por exemploe, finalmente, descobri que vários painéis tmux são os mais úteis para mim. Sou muito 'visual' e gosto de manter meus vários contextos bem na minha frente, conectados juntos como painéis.
O tmux também suporta painéis horizontais e verticais que os mais antigos
screen
não (embora o iterm2 do mac pareça suportá-lo, mas, novamente, a configuração de diretório atual não funcionou para mim). tmux 1.8fonte
Eu uso a linha de comando e git muito, então eu tenho esse alias no meu bashrc:
Isso abrirá cada novo arquivo em uma nova guia em uma janela existente e criará uma janela para cada repositório git. Portanto, se você abrir dois arquivos do repositório A e três arquivos do repositório B, terá duas janelas, uma para o repositório A com duas guias e outra para o repositório B com três guias.
Se o arquivo que você está abrindo não estiver contido em um repositório git, ele será direcionado para uma janela padrão.
Para pular entre as guias, eu uso esses mapeamentos:
Para abrir vários arquivos de uma só vez, você deve combinar isso com uma das outras soluções.
fonte
Eu uso vários buffers definidos ocultos no meu
~/.vimrc
arquivo.O script mini-buffer explorer também é bom para obter uma lista compacta e agradável de seus buffers. Então
:b1
ou:b2
... para ir para o buffer apropriado ou use o mini-explorer de buffer e navegue pelos buffers.fonte
tente seguir os mapas para facilitar a edição de vários arquivos
"janelas divididas
nmap <leader>sh :leftabove vnew<CR>
nmap <leader>sl :rightbelow vnew<CR>
nmap <leader>sk :leftabove new<CR>
nmap <leader>sj :rightbelow new<CR>
" movendo-se em torno de
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l
nmap <C-h> <C-w>h
fonte
Fiz um vídeo muito simples mostrando o fluxo de trabalho que uso. Basicamente, uso o plug - in Ctrl-P Vim e mapeei a navegação do buffer para a tecla Enter.
Dessa forma, eu posso pressionar Enter no modo normal, olhar para a lista de arquivos abertos (que aparece em uma pequena nova janela na parte inferior da tela), selecionar o arquivo que quero editar e pressionar Enter novamente. Para pesquisar rapidamente vários arquivos abertos, basta digitar parte do nome do arquivo, selecione o arquivo e pressione Enter.
Não tenho muitos arquivos abertos no vídeo, mas isso se torna incrivelmente útil quando você começa a ter muitos deles.
Como o plug-in classifica os buffers usando uma ordem MRU, basta pressionar Enter duas vezes e pular para o arquivo mais recente que você estava editando.
Após a instalação do plug-in, a única configuração necessária é:
Claro que você pode mapeá-lo para uma chave diferente, mas acho que o mapeamento para entrar é muito útil.
fonte
Eu sugeriria usar o plugin
Aqui está o link do github com instruções.
Nerdtree
Eu uso o vim-plug como um gerenciador de plugins, mas você também pode usar o Vundle.
vim-plug
Vundle
fonte
No meu e em muitos outros usuários do vim, a melhor opção é:
E então apenas Ctrl + 6 para mudar para o último buffer. Ou você sempre pode pressionar
E então
<C-W><C-H/K/L/j>
para mudar a divisão de trabalho.É claro que você pode editar qualquer arquivo em qualquer número de divisões.
fonte
Quando comecei a usar o VIM, não percebi que as guias deveriam ser usadas como layouts de janela diferentes, e o buffer serve para a edição / troca de arquivos múltiplos entre si. Na verdade, no começo, as abas não estavam lá antes da v7.0 e eu apenas abri um VIM dentro de uma aba de terminal (eu estava usando o gnome-terminal no momento) e alterne entre as abas usando alt + numbers, pois pensei em usar comandos como : buffers,: bn e: bp eram demais para mim. Quando o VIM 7.0 foi lançado, acho mais fácil gerenciar muitos arquivos e mudar para ele, mas recentemente percebi que os buffers sempre devem ser o caminho a seguir, a menos que uma coisa: você precise configurá-lo para que funcione corretamente.
Então, tentei o vim-airlines e ativei a barra de buffer visual no topo da guia, mas os gráficos estavam com problemas no meu iTerm2, então tentei alguns outros e parece que o MBE funciona melhor para mim. Também defino shift + h / l como atalhos, pois os originais (movendo-se para o início / fim da página atual) não são muito úteis para mim.
map <S-h> :bprev<Return>
map <S-l> :bnext<Return>
Parece ser ainda mais fácil que gt e gT, e: e é mais fácil que: tabnew também. Acho que: bd não é tão conveniente quanto: q (embora o MBE esteja tendo algum problema com ele), mas eu posso viver com todos os arquivos no buffer, eu acho.
fonte
se você estiver no osx e quiser clicar em suas guias, use o MouseTerm e o SIMBL (extraídos daqui ). Além disso, confira esta discussão relacionada .
fonte
A maioria das respostas neste tópico está usando comandos simples do vim, o que é claro, mas achei que forneceria uma resposta extensa usando uma combinação de plugins e funções que acho particularmente úteis (pelo menos algumas dessas dicas vieram do arquivo de Gary Bernhardt dicas de navegação ):
Para alternar entre os dois últimos arquivos, basta pressionar
<leader>
duas vezes. Eu recomendo atribuir<leader>
à barra de espaço:Para se movimentar rapidamente em um projeto, a resposta é uma solução de correspondência difusa, como CtrlP . Eu o vinculo
<leader>a
para acesso rápido.No caso, quero ver uma representação visual dos buffers atualmente abertos, uso o plug-in BufExplorer . Simples mas efetivo.
Se eu quiser navegar pelo sistema de arquivos, usaria a linha de comando ou um utilitário externo (Quicklsilver, Afred etc.), mas ver a estrutura atual do projeto NERD Tree é um clássico. Não use isso no lugar de
2
como seu método principal de localização de arquivos. Isso realmente vai te atrapalhar. Eu uso a ligação<leader>ff
.Isso deve ser suficiente para localizar e abrir arquivos. A partir daí, é claro, use divisões horizontais e verticais. Em relação às divisões, acho essas funções particularmente úteis:
Abra novas divisões em áreas menores quando não houver espaço suficiente e expanda-as na navegação. Consulte aqui os comentários sobre o que eles fazem exatamente:
Mude de divisão para divisão facilmente:
fonte
Você pode ser um louco absoluto e apelido
vim
paravim -p
adicionando em sua.bashrc
:alias vim="vim -p"
Isso resultará na abertura de vários arquivos do shell em guias, sem a necessidade de chamar a
:tab ball
partir do vim posteriormente.fonte