Como posso editar vários arquivos no VIM?

137

Eu sei que posso abrir vários arquivos com vim fazendo algo como vim 2011-12*.log , mas como posso alternar entre arquivos e fechar os arquivos um de cada vez? Além disso, como posso dizer o nome do arquivo atual que estou editando?

    
por cwd 24.12.2011 / 18:21

11 respostas

139
Primeiro de tudo, no vim você pode digitar : (dois pontos) e então ajudar help , ala :help para uma lista de tópicos de autoajuda, incluindo um pequeno tutorial. Na lista de tópicos, mova o cursor sobre o tópico de interesse e pressione ctrl ] e esse tópico será aberto.

Um bom lugar para você começar seria o assunto

|usr_07.txt|  Editing more than one file

Ok, sua resposta.

Depois de iniciar o vim com uma lista de arquivos, você pode ir para o próximo arquivo inserindo :next ou :n .   :wnext é curto para gravar as alterações atuais e depois passar para o próximo arquivo.

Há também uma :previous , :wprevious e :Next análoga. (Observe que :p é a abreviação de :print . A abreviação de :previous é :prev ou :N .)

Para ver onde você está na lista de arquivos, insira :args e o arquivo atualmente sendo editado aparecerá em [] (colchetes).

Exemplo:

vim foo.txt bar.txt
:args

resultado:

[foo.txt] bar.txt
    
por 24.12.2011 / 18:36
42

você pode abrir outro arquivo enquanto o vim estiver aberto com :tabe filename e para alternar para o outro arquivo que você digitar :tabn ou :tabp para o próximo e o anterior de acordo.

Os atalhos de teclado gT e gt também podem ser usados para alternar as guias quando você não estiver no modo de edição (ou seja, não inserir, substituir os modos etc). Em alguns sistemas Ctrl + Alt + Page Up e Ctrl + Alt + < kbd> Page Down também permite a mudança de tabulação, mas isto nem sempre funciona (por exemplo, não funcionará no terminal OS X 'fora da caixa').

E você pode ver o nome do arquivo na parte superior do aplicativo vim.

    
por 24.12.2011 / 18:28
26

Comandos para alternar entre buffers:

:bf            # Go to first file.
:bl            # Go to last file
:bn            # Go to next file.
:bp            # Go to previous file.
:bw            # Close file.

:help buffer para encontrar mais informações

Para saber o nome do arquivo, use Ctrl + G , :file ou :f

    
por 24.12.2011 / 18:33
20

Outra opção, além das respostas dadas, é dividir a janela com:

:sp
:vsp

:vsp é para divisão vertical. Em seguida, use Ctrl+W <ARROW_KEYS> para mover nos painéis.

    
por 25.12.2011 / 02:40
10
:n -> Move to next file
:N -> Move to previous file
    
por 25.12.2011 / 16:36
8

Eu fiz uma pergunta semelhante no superusuário

< em> "Como copiar e colar entre diferentes janelas do bash e arquivos abertos com VI?"

A resposta para minha pergunta é que você não pode, mas você pode abrir dois arquivos em uma janela bash usando o comando :split do VIM:

  1. Abra um arquivo com $ vim file1 , abra um segundo arquivo no VIM usando o comando :split file2 .
  2. Ou use $ vim -o file1 file2 do bash.
  3. Alterna entre arquivos - alterna o arquivo ativo - no VIM com ctrl - w ctrl - w .
  4. Uma operação de exemplo, então, é copiar (ou yank) em file1 y y , switch (3), depois colar (ou colocar) p conteúdo em arquivo2.
  5. Tudo o mais é normal quando uma das janelas está ativa, portanto, :q quits e :q! force quits.

Meu bash é preto e branco, então o nome do arquivo de cada tela é estilizado como uma linha 'selecionada' invertida com o nome do arquivo citado lá.

Woot!

    
por 25.12.2011 / 20:31
4
argadd a/b c/d e/f

argadd ... adicionará todos os arquivos a args e também a :ls / :buffers e permitirá que você os edite.

Veja :h arglsit & :h argedit & :h argsd

Além disso, você pode executar determinadas ações apenas em args com :argdo ... , e você pode começar de novo com seus argumentos fazendo :argsd* .

    
por 08.12.2017 / 17:28
2

Eu acho o método mais conveniente de editar vários arquivos usando guias. Você pode abrir vários arquivos em guias separadas por meio da linha de comando da seguinte forma:

vim -p file1.txt file2.txt

Ou, se você já tem o vim aberto, você pode abrir um novo arquivo em uma nova aba como esta:

:tabe file2.txt

Depois de abrir as guias, use gt para exibir a próxima guia e gT para exibir a guia anterior.

Você também pode pular para a primeira guia com 1gt , a segunda guia com 2gt , etc.

Você pode fechar as guias usando :tabc

Por fim, você pode mover a guia atual para o n th location com :ntabm , em que n é qualquer número maior ou igual a 0 .

    
por 14.10.2015 / 23:56
0

Existem muitas maneiras de fazer isso. O primeiro, talvez o menos conveniente, é chamar vim com os arquivos que você deseja editar - criar:

vim first_file second_file ...

Ele chama os dois arquivos em dois buffers. Para alternar de um arquivo para outro, use :n e :N . Para listar os arquivos que você está editando, :args fará o trabalho. :help buffer vai te ajudar mais nisso.

Isso deve responder sua pergunta. Mas aqui estão mais informações:

Existe uma maneira de editar seus arquivos de uma forma mais conveniente, dividindo a tela do console usando vim . Para fazer isso, abra dois quadros com :split ( :sp ) ou :vsplit ( :vs ) enquanto estiver usando vim . Em seguida, navegue nesses quadros usando a combinação Ctrl + W > Ctrl + W . Você também pode usar Ctrl + W + a seta ou a tecla ( H , J , K ou L ) correspondente ao próximo quadro. Quando isso for feito, edite o arquivo desejado com :e file_name . :help opening-window vai te ajudar mais nisso.

Agora, se você quiser ver as diferenças entre arquivos, use o argumento -d ou chame o programa vimdiff (é o mesmo) com os arquivos correspondentes. :help diff vai te ajudar mais nisso.

vim -d first_file second_file ...

Por favor, deixe-me saber se você tem algum problema.

    
por 24.07.2014 / 07:57
0

Eu gosto de usar janelas divididas - horizontal e vertical - para editar vários arquivos.

Eu uso o tmux para gerenciar essas janelas com mais facilidade

link "O que é um multiplexador de terminal? Ele permite alternar facilmente entre vários programas em um terminal, desconectá-los (eles continuam sendo executados em segundo plano) e reconectá-los a um terminal diferente. E fazer muito mais. Consulte o manual."

Exemplo: olhando para arquivos ou executando testes à direita, editando arquivos de teste e fonte à esquerda:

    
por 02.01.2016 / 14:16
0

:e #(filename) para alternar entre dois arquivos abertos

:p do arquivo anterior

:n para o próximo arquivo

    
por 03.01.2017 / 12:49