Como posso editar vários arquivos no VIM?

169

Sei que posso abrir vários arquivos usando vimalgo como vim 2011-12*.log, mas como posso alternar entre arquivos e fechá-los um por vez? Além disso, como posso informar o nome do arquivo atual que estou editando?

cwd
fonte
Relacionado: gvim -p limite de abas abertas?
Grzegorz Wierzowiecki 02/02/12

Respostas:

172

Primeiro, no vim, você pode inserir :(dois pontos) e, em seguida help, ajudar , procure :helpuma lista de tópicos de auto-ajuda, incluindo um breve tutorial. Na lista de tópicos, mova o cursor sobre o tópico de seu interesse e pressione ctrl]e esse tópico será aberto.

Um bom lugar para você começar seria o tópico

|usr_07.txt|  Editing more than one file

Ok, vamos à sua resposta.

Após iniciar o vim com uma lista de arquivos, você pode passar para o próximo arquivo digitando :nextou :nabreviando. :wnexté a abreviação de escrever as alterações atuais e, em seguida, passa para o próximo arquivo.

Há também um análogo :previous, :wpreviouse :Next. (Observe que :pé abreviação de :print. A abreviação de :previousé :prevou :N.)

Para ver onde você está na lista de arquivos, digite :argse o arquivo que está sendo editado no momento aparecerá []entre colchetes.

Exemplo:

vim foo.txt bar.txt
:args

resultado:

[foo.txt] bar.txt
bsd
fonte
25
: wn é o formato abreviado de: wnext.
Kowh
Você também pode fazer: rew para voltar ao primeiro arquivo. : e # alterna entre 2 arquivos. : n! vai para o próximo arquivo sem escrever. Veja também: set autowrite.
Sasquiha
4
Com relação a vários buffers / janelas / guias, consulte também o StackOverflow. Como trabalhar efetivamente com vários arquivos no Vim? e Usando as guias do Vim como buffers .
21713 mmmm
11
Eu achei o capítulo 22 "Achando o arquivo para editar" muito útil também. Ele repassa o uso do gerenciador de diretórios para editar os arquivos que você deseja.
Harry Moreno
: wn um incrível.
rammayur
54

você pode abrir outro arquivo enquanto o vim estiver aberto com :tabe filenamee alternar para o outro arquivo digitado :tabnou :tabppara o próximo e o anterior de acordo.

Os atalhos de teclado gT e gt também podem ser usados ​​para alternar entre guias quando você não está no modo de edição (ou seja, não está nos modos de inserção, substituição etc.). Em alguns sistemas, Ctrl+ Alt+ Page Upe Ctrl+ Alt+ Page Downtambém permitem a alternância de guias, mas isso nem sempre funciona (por exemplo, não funciona no terminal OS X 'pronto para uso').

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

Hanan N.
fonte
16
Este. Também abra arquivos em abas com:vim -p file1 file2
Not Now
SURPREENDER! Eu nunca me deparei com isso antes, apesar de ter usado o vim por anos. Isso muda tudo .
me_and
Observe que as guias não se destinam a trabalhar com vários arquivos. Eles se destinam a trabalhar com vários layouts . Ver artigo .
Patryk.beza 14/10/2015
5
Além: Se você já está no vim e deseja adicionar outro arquivo, pode usar: :argadd filenamee depois :nexta ele. Da mesma forma, você pode usar :argdel filenamepara remover um dos arquivos em edição.
Luv2code
36

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 utilização filename Ctrl+ G, :fileou:f

Birei
fonte
11
:bwfechar arquivo haha. Não se esqueça de ler a ajuda :bwonde diz que você só deve usá-la se souber o que está fazendo. Não é um grande negócio, mas a menos que queira acabar com todas as marcas e informações sobre o arquivo, a melhor utilização :bdou :qcomo uma pessoa normal
Dylan
11
Mais informações :bwno caso de você estar curioso: vi.stackexchange.com/questions/2212/…
wisbucky 5/10
25

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 em painéis.

Agora não
fonte
4
Você pode usar em :vsvez de:vsp
Khaja Minhajuddin
2
Ou mesmo apenas Ctrl+W, vpara a divisão vertical e Ctrl+W, spara a horizontal.
Ruslan
11
Uso CTRL+Whá anos e recentemente faço muita edição de VI em páginas da web. Toda vez que eu digito o comando sem nem pensar e ... whammmm ... a guia do navegador se foi! Eu continuo esquecendo. Eu realmente preciso aprender um novo atalho.
Jeach
13
:n -> Move to next file
:N -> Move to previous file
diham
fonte
10

Fiz uma pergunta semelhante no superusuário,

"Como copiar e colar entre diferentes janelas do bash e arquivos abertos com o VI?"

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

  1. Abra um arquivo com $ vim file1, abra um segundo arquivo no VIM usando o :split file2comando
  2. Ou use $ vim -o file1 file2do bash.
  3. Alterne entre arquivos - alterne o arquivo ativo - no VIM com ctrl- w ctrl- w.
  4. Um exemplo de operação é copiar (ou puxar) no arquivo1 yy, alternar (3) e colar (ou colocar) o pconteúdo no arquivo2.
  5. Tudo o resto é normal quando uma das janelas está ativa, portanto, :qfecha e :q!força fecha.

Meu bash é preto e branco; portanto, o nome do arquivo de cada tela é denominado como uma linha 'selecionada' invertida com o nome do arquivo mencionado lá.

Woot!

xtian
fonte
6

Acho que o método mais conveniente de editar vários arquivos é usando guias. Você pode abrir vários arquivos em guias separadas através da linha de comando da seguinte maneira:

vim -p file1.txt file2.txt

Ou, se você já possui o vim aberto, pode abrir um novo arquivo em uma nova guia, como segue:

:tabe file2.txt

Depois de abrir as guias, use gtpara exibir a próxima guia e gTa 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

Finalmente, você pode mover a guia atual para a nlocalização th com :ntabmonde né qualquer número maior ou igual a 0.

Cory Klein
fonte
6
argadd a/b c/d e/f

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


Ver :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 novamente com seus argumentos, fazendo :argsd*.

Dylan
fonte
0

Há muitas maneiras de fazer isso. O primeiro, talvez o menos conveniente, é chamar vimos arquivos que você deseja editar - crie:

vim first_file second_file ...

Ele chama os dois arquivos em dois buffers. Para alternar de um arquivo para outro, use :ne :N. Para listar os arquivos que você está editando, :argsfará o trabalho. :help bufferirá ajudá-lo mais sobre isso.


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

Existe uma maneira de editar seus arquivos de uma maneira mais conveniente, dividindo a tela do console usando o vim . Para fazer isso, abra dois quadros com :split( :sp) ou :vsplit( :vs) enquanto estiver usando o vim . Em seguida, navegue nesses quadros usando a combinação Ctrl+ W> Ctrl+ W. Também é possível usar Ctrl+ W+ a seta ou a tecla ( H, J, Kou L) correspondente para o quadro seguinte. Quando isso for feito, edite o arquivo que deseja :e file_name. :help opening-windowirá ajudá-lo mais sobre isso.

Agora, se você quiser ver as diferenças entre os arquivos, use o -dargumento ou chame o programa vimdiff (é o mesmo) com os arquivos correspondentes. :help diffirá ajudá-lo mais sobre isso.

vim -d first_file second_file ...

Entre em contato se tiver algum problema.

aleroy
fonte
0

Eu gosto de usar janelas divididas - horizontais e verticais - para editar vários arquivos.

Eu uso o tmux para gerenciar essas janelas mais facilmente

https://tmux.github.io/ "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 conectá-los novamente a um terminal diferente. muito mais. Consulte o manual. "

Exemplo: Examinando arquivos ou executando testes à direita, editando arquivos de teste e de origem à esquerda: insira a descrição da imagem aqui

Michael Durrant
fonte
0

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

:p para arquivo anterior

:n para o próximo arquivo

bala selvam
fonte
Bem-vindo ao U&L, isso dificilmente adiciona algo a outras respostas publicadas anos atrás.
Archemar 3/17/17