|
|
Macro
Se viene settato correttamente, 'vi' può eseguire una serie di
comandi con poche parole chiave. Questo può essere raggiunto in
due modi:
- Il corpo della macro può essere messo in un registro, ad
esempio 'a', e poi è possibile eseguire la macro creata.
Esempio:
digitare la seguente macro come testo su una linea nuova
in 'vi', utilizzando un INSERT MODE:
ameow^V^[
(il tasto ESC deve essere digitato dopo un ^V, che evita per
una sola volta che questo tasto faccia uscire da INSERT MODE).
Ora, con il cursore posizionato su 'a', eseguire uno yank
del testo in un buffer, digitando:
"aY$ oppure "ayy$
che corrisponde al comando di memorizzazione nel buffer
dalla linea corrente fino alla fine.
Successivamente, da COMMAND MODE sarà sufficiente digitare
il comando:
@a
(dove 'a', nell'esempio sopra riportato, è il nome del
buffer utilizzato) per eseguire la macro contenuta nel
buffer 'a'; in questo modo viene eseguito un append della
parola 'meow' al testo ove si è posizionati.
- È possibile definire una macro utilizzando il comando 'map',
per richiedere a 'vi' di considerare un certo tasto (carattere
o tasto funzione) come una sequenza di tasti.
L'operazione di map risulta essere tipicamente come segue:
:map carattere sequenza
Si noti che se la "sequenza" comprende un newline, questo deve
essere prefissato da ^V.
Esempio:
:map[!] lhs rhs<CR>
dove:
- 'lhs': deve essere una parola chiave, può essere un
carattere oppure una function key.
Esempi:
caratteri : a, b, c, A, B, ^, >
control keys : ^A, ^B (digitare ^V per l'escape prima
di digitare ^A, ecc.)
function keys : sono disponibili #[0-9] (corrispondono
alle key F0, F1, ecc. su tutte le
tastiere)
- 'rhs': deve essere una sequenza di caratteri non più lunga
di 100 caratteri.
Esempio:
I/*^[$a*/^[^M
inserisce un '/*' all'inizio della linea ed un '*/'
alla fine della stessa (trasforma un qualsiasi codice
C in un commento).
- '!': questa opzione rende attiva la key in INSERT MODE.
Esempi:
:map q :wq^VRETURN
se da COMMAND MODE si richiede 'q', avremo
l'aggiornamento ed il rilascio di 'vi'; poichè
'map' è una direttiva, va chiusa da un RETURN
in aggiunta a quello eventuale specificato in "sequenza"
:map p asono io ^VESC
se da COMMAND MODE si richiede 'p', avremo l'inserimento
delle parole "sono io"
:map V k/\/\*/
questo comando definirà "V" in maniera che ricerchi
'/*' e '*/' e li cancelli (tolga i commenti da una linea
di sorgente scritto in linguaggio C)
:map #2 :!budvisor^M
questo comando, che verrà scritto nel file '.exrc',
permette di richiamare il programma "budvisor" premendo
la key F2
Le macro vengono dimosse con la direttiva "unmap".
Esempio:
:unmap lhs
Per avere un elenco di tutte le macro definite per il COMMAND MODE,
digitare:
:map
Per avere un elenco di tutte le macro definite per l'INSERT MODE,
digitare:
:map!
|
|