103.8 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
103 Comandi GNU e Unix |
Obiettivo: |
103.8 Modifica di file di base |
Lezione: |
1 di 1 |
Introduzione
Nella maggior parte delle distribuzioni Linux, vi
, abbreviazione di “visual”, è preinstallato ed è l’editor standard nell’ambiente shell. vi
è un editor di testo interattivo, mostra il contenuto del file sullo schermo mentre viene modificato. In quanto tale, consente all’utente di spostarsi e di apportare modifiche in qualsiasi punto del documento. Tuttavia, a differenza degli editor visuali dal desktop grafico, l’editor vi
è un’applicazione shell con scorciatoie da tastiera per ogni attività di modifica.
Un’alternativa a vi
, chiamata vim
(vi improved), è talvolta usata come un più moderno sostituto di vi
. Tra gli altri miglioramenti, vim
offre il supporto per l’evidenziazione della sintassi, l’annullamento / ripristino multilivello e la modifica di più documenti. Sebbene più ingegnoso, vim
è completamente retrocompatibile con vi
, il che li rende pressochè indistinguibili per la maggior parte delle attività.
Il modo standard per avviare vi
è di dargli un percorso a un file come parametro. Per passare direttamente a una riga specifica, il suo numero dovrebbe essere indicato con un segno più, come in vi +9 /etc/fstab
per aprire /etc/fstab /
e posizionare il cursore sulla nona riga. Senza un numero, il segno più da solo, posiziona il cursore sull’ultima riga.
L’interfaccia di vi
è molto semplice: tutto lo spazio disponibile nella finestra del terminale è occupato per presentare all’utente un file, normalmente informato come argomento di comando. Gli unici indizi visivi sono una riga a piè di pagina che mostra la posizione corrente del cursore e una tilde ~
che indica dove finisce il file. Ci sono diverse modalità di esecuzione per vi
in cui il comportamento del programma cambia. Le più comuni sono: insert mode e normal mode.
Insert Mode
La insert mode è semplice: il testo appare sullo schermo mentre viene digitato sulla tastiera. È il tipo di interazione che la maggior parte degli utenti si aspetta da un editor di testo, ma non è il modo in cui vi
presenta un documento per la prima volta. Per entrare in modalità di inserimento, l’utente deve eseguire un comando di inserimento in modalità normale. Il tasto Esc termina la modalità di inserimento e torna alla normal mode, la modalità predefinita vi
.
Note
|
Se sei interessato a saperne di più sulle altre modalità di esecuzione, apri :help vim-modes-intro |
Normal Mode
Normal mode — conosciuta anche come command mode — è il modo in cui vi
si avvia di default. In questa modalità i tasti della tastiera sono associati ai comandi per la navigazione e le attività di manipolazione del testo. La maggior parte dei comandi in questa modalità sono tasti univoci. Alcuni dei tasti e le loro funzioni in modalità normale sono:
0
,$
-
Vai all’inizio e alla fine della riga.
1G
,G
-
Vai all’inizio e alla fine del documento.
(
,)
-
Vai all’inizio e alla fine della frase.
{
,}
-
Vai all’inizio e alla fine del paragrafo.
w
,W
-
Salta di parola in parola inclusa la punteggiatura.
h
,j
,k
,l
-
A sinistra, in basso, in alto, a destra.
e
orE
-
Vai alla fine della parola corrente.
/
,?
-
Cerca avanti e indietro.
i
,I
-
Accedi alla modalità di inserimento prima della posizione corrente del cursore e all’inizio della riga corrente.
a
,A
-
Accedi alla modalità di inserimento dopo la posizione corrente del cursore e alla fine della riga corrente.
o
,O
-
Aggiungi una nuova riga e accedere alla modalità di inserimento nella riga successiva o nella riga precedente.
s
,S
-
Cancella il carattere sotto il cursore o l’intera riga e accedi alla modalità di inserimento.
c
-
Cambia i caratteri sotto il cursore.
r
-
Sostituisci il carattere sotto il cursore.
x
-
Elimina i caratteri selezionati o il carattere sotto il cursore.
v
,V
-
Inizia una nuova selezione con il carattere corrente o l’intera riga.
y
,yy
-
Copia (yank) i caratteri o l’intera riga.
p
,P
-
Incolla (paste) il contenuto copiato, dopo o prima della posizione corrente.
u
-
Annulla l’ultima azione.
Ctrl-R
-
Ripeti l’ultima azione.
ZZ
-
Salva e chiudi.
ZQ
-
Chiudi senza salvare.
Se preceduto da un numero, il comando verrà eseguito lo stesso numero di volte. Per esempio, premere 3yy
per copiare la riga corrente più le due seguenti, premere d5w
per eliminare la parola corrente e le seguenti 4 parole e così via.
La maggior parte delle attività di modifica risulta da combinazioni di più comandi. Per esempio, la sequenza di tasti vey
viene utilizzata per copiare una selezione a partire dalla posizione corrente fino alla fine della parola corrente. La ripetizione dei comandi può anche essere usata in combinazioni, quindi v3ey
copia una selezione a partire dalla posizione corrente fino alla fine della terza parola da lì.
vi
può organizzare il testo copiato in registri, consentendo di mantenere contenuti distinti allo stesso tempo. Un registro è specificato da un carattere preceduto da "
e una volta creato viene mantenuto fino alla fine della sessione corrente. La sequenza di tasti "ly
crea un registro contenente la selezione corrente, che sarà accessibile tramite il tasto l
. Quindi, il registro |
può essere incollato con "lp
.
C’è anche un modo per impostare segni personalizzati in posizioni arbitrarie lungo il testo, rendendo più facile passare rapidamente da uno all’altro. I segni vengono creati premendo il tasto m
e quindi un tasto per indirizzare la posizione corrente. Fatto ciò, il cursore tornerà alla posizione contrassegnata quando vengono premuti '
seguito dal tasto scelto.
Qualsiasi sequenza di tasti può essere registrata come macro per l’esecuzione futura. È possibile registrare una macro, per esempio, per racchiudere un testo selezionato tra virgolette doppie. Innanzitutto, viene selezionata una stringa di testo e viene premuto il tasto q
, seguito da un tasto di registro a cui associare la macro, come d
. La riga recording @d
apparirà nella riga a piè di pagina, indicando che la registrazione è attiva. Si presume che del testo sia già selezionato, quindi il primo comando è x
per rimuovere (e copiare automaticamente) il testo selezionato. Il tasto i
viene premuto per inserire due virgolette doppie nella posizione corrente, quindi Esc ritorna alla modalità normale. L’ultimo comando è P
, per reinserire la selezione eliminata appena prima dell’ultimo doppio apice. Premendo di nuovo q
la registrazione viene terminata. Ora, una macro composta dalla sequenza di tasti x
, i
, ""
, Esc e P
verrà eseguita ogni volta che i tasti @d
vengono premuti in modalità normale, dove d
è la chiave di registro associata alla macro.
Tuttavia, la macro sarà disponibile solo durante la sessione corrente. Per rendere persistenti le macro è necessario memorizzarle nel file di configurazione. Poiché la maggior parte delle distribuzioni moderne usa vim come editor compatibile con vi, il file di configurazione dell’utente è ~/.vimrc
. All’interno di ~/.vimrc
, la riga let @d = 'xi""^[P'
imposterà il registro d
alla sequenza di tasti tra virgolette singole. Lo stesso registro precedentemente assegnato a una macro può essere utilizzato per incollare la sua sequenza di tasti.
Comandi dei Due Punti
La modalità normale supporta anche un altro set di comandi vi
: i colon commands. I comandi dei due punti, come suggerisce il nome, vengono eseguiti dopo aver premuto il tasto due punti : in modalità normale. I comandi dei due punti consentono all’utente di eseguire ricerche, salvare, uscire, eseguire comandi della shell, modificare le impostazioni di vi
, ecc. Per tornare alla modalità normale, deve essere eseguito il comando :visual
o il tasto ENTER premuto senza alcun comando. Alcuni dei comandi dei due punti più comuni sono indicati qui (l’iniziale non fa parte del comando):
:s/REGEX/TEXT/g
-
Sostituisce tutte le occorrenze dell’espressione regolare
REGEX
conTEXT
nella riga corrente. Accetta la stessa sintassi del comandosed
, inclusi gli indirizzi. :!
-
Esegui un seguente comando di shell.
:quit
o:q
-
Esce dal programma.
:quit!
o:q!
-
Esce dal programma senza salvare.
:wq
-
Esce dal programma dopo aver salvato.
:exit
or:x
or:e
-
Salva e esce, se necessario.
:visual
-
Torna alla navigation mode.
Il programma standard vi
è in grado di eseguire la maggior parte delle attività di modifica del testo, ma qualsiasi altro editor non grafico può essere utilizzato per modificare i file di testo nell’ambiente shell.
Tip
|
Gli utenti inesperti potrebbero avere difficoltà a memorizzare i tasti di comando di |
Editor Alternativi
Gli utenti che non hanno familiarità con vi
potrebbero avere difficoltà ad adattarlo, poiché il suo funzionamento non è intuitivo. Un’alternativa più semplice è GNU nano
, un agile editor di testo che offre tutte le funzionalità di base per la modifica del testo come annulla/ripristina, colorazione della sintassi, ricerca e sostituzione interattiva, rientro automatico, numeri di riga, completamento delle parole, blocco dei file, file di backup e supporto all’internazionalizzazione. A differenza di vi
, tutti i tasti premuti vengono semplicemente inseriti nel documento in fase di modifica. I comandi in nano
sono dati usando il tasto Ctrl o il Meta tasto (a seconda del sistema, Meta sarà Alt o ⌘).
Ctrl-6
oMeta-A
-
Inizia una nuova selezione. È anche possibile creare una selezione premendo Shift e spostando il cursore.
Meta-6
-
Copia la selezione corrente.
Ctrl-K
-
Taglia la selezione corrente.
Ctrl-U
-
Incolla il contenuto precedentemente copiato.
Meta-U
-
Undo.
Meta-E
-
Redo.
Ctrl-\
-
Sostituisci il testo nella selezione.
Ctrl-T
-
Avvia una sessione di controllo ortografico per il documento o la selezione corrente.
Emacs è un altro editor di testo molto popolare per l’ambiente shell. Mentre il testo viene inserito semplicemente digitandolo, come in nano
, la navigazione nel documento è assistita dai comandi della tastiera, come in vi
. Emacs include molte funzionalità che lo rendono più di un semplice editor di testo. È anche un IDE (integrated development environment) in grado di compilare, eseguire e testare programmi. Emacs può essere configurato come client di posta elettronica, news o RSS, rendendolo un’autentica suite di produttività.
La shell stessa eseguirà un editor di testo predefinito, di solito vi
, ogni volta che è necessario. Questo è il caso, per esempio, quando viene eseguito crontab -e
per modificare cronjobs. Bash usa le variabili di sessione VISUAL
o EDITOR
per trovare l’editor di testo predefinito per l’ambiente shell. Per esempio, il comando export EDITOR = nano
definisce nano
come l’editor di testo predefinito nella sessione di shell corrente. Per rendere questa modifica persistente tra le sessioni, il comando dovrebbe essere incluso in ~/.bash_profile
.
Esercizi Guidati
-
vi
è usato soprattutto come editor per file di configurazione e codice sorgente, dove l’indentazione aiuta a identificare sezioni di testo. Una selezione può essere rientrata a sinistra premendo<
e a destra premendo>
. Quali tasti devono essere premuti in modalità normale per far rientrare la selezione corrente di tre passaggi a sinistra? -
È possibile selezionare un’intera riga premendo
V
nella normal mode divi
. Tuttavia, è incluso anche il carattere di fine riga. Quali tasti dovrebbero essere premuti in normal mode per selezionare dal carattere iniziale fino al carattere di nuova riga, ma escluso? -
Come dovrebbe essere eseguito
vi
nella riga di comando per aprire~/.bash_profile
e saltare direttamente all’ultima riga? -
Quali tasti dovrebbero essere premuti nella normal mode di
vi
per eliminare i caratteri dalla posizione corrente del cursore fino al successivo punto?
Esercizi Esplorativi
-
vim
permette di selezionare blocchi di testo con larghezza arbitraria, non solo sezioni con intere righe. Premendo Ctrl+V in normal mode, viene effettuata una selezione spostando il cursore su, giù, sinistra e destra. Utilizzando questo metodo, come verrebbe cancellato un blocco che inizia dal primo carattere nella riga corrente, contenente le successive otto colonne e cinque righe di testo? -
Una sessione
vi
è stata interrotta da un’interruzione di corrente imprevista. Quando si riapre il file,vi
chiede all’utente se desidera recuperare lo swap file (una copia automatica fatta davi
). Cosa deve fare l’utente per eliminare il file di scambio? -
In una sessione
vim
, una riga era stata precedentemente copiata nel registrol
. Quale combinazione di tasti registrerebbe una macro nel registroa
per incollare la riga nel registrol
immediatamente prima della riga corrente?
Sommario
Questa lezione copre l’editor di testo standard per l’ambiente shell Linux: l’editor vi
. Sebbene intimidisca l’utente non familiare con la riga di comando, vi
ha caratteristiche che lo rendono una buona scelta per l’editing di testi tecnici e non. La lezione segue i seguenti passaggi:
-
Utilizzo di base di
vi
e funzioni utili. -
Cos’è
vim
— ilvi
migliorato — e altri editor alternativi. -
Come definire l’editor di testo predefinito nell’ambiente shell.
I comandi e le procedure trattate erano:
-
Editor
vi
e la sua versione miglioratavim
. -
Modifica del testo di base in
vi
. -
Editor alternativi
emacs
enano
.
Risposte agli Esercizi Guidati
-
vi
è usato soprattutto come editor per file di configurazione e codice sorgente, dove l’indentazione aiuta a identificare sezioni di testo. Una selezione può essere rientrata a sinistra premendo<
e a destra premendo>
. Quali tasti devono essere premuti in modalità normale per far rientrare la selezione corrente di tre passaggi a sinistra?La sequenza
3<
, indica tre rientri a sinistra. -
È possibile selezionare un’intera riga premendo
V
nella normal mode divi
. Tuttavia, è incluso anche il carattere di fine riga. Quali tasti dovrebbero essere premuti in normal mode per selezionare dal carattere iniziale fino al carattere di nuova riga, ma escluso?La sequenza
0v$h
, che significa0
(vai all’inizio di una riga),v
(inizio selezione carattere),$
(vai alla fine della riga) eh
(torna indietro di una posizione). -
Come dovrebbe essere eseguito
vi
nella riga di comando per aprire~/.bash_profile
e saltare direttamente all’ultima riga?Il comando
vi + ~/.bash_profile
aprirà il file e posizionerà il cursore sulla sua ultima riga. -
Quali tasti dovrebbero essere premuti nella normal mode di
vi
per eliminare i caratteri dalla posizione corrente del cursore fino al successivo punto?La sequenza
dt.
, che significad
(inizio cancellazione),t
(salta al carattere successivo) e.
(caratere punto).
Risposte agli Esercizi Esplorativi
-
vim
permette di selezionare blocchi di testo con larghezza arbitraria, non solo sezioni con intere righe. Premendo Ctrl+V in normal mode, viene effettuata una selezione spostando il cursore su, giù, sinistra e destra. Utilizzando questo metodo, come verrebbe cancellato un blocco che inizia dal primo carattere nella riga corrente, contenente le successive otto colonne e cinque righe di testo?La combinazione
0
,Ctrl-V
e8l5jd
selezionerà ed eliminerà il blocco corrispondente. -
Una sessione
vi
è stata interrotta da un’interruzione di corrente imprevista. Quando si riapre il file,vi
chiede all’utente se desidera recuperare lo swap file (una copia automatica fatta davi
). Cosa deve fare l’utente per eliminare il file di scambio?Premere
d
quando richiesto davi
. -
In una sessione
vim
, una riga era stata precedentemente copiata nel registrol
. Quale combinazione di tasti registrerebbe una macro nel registroa
per incollare la riga nel registrol
immediatamente prima della riga corrente?La combinazione
qa"lPq
, che significaq
(avvia la registrazione della macro),a
(assegna registroa
alla macro),"l
(seleziona il testo nel registrol
),P
(incolla prima della riga corrente) eq
(fine della registrazione macro).