Come posso modificare più file in VIM?


Risposte:


172

Prima di tutto, in vim puoi inserire :(due punti) e poi aiutare help, ala :helpper un elenco di argomenti di auto-aiuto, incluso un breve tutorial. All'interno dell'elenco degli argomenti, sposta il cursore sull'argomento di interesse, quindi premi ctrl]e quell'argomento verrà aperto.

Un buon punto di partenza sarebbe l'argomento

|usr_07.txt|  Editing more than one file

Ok, alla tua risposta.

Dopo aver avviato vim con un elenco di file, è possibile passare al file successivo inserendo :nexto :nin breve. :wnextè l'abbreviazione di scrivere le modifiche correnti e quindi passare al file successivo.

C'è anche un analogo :previous, :wpreviouse :Next. (Nota che :pè una scorciatoia per :print. La scorciatoia per :previousè :prevo :N.)

Per vedere dove ti trovi nell'elenco dei file, inserisci :argse il file attualmente in fase di modifica apparirà tra []parentesi.

Esempio:

vim foo.txt bar.txt
:args

risultato:

[foo.txt] bar.txt

25
: wn è la forma abbreviata di: wnext.
Kowh,

Puoi anche fare: rew per tornare al primo file. : e # scambia tra 2 file. : n! passa al file successivo senza scrivere. Guarda anche: imposta autowrite.
Sasquiha,

4
Rispetto a più buffer / finestre / schede vedi anche StackOverflow's Come lavorare efficacemente con più file in Vim? e Utilizzo delle schede di Vim come buffer .
mmoya,

1
Ho trovato molto utile anche il capitolo 22 "Trovare il file da modificare". Ripassa usando Esplora directory per modificare i file desiderati.
Harry Moreno,

: wn fantastico.
Rammayur,

54

puoi aprire un altro file mentre vim è aperto con :tabe filenamee per passare all'altro file digitato :tabno :tabpper il successivo e il precedente di conseguenza.

Le scorciatoie da tastiera gT e gt possono anche essere utilizzate per cambiare scheda quando non si è in modalità di modifica (ovvero non in modalità inserimento, sostituzione ecc.). Su alcuni sistemi Ctrl+ Alt+ Page Upe Ctrl+ Alt+ Page Downconsentono anche il cambio di tabulazione, ma ciò non sempre funziona (ad esempio, non funzionerà nel terminale OS X "out of the box").

E puoi vedere il nome del file nella parte superiore dell'app vim.


16
Questo. Apri anche i file in schede con:vim -p file1 file2
Non ora il

STUPIRE! Non l'avevo mai incontrato prima, nonostante avessi usato VIM per anni. Questo cambia tutto .
io_e il

Si noti che le schede non sono progettate per funzionare con più file. Sono destinati a funzionare con più layout . Vedi articolo .
patryk.beza,

5
A parte: se sei già in vim e vuoi aggiungere un altro file, puoi usare: :argadd filenamee poi :nextad esso. Allo stesso modo, è possibile utilizzare :argdel filenameper rimuovere uno dei file in modifica.
Luv2code

36

Comandi per passare da un buffer all'altro:

: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 per trovare maggiori informazioni

Per conoscere il nome del file utilizzo Ctrl+ G, :fileo:f


1
:bwchiudi il file haha. Non dimenticare di leggere la guida in :bwcui dice che dovresti usarlo solo se sai cosa stai facendo. Non è un grosso problema, ma a meno che tu non voglia cancellare tutti i segni e le informazioni sul file, usare meglio :bdo :qcome una persona normale
Dylan,

1
Maggiori informazioni su :bwin caso di curiosità: vi.stackexchange.com/questions/2212/…
wisbucky

26

Un'altra opzione a parte le risposte fornite, è quella di dividere la finestra con:

:sp
:vsp

:vspè per la divisione verticale. Quindi utilizzare Ctrl+W <ARROW_KEYS>per spostarsi nei riquadri.


4
Puoi usare :vsinvece di:vsp
Khaja Minhajuddin il

2
O anche solo Ctrl+W, vper la divisione verticale e Ctrl+W, sper la divisione orizzontale.
Ruslan,

1
Ho usato CTRL+Wper anni e recentemente faccio un sacco di editing VI all'interno delle pagine web. Ogni volta, digito il comando senza nemmeno pensare e ... whammmm ... la scheda del browser è ANDATA! Continuo a dimenticare. Ho davvero bisogno di imparare una nuova scorciatoia.
Jeach,

13
:n -> Move to next file
:N -> Move to previous file

10

Ho fatto una domanda simile a superutente,

"Come copiare e incollare tra diverse finestre bash e file aperti con VI?"

La risposta alla mia domanda è che non puoi, ma puoi aprire due file in una finestra bash usando il :splitcomando di VIM :

  1. Apri un file con $ vim file1, apri un secondo file all'interno di VIM usando il :split file2comando.
  2. Oppure, usa $ vim -o file1 file2da bash.
  3. Passa da un file all'altro - attiva / disattiva il file attivo - in VIM con ctrl- w ctrl- w.
  4. Un'operazione di esempio è quindi copiare (o copiare) nel file1 yy, cambiare (3), quindi incollare (o inserire) il pcontenuto nel file2.
  5. Tutto il resto è normale quando una delle finestre è attiva, quindi si :qchiude e si :q!forza la chiusura.

Il mio bash è in bianco e nero, quindi il nome del file di ogni schermata è definito come una linea "selezionata" invertita con il nome del file citato lì.

Woot!


6

Trovo che il metodo più conveniente per modificare più file sia usando le schede. Puoi aprire più file in schede separate tramite la riga di comando in questo modo:

vim -p file1.txt file2.txt

Oppure, se hai già aperto VIM, puoi aprire un nuovo file in una nuova scheda in questo modo:

:tabe file2.txt

Dopo aver aperto le schede, utilizzare gtper visualizzare la scheda successiva e gTper visualizzare la scheda precedente.

Puoi anche passare alla prima scheda con 1gt, alla seconda scheda con 2gt, ecc.

Puoi chiudere le schede usando :tabc

Infine puoi spostare la scheda corrente nella nposizione con :ntabmdove nc'è un numero maggiore o uguale a 0.


6
argadd a/b c/d e/f

argadd ...aggiungerà tutti i file a args e anche a :ls/ :bufferse ti permetterà di modificarli.


Vedi :h arglsit& :h argedit&:h argsd


Inoltre, puoi eseguire determinate azioni solo con args :argdo ...e puoi ricominciare da capo con args facendo :argsd*.


0

Ci sono molti modi per farlo. Il primo, forse il meno conveniente, è chiamare vimcon i file che si desidera modificare - creare:

vim first_file second_file ...

Chiama i due file in due buffer. Per passare da un file a un altro, utilizzare :ne :N. Per elencare i file che stai modificando, :argsfarà il lavoro. :help bufferti aiuterà di più su questo.


Questo dovrebbe rispondere alla tua domanda. Ma qui ci sono ulteriori informazioni:

C'è un modo per modificare i tuoi file in un modo più conveniente dividendo la schermata della tua console usando vim . Per fare ciò, apri due frame con :split( :sp) o :vsplit( :vs) mentre usi vim . Quindi navigare in questi frame utilizzando la combinazione Ctrl+ W> Ctrl+ W. È anche possibile utilizzare Ctrl+ W+ la freccia o il tasto ( H, J, Ko L) corrispondente al frame successivo. Al termine, modifica il file desiderato :e file_name. :help opening-windowti aiuterà di più su questo.

Ora, se vuoi vedere le differenze tra i file, usa l' -dargomento o chiama il programma vimdiff (è lo stesso) con i file corrispondenti. :help diffti aiuterà di più su questo.

vim -d first_file second_file ...

Per favore fatemi sapere se avete qualche problema.


0

Mi piace usare le finestre divise - sia orizzontali che verticali - per modificare più file.

Uso tmux per gestire quelle finestre più facilmente

https://tmux.github.io/ "Che cos'è un multiplexer terminale? Ti consente di passare facilmente tra diversi programmi in un terminale, scollegarli (continuano a funzionare in background) e ricollegarli a un terminale diverso. E fare un molto di più. Vedi il manuale. "

Esempio: guardando i file o eseguendo i test a destra, modificando i file di test e di origine a sinistra: inserisci qui la descrizione dell'immagine


0

:e #(filename) per alternare tra due file aperti

:p per il file precedente

:n per il prossimo file


Benvenuto in U&L, questo non aggiunge quasi nulla ad altre risposte pubblicate anni fa.
Archemar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.