*usr_07.txt* Per Vim version 6.3. Ultima modifica: 2004 Mar 12 VIM USER MANUAL - di Bram Moolenaar Traduzione di questo capitolo: Giuliano Bordonaro Elaborare più di un file Non importa quanti file abbiate, potete elaborarli tutti senza lasciare Vim. Stabilire una lista di file da elaborare e saltare dall'uno all'altro. Copiare testo da un file ed inserirlo entro un altro. |07.1| Elaborare un altro file |07.2| Una lista di file |07.3| Saltare da file a file |07.4| File di backup |07.5| Copiare testo tra più file |07.6| Visualizzare un file |07.7| Rinominare un file Capitolo seguente: |usr_08| Dividere le finestre Capitolo precedente: |usr_06| Usare l'evidenziazione della sintassi Indice: |usr_toc|
*07.1* Elaborare un altro file Innanzi tutto bisogna avviare Vim per ogni file da modificare. C'è un modo semplice. Per iniziare a lavorare su di un altro file usate questo comando:
:edit foo.txt
Ovviamente potete utilizzare un qualunque altro nome di file invece di "foo.txt". Vim chiuderà il file attualmente aperto ed aprirà quello nuovo. Se il file attualmente aperto avesse delle modifiche non ancora salvate, comunque, Vim mostrerebbe un messaggio di errore e non aprirebbe il nuovo file:
E37: No write since last change (use ! to override)
Non salvato dopo l'ultima modifica (usare ! per procedere comunque)Note:
Vim fornisce un codice identificativo di errore prima di ciascun messaggio di errore. Se non doveste comprendere questo messaggio o da cosa esso fosse causato, vedere nel sistema di aiuto cercando tale codice identificativo. Nel caso presente:
:help E37
Ora vi sono diverse alternative. Potete salvare il file con il comando:
:write
Ovvero forzare Vim ad ignorare i cambiamenti ed aprire comunque il secondo file, usando il carattere (!):
:edit! foo.txt
Se voleste modificare un altro file ma non salvare subito le modifiche dell'attuale, potete nasconderlo:
:hide edit foo.txt
Il testo modificato è ancora lì, ma non potete vederlo. Ciò verrà spiegato più avanti nella sezione |22.4|: La lista dei buffer
*07.2* Una lista di file Potete avviare Vim per modificare un gruppo di file. Ad esempio:
vim one.c two.c three.c
Questo comando avvia Vim e gli dice che verranno modificati tre file. Vim fa vedere solo il primo file. Dopo avere effettuato le dovute modifiche, per passare al prossimo file usate il comando:
:next
Se ci fossero modifiche non salvate nel file corrente, otterreste un messaggio di errore ed il comando ":next" non funzionerebbe. E' esattamente come avveniva con il comando ":edit", descritto nella precedente sezione. Per lasciar perdere le modifiche:
:next!
Ma di solito vorrete salvare le modifiche prima di passare al prossimo file. Ecco un comando speciale per ottenere ciò:
:wnext
Questo equivale ad usare due distinti comandi:
:write
:next
DOVE MI TROVO? Per vedere quale file della lista sia attualmente in corso di modifica, guardate il titolo della finestra. Potrebbe esserci qualcosa come "(2 of 3)". Ciò significa che state modificando il secondo file di una lista che ne comprende tre. Se volete vedere l'elenco dei file, usate il comando:
:args
E' l'abbreviazione di "arguments". Il risultato potrebbe assomigliare a questo:
one.c [two.c] three.c
Sono i file che sono stati aperti con Vim. Quello su cui state lavorando attualmente, "two.c", è racchiuso tra parentesi quadre. SPOSTARSI SU ALTRI ARGOMENTI Per tornare indietro di un file:
:previous
E' esattamente come il comando ":next", eccetto che va nella direzione opposta. Inoltre, ecco un comando abbreviato per salvare il file prima di muovervi a quello precedente:
:wprevious
Per andare all'ultimo file della lista:
:last
E per tornare al primo:
:first
Però non esistono i comandi ":wlast" o ":wfirst"! Potete usare un contatore per specificare di quanti file spostarvi con i comandi ":next" e ":previous". Per saltare avanti di due file:
:2next
SALVATAGGIO AUTOMATICO Spostandovi tra i file e modificandoli, dovete rammentare di impiegare ":write". Altrimenti apparirà il solito messaggio di errore. Se siete certi di voler salvare comunque le modifiche, potete indicare a Vim di salvare automaticamente, in questo modo:
:set autowrite
Nel caso in cui invece stiate modificando un file che potreste decidere di non salvare, disattivate il salvataggio automatico con:
:set noautowrite
LAVORARE CON UN'ALTRA LISTA DI FILE Potete ridefinire la lista dei file senza uscire da Vim e doverlo poi riavviare. Per editare altri tre file, usate questo comando:
:args five.c six.c seven.h
Oppure con una wildcard, come nei comandi di shell:
:args *.txt
Vim si porterà sul primo file dell'elenco. Se il file attuale avesse subito modifiche, potete prima salvarlo, oppure usare ":args!" (con aggiunto il !) per tralasciare le modifiche. PER MODIFICARE L'ULTIMO FILE? *arglist-quit* Quando si lavora con un elenco di file, Vim prevede che essi debbano essere modificati tutti. Per prevenire l'eventualità di uscire intempestivamente, nel caso non abbiate raggiunto l'ultimo file dell'elenco, vi verrà mostrato il seguente messaggio di errore:
E173: 46 more files to edit
Se intendete uscire comunque, ripetete il comando. In questo modo, funzionerà (ovviamente, solo se non saranno stati immessi altri comandi nel frattempo).
*07.3* Saltare da file a file Per spostarvi rapidamente tra due file, premete CTRL-^ (nelle tastiere English-US il ^ si trova sopra il tasto del 6, in quelle italiane sopra il tasto della "i accentata"). Ad esempio:
:args one.c two.c three.c
Attualmente siamo in one.c.
:next
Adesso ci si trova in two.c. Ora con CTRL-^ si torna a one.c. Un altro CTRL-^ e nuovamente si è in two.c. Ancora CTRL-^ e ci si trova di nuovo in one.c. Se adesso si scrive:
:next
ci si trova in three.c. Notate come il comando CTRL-^ non cambi l'idea di dove ci si trovi nell'elenco dei file. Solo comandi come ":next" e ":previous" lo fanno. Il file precedentemente modificato viene chiamato file "alternate". Se si fosse appena avviato Vim, CTRL-^ non funzionerebbe, perchè non esiste un file precedente. MARCATORI PREDEFINITI Dopo essere passati ad un altro file, possono essere impiegati due marcatori predefiniti molto utili:
`"
Ciò riposizionerà il cursore nella posizione che aveva prima che si fosse lasciato quel file. Un altro marcatore ricorda la posizione dove è avvenuta l'ultima modifica:
`.
Immaginate di lavorare con il file "one.txt". Avete usato il tasto "x" per cancellare un carattere. Poi vi siete spostati sull'ultima riga con "G" e avete salvato il file con ":w". In seguito modificate molti altri file, e poi digitate ":edit one.txt" per ritornare a "one.txt". Se ora usate `" Vim tornerà all'ultima linea del file. Usando `. tornerete alla posizione dove il carattere era stato cancellato. Allo stesso modo, spostandovi attraverso il file, `" e `. vi riporteranno nella posizione ricordata. Almeno sino a quando verrà effettuata un'altra modifica o si chiuderà il file. MARCATURA DI UN FILE Nel capitolo 4 è stato spiegato come porre un marcatore in un file con "mx" e saltare a quella posizione con "`x". Ciò funziona per un solo file. Se si lavorasse con un altro file e si mettessero marcatori in esso, questi sarebbero specifici per questo file. Sinora sono stati usati marcatori con una lettera minuscola. Possono esservi anche marcatori con lettere maiuscole. Questi sono globali, possono essere usati da qualsiasi file. Ad esempio, immaginate di lavorare con il file "foo.txt". Spostatevi a metà del file ("50%") e ponete lì il marcatore F (F per foo):
50%mF
Adesso modificate il file "bar.txt" e mettete il marcatore B (B per bar) alla sua ultima linea:
GmB
Adesso potete impiegare il comando "'F" per tornare a metà di foo.txt. Oppure editare un altro file, digitare "'B" e ritrovarvi nuovamente alla fine di bar.txt. La marcatura dei file verrà ricordata sino a che essa non sia stata posta altrove. Così si può mettere il marcatore, lavorare per ore e poter ancora tornare a quel marcatore. E' spesso utile pensare ad un collegamento tra la lettera usata per segnare ed il posto ove essa si trova. Ad esempio, impiegate il marcatore H nell'header di un file , M in un makefile e C in un file in codice C. Per vedere dove si trovi un marcatore specifico, dovete fornire un argomento al comando ":marks":
:marks M
Potete fornire anche più argomenti:
:marks MCP
Non dimenticate che potete usare
CTRL-O
eCTRL-I
per saltare a posizioni più vecchie o più nuove senza porvi dei marcatori.
*07.4* File di backup Di norma Vim non genera file di backup. Se si volesse averne, basta eseguire il seguente comando:
:set backup
Il nome del file di backup è lo stesso del file originale con una ~ aggiunta in coda. Se il file si chiamasse data.txt, ad esempio, il file di backup si chiamerebbe data.txt~. Se non gradiste il fatto che i file di backup terminino con ~, potete cambiare l'estensione:
:set backupext=.bak
Verrà impiegato data.txt.bak invece di data.txt~. Un'altra opzione utile è 'backupdir'. Specifica dove scrivere il file di backup. L'impostazione predefinita, ovvero scrivere il backup nella stessa directory del file originale, potrebbe, nella maggior parte dei casi, essere la cosa giusta.
Note:
Se l'opzione 'backup' non fosse impostata ma la 'writebackup' sì, Vim creerà comunque un file di backup. Tuttavia questo verrà cancellato quando il file sarà stato salvato. Ciò funziona come una garanzia contro la perdita del file originale qualora il salvataggio fallisse per qualche ragione (il disco pieno è una delle cause più comuni; un colpo di fulmine potrebbe essere un'altra causa, sebbene meno frequente). RECUPERARE IL FILE ORIGINALE Se state editando un file sorgente, potreste voler recuperare il file come era prima delle modifiche effettuate. Ma il file di backup viene sovrascritto ogni qualvolta salvate il file. Così esso conterrà solo la versione precedente e non la prima in assoluto. Per ottenere che Vim recuperi il file originale, impostate l'opzione 'patchmode'. Ciò specifica l'estensione usata per il primo backup. Solitamente si farà così:
:set patchmode=.orig
Quando modificate per la prima volta il file data.txt, operando cambiamenti e salvando il file, Vim tiene una copia del file non modificato con il nome "data.txt.orig". Se modificate ancora il file, Vim vi informerà che "data.txt.orig" esiste già e lo lascerà così com'è. I backup successivi verranno chiamati "data.txt~" (o in qualunque altro modo aveste specificato mediante 'backupext'). Lasciando vuoto 'patchmode' (questo è il default), il file originale non verrà recuperato.
*07.5* Copiare testo tra più file Spieghiamo ora come copiare del testo da un file ad un altro. Cominciamo con un esempio facile. Aprite il file che contiene il testo che volete copiare. Portate il cursore all'inizio del testo e premete "v". Ciò avvia il Visual mode. Spostate ora il cursore alla fine del testo e premete "y" (y sta per "yank", cioè copia). Questo copierà il testo selezionato. Per copiare il paragrafo precedente potete usare:
:edit questofile
/Spieghiamo
vjjjj$y
Poi aprite il file dove intendete incollare il testo. Portate il cursore sul carattere dopo il quale volete far apparire il testo. Usate "p" per incollarvi il testo:
:edit altrofile
/Qui
p
Logicamente si possono usare molti altri comandi per copiare (yank) il testo. Ad esempio, per selezionare intere linee, attivate il Visual mode con "V". Oppure, usate
CTRL-V
per selezionare un blocco rettangolare. Oppure usate "Y" per copiare una sola linea, "yaw" per copiare una parola (yank-a-word), etc. Il comando "p" incolla (puts) il testo dopo il cursore. Usate "P" per incollarlo prima del cursore. Si noti che Vim ricorda se si è copiata qualche linea od un blocco, e lo reincolla allo stesso modo. USARE I REGISTRI Se si dovessero copiare molti pezzi di testo da un file ad un altro, il passare da un file all'altro e lo scrivere il file destinazione richiede un mucchio di tempo. Per evitare ciò si può copiare ogni pezzo di testo entro un registro. Un registro è un posto dove Vim conserva del testo. Per ora useremo dei registri chiamati da a sino a z (in seguito si scoprirà che ne esistono altri). Copiate una frase nel registro f (f per First):
"fyas
Il comando "yas" copia (yank) una frase, come visto prima. "f indica a Vim quale parte del testo dovrà essere posta entro il registro f. Deve venire prima del comando yank. Ora si copino tre intere linee nel registro l (l per line):
"l3Y
Il numero di linee da copiare può venire anche prima di "l, se necessario. Per copiare un blocco di testo nel registro b (for block):
CTRL-Vjjww
"byNotate che la specifica del registro "b va posta proprio prima del comando "y". Ciò è necessario. Se venisse posta dopo di esso, non funzionerebbe. Ora tre frammenti di testo si trovano entro i registri f, l e b. Aprite un altro file e spostatevi in esso nel punto dove volete porre il testo:
"fp
Anche ora la specifica "f del registro viene prima del comando "p". I registri possono essere incollati in ogni ordine. Ed il testo resterà entro i registri sino a quando non vi verrà copiato qualcosa d'altro. Così lo si potrà incollare tutte le volte che si vorrà. Quando viene cancellato del testo, si può anche specificare un registro. Ciò può essere usato per spostare del testo altrove. Ad esempio, per cancellare una parola (delete-a-word) e scriverla nel registro w:
"wdaw
Come sempre la specifica del registro viene prima del comando di cancellazione (delete) "d". ACCODARE AD UN FILE Se si volessero riunire diverse linee di testo entro un solo file, si potrebbe usare il seguente comando:
:write >> logfile
Verrà scritto il testo del file corrente in coda a "logfile". Così il testo verrà accodato. Ciò eviterà di dover copiare le linee, aprire il log file ed incollarle in esso. Verranno saltati due passaggi. Ma si può accodare soltanto alla fine del file. Per accodare solo alcune linee, si selezionino nel Visual mode prima di scrivere ":write". Nel capitolo 10 saranno spiegati altri modi per selezionare gruppi di linee.
*07.6* Visualizzare un file Talvolta si vuole solo vedere cosa contenga un file, senza volerlo modificare. C'è il rischio di scrivere ":w" senza pensarci e sovrascrivere il file originale inavvertitamente. Per evitare ciò, aprite il file in sola lettura (read-only). Per avviare Vim nel modo readonly, si adoperi il seguente comando:
vim -R file
Su Unix il seguente comando farebbe la stessa cosa:
view file
Il file "file" è ora aperto nel modo read-only. Se si provasse ad usare ":w" si otterrebbe solo un messaggio di errore ed il file non verrebbe sovrascritto. Se si provasse ad effettuare una modifica al file, Vim darebbe il seguente avviso:
W10: Warning: Changing a readonly file
Il cambio però può essere fatto. Ciò permette di formattare il file, per esempio, per poterlo leggere facilmente. Se venissero effettuate delle modifiche ad un file, scordandosi che esso era read-only, si potrebbe comunque tranquillamente scriverlo. Aggiungete al comando un ! per forzare la scrittura. Se si volesse realmente proibire di modificare un file bisognerebbe scrivere così:
vim -M file
Così qualsiasi tentativo di modifica sarà inutile. I file di help sono così, per esempio. Se si prova a modificarli si ottiene questo messaggio di errore:
E21: Non posso fare modifiche, 'modifiable' è inibito
Si può usare l'argomento -M per avviare Vim in sola lettura. Ciò però soltanto sino a quando lo si voglia; questi comandi rimuovono la protezione:
:set modifiable
:set write
*07.7* Rinominare un file Un modo semplice per iniziare a scrivere un nuovo testo è impiegare un file esistente che contenga il più possibile di quanto sia necessario. Ad esempio, si inizi a scrivere un nuovo programma per spostare un file. Sapete già di avere un programma che copia dei file, così iniziate con:
:edit copy.c
Cancellate tutto ciò che non vi è necessario. Adesso dovete salvare il file con un nuovo nome. Il comando ":saveas" serve a ciò:
:saveas move.c
Vim salverà il file con il nome dato ed aprirà quel file. Così la prossima volta che scriverete ":write", Vim salverà "move.c". "copy.c" rimarrà non modificato. Quando volete cambiare il nome del file che avete aperto, ma non salvare il file con il vecchio nome, usate questo comando:
:file move.c
Vim segnerà il file come "not edited". Significa che Vim sa che questo non è il file che era stato aperto. Quando salverete il file potreste ottenere questo messaggio:
E13: File exists (use ! to override)
Ciò vi eviterà di sovrascrivere accidentalmente un altro file.
Capitolo seguente: |usr_08| Dividere le finestre Copyright: si vededere |manual-copyright| vim:tw=78:ts=8:ft=help:norl: Segnalare refusi a Bartolomeo Ravera - E-mail: barrav at libero.it
Generated by vim2html on Tue Oct 12 19:10:57 CEST 2004