Slides Corso Linux - Editor di Testo: VI

Download Report

Transcript Slides Corso Linux - Editor di Testo: VI

LugRoma3.org
VI
Alberto Massidda
Ci serve un editor di testo?
● Cambiare una semplice configurazione ?
○
$ echo “1” > /proc/sys/net/ipv4/ip_forward
● Aggiungere una linea alla fine di un file ?
○
$ echo “deb http://packages.dotdeb.org wheezy all” >>
/etc/apt/sources.list
● Configurare /etc/apache2/apache2.conf ?
○
Ci serve decisamente un editor di testo =)
Editor wars: VI vs EMACS
VI
● minimalista
● modale
● ambiente testuale
EMACS
● massimalista
● tradizionale
● GUI & menu
Entrambi hanno una curva d’apprendimento alta
Non mi è mai mancato nulla con...
●
●
●
●
●
●
nano
gedit
kate
notepad++
openoffice
Google Docs
-_-’
Perchè imparare ad usare VI?
E' un editor prestante
○
○
Compiti complessi con pochi tasti
Supporto per le regex nelle search and replace
E' presente in ogni sistema certificato POSIX
○
come MacOs X, Solaris, BSD, HP-UX, AIX… e Windows con SFU
E' il miglior investimento dopo il touch-typing
Aumenta la produttività
○
quando siete padroni dell'editor, l'attività di scrittura richiede meno
tempo, lasciandovi più tempo per riflettere
Caveat
● VI: /V-I/, not, /vi:/, never, /siks/, n.
○ [from ‘Visual Interface’]
● VI != VIM
○ VI è un vecchio editor di 30 anni fa, scarno e senza
tutti i comandi a cui siamo abituati
○ oggi tutti usano VIM (VI iMproved), in alias a VI
○ aptitude install vim prima di spaccare tutto
Accensione
you@yourhost$ vi
#Apre l’editor col MOTD (scompare al primo insert)
you@yourhost$ vi file
#Crea file in memoria, se non esiste
you@yourhost$ vi file1 file2 …
# Apre a catena, partendo dal primo
Convenzione
“<x>“ significa “Premere il tasto 'x'“
Provate:
<i>1 iz da haxx0r<Enter>lu1z<Esc><:><w><q><Enter>
Poi:
you@yourhost$ cat file
Modalità di lavoro
● Command mode
○
○
È la modalità default. Ogni tasto premuto è un comando (taglia, copia,
incolla, undo, vai, etc..). Ci si torna sempre con <Esc>.
Occhio: non vi vengono mostrati i caratteri che digitate.
● Insert mode
○
○
Serve a scrivere il testo. Ci si accede con <i>.
La riconoscete perchè compare --INSERT-- in basso a sinistra.
● Directive mode
○
○
È l’equivalente delle voci “menù” su interfaccia grafica. Ci si accede
con <:>.
Potete vedere i comandi digitati.
Come usare le modalità
L’idea è che, quando osservate il testo, siete
nella modalità per spostarne e/o cancellarne
porzioni, command.
Quando volete scrivere, entrate in modalità
insert. Appena finito di scrivere, uscite subito
dalla modalità e vi rimettete a guardare il testo.
Quando volete fare operazioni sul file, come
salvare ed uscire, usate la modalità directive.
Comandi base command
i
entra in insert e comincia a scrivere testo
Esc
esce dalla modalità corrente (insert o directive) e ritorna a command
yy
copia la linea corrente (yank)
dd
taglia la linea corrente (delete)
cc
come dd + entra in insert mode (la riga non collassa, ma si svuota)
p
incolla (paste)
u
undo (premere più volte per continuare a tornare indietro)
Ctrl+R
redo (idem come sopra)
/
cerca (usate n e N per scorrere i match, come in less), /\c per no case
Comandi base directive
:w
salva
:q
chiude il buffer corrente (se è l’unico, esce da VI)
:q!
chiude senza salvare
:wq
salva e chiudi
:x
salva e chiudi
:7
vai alla linea 7
:n/N
se avete aperto più file, passa al prossimo/precedente
È tutto
La lezione base è finita.
Potreste vivere felici così, avendo imparato tutto quello che
un editor qualunque (nano, ad esempio) potrebbe offrirvi.
Heavy metal
Comandi avanzati command
Tagliare e copiare a mucchi
y4
copia la linea corrente + 4 linee successive (“y1” copia 2 linee)
d4
taglia la linea corrente + 4 linee successive
c4
come d4 + entra in insert mode
Comandi avanzati command
Tagliare e copiare per parole: yw/dw/cw
y4w
copia 4 parole, senza contare gli spazi
d4w
taglia 4 parole
c4w
taglia 4 parole e poi entra in insert mode
Comandi avanzati command
Tagliare e copiare fino a
yfx
copia fino al carattere x (“yf(“ copia fino alla parentesi)
dfx
taglia fino al carattere x
cfx
taglia fino al carattere x e poi entra in insert mode
Muoversi bene
gg
vai all’inizio del file
G
vai alla fine del file
[{
jump alla parentesi graffa aperta che contiene il blocco in cui sei
]}
jump alla parentesi graffa chiusa che contiene il blocco in cui sei
mx
pone un marker di posizione cursore nella variabile x (a-z)
’x
vai al marker x
Tanto per capire che ci fate
function veryLongFunction(int wrongArgName){
//un milione di linee di codice…
return true;
}
●
Dovete cambiare wrongArgName: vi mettere all’inizio della variabile e date
<cw>: wrongArgName sparisce e vi ritrovate in insert mode
●
Dovete eliminare tutto il codice della funzione: con <]}> andate alla fine del
blocco; su return date <ma>; tornate con <[{> e, subito sotto il nome
funzione, date <d’a>: cancellate tutto a partire da dove siete fino al marker
“a”
Concatenazione
In VI si possono concatenare i comandi
.
ripeti l’ultimo comando eseguito con successo
Con <dd> e poi <p> taglio e incollo la riga; premendo ripetutamente <.> continuo
a reincollare la riga.
Nota:
<i>tons of code<Esc>
è un comando a sè: se ridò <.>, riscrive tutto quello che c’era tra <i> ed <Esc>
Comandi avanzati directive
:split
apre una finestra (buffer). Ci si sposta con <Ctrl+w> e poi ↑ o ↓
:vsplit
apre un buffer verticale. Ci si sposta con <Ctrl+w> e poi ← o →
:e
apri un file nel buffer corrente (per aprire un altro file senza uscire)
:!comando
esegui un comando shell
:%!comando passa il buffer ad un comando e sovrascrive l’output sul buffer
Intervalli su directive
:%
comprende tutto il file
:x,y
tra la posizione, in righe, x e y
:.
posizione corrente
Tanto per capire che ci fate (2)
1. Avete un elenco disordinato.
2. Date <:%!sort>
a. VI prende il buffer corrente
b. lo manda al comano bash “sort”
c. rimpiazza il buffer con l’output di sort
3. Il vostro file è ora ordinato
Regexp
s
:intervallo /pattern/sostituzione/scope
:%s/regexp/subs/
search-replace sulla prima occorrenza di regexp
:%s/regexp/subs/g
idem, ma non si ferma alla prima occorrenza di regexp
:1,100s/regexp/subs/g
idem, tra le linee 1 e 100
:.,’as/regexp/subs/g
idem, tra la posizione attuale e il marker a
Nota:
VI usa le Basic RE.
Includete “\v” prima del pattern per usare le Extended RE
Bonus
x=y
applica l’auto indent nell’intervallo tra x e y
<gg=G>
Il vostro codice è ora indentato
In chiusura
Non si impara studiando.
Si impara con la pratica.
Padroneggiando l’editor, arriverete a concepire
comandi complessi in poco tempo; a quel punto
scoprirete di non aver più bisogno di un IDE per
aprire un file e lavorarci seriamente su.
C’è molto di più
QA