Mòdul 3
Serveis de xarxa amb GNU/Linux
Exercici 12345

 
L'editor VI

Introducció

Com a administradors sovint ens veurem en la necessitat de crear o modificar el contingut d'alguns fitxers del nostre sistema de manera eficaç. És aquí on entra en joc l'editor de fitxers 'Vi' com el més estandaritzat i extès editor en el món del Unix.

Totes les personalitzacions d'aplicacions, configuracions de programes, scripts que realitzaran tasques determinades en el nostre sistema, .... i tot el que, gràcies a les característiques d'un sistema obert que ens permet fer i adequar a les nostres necessitats, tindran el denominador comú de l'edició ' vi '. Lògicament en aquest capítol veurem una part (la més útil al nostre parer) del vast conjunt d'ordres i funcions que contempla l'editor vi. 

Un dels primers aspectes a conèixer és que en el moment en què ens disposem a treballar amb l'editor 'vi' en un arxiu determinat, l'original d'aquest es manté inalterat, ja que es crea automàticament una còpia que serà en la que treballarem de veritat. Aquesta còpia residirà en un buffer de memòria temporal que només tindrà l'efectivitat de substitució si ens disposem a gravar els canvis produïts amb una ordre d'escriptura (w).
L'editor ' vi ' té tres mode possibles de treball:

El mode comandament s'activa en el mateix moment d'entrar a l'editor i permet l'execució de les diferents funcions d'edició d'un arxiu mitjançant l'assignació de cada una d'elles a una tecla determinada (més endavant ho veurem amb més detall).

El mode text és aquell que permet la introducció del propi text pla dins l'arxiu. En aquest estat les tecles perden la seva funció especial de comanda per passar a exercir la de simple entrada de caràcters. Sol venir precedit de lletres comandament com la 'i', la 'a', i d'altres ordres que comentarem en aquest capítol. Podrem tornar al mode comandament amb la tecla 'Esc' o amb les fletxes de desplaçament del teclat. 

La línia d'ordres a la que s'accedeix des del mode de comandament mitjançant els dos punts ( : ) permet l'execució d'ordres referents a la totalitat de l'arxiu. Des d'aquí podrem gravar l'arxiu, posar-li nom, sortir de l'editor, forçar gravacions a fitxers que només siguin de lectura, la substitució de cadenes dins del fitxer, ...

L'entrada a l'editor es pot fer de dues maneres:
vi arxiu : aquí s'edita l'arxiu indicat, que pot existir o no. Si existeix entrarem a l'edició mostrant-nos el seu contingut, i si no existeix n'obrirem un en blanc que ja tindrà aquest nom en cas que el vulguem gravar a la sortida.
vi : en aquest cas entrarem a l'editor vi en un arxiu nou. Si optéssim per gravar l'edició que hem fet hauríem d'especificar-li un nom a la sortida ( :w nom )

Seguidament desglossarem per temàtica i actuació els mode, comandes i operacions més comunes de l'editor vi.
 
 

Funcions associades a moviments del cursor
 
j Desplaçament d'una línia cap avall
k Desplaçament d'una línia amunt
h Ens desplacem un caràcter a l'esquerra
l Ens desplacem un caràcter a la dreta
M Ens situem a la meitat del fitxer
b Mou el cursor al principi de cada paraula (retrocedint en el text)
e Mou el cursor al final de cada paraula (avançant en el text)
0 El número 0 ens situa al principi de la línia on estem situats
$ Desplacem el cursor al final de la línia
w Avancem de paraula en paraula
G Ens situem al principi de l'última línia del fitxer
1G Ens desplacem a l'inici de l'arxiu
nG Ens desplacem fins la línia 'n' del fitxer
Ctrl+d Avança mitja pàgina
Ctrl+u Retrocedeix mitja pàgina
Ctrl+b Retrocedeix una pàgina sencera
Ctrl+f Avança una pàgina sencera

Aquestes tecles de moviment i posicionament del cursor també es poden utilitzar juntament amb els operadors principals d'esborrar (d), copiar (y) i canviar (c). Així per exemple la comanda d3G esborrarà totes les línies que hi ha des de la que estem situats fins la línia 3.
 
 

Introducció de text

Aquestes funcions associades activen el mode text.
 
a Permet afegir text a continuació del cursor
A Afegeix text al final de la línia on estem
i Insereix text a la posició anterior al cursor
o Obre una línia per sota del cursor
O Obre una línia per sobre del cursor
rx Reemplaça el caràcter actual pel caràcter 'x' indicat
R Reemplaça el text

 

Esborrat de text

Per accedir a aquesta funció haurem d'activar el mode comandament (per sortir del mode text) pitjant la tecla 'Esc' o bé amb les fletxes del teclat.
 
x Esborra el caràcter situat a la posició del cursor (com la tecla "Supr")
X Esborra el caràcter anterior al cursor (com la tecla 'Backspace)
nx Esborra 'n' caràcters
dw Esborra des del cursor fins al començament de la següent paraula
dd Esborra la línia sencera
d$ Esborra des del cursor fins al final de la línia
ndd Esborra 'n' línies
d) Esborra la resta de la frase a partir del cursor
d( Esborra des del cursor fins al principi de la frase

 

Desfer el canvis
 
u Desfà l'última acció
U Desfà tots els canvis efectuats en una línia
. Repeteix l'última acció que hem efectuat

 

Desplaçament de text
 
yy Copia una línia i la col·loca al búffer
nyy Copia 'n' línies (comptant l'actual)
yw Copia una paraula (els caràcters que hi hagi des del cursor fins que s'acabi)
p Col·loca després del cursor una còpia de l'últim copiat o esborrat
P Col·loca la còpia abans del cursor
"cyy Copia una línia i la posa al búffer 'c' (pot ser qualsevol lletra de a-z)
"cp Col·loca després del cursor una còpia del contingut del búffer 'c'
cc Canvia la línia completa (previ esborrat d'ella) per al que vulguem introduir 

 

Cerca i substitució

Tant la cerca com la substitució de text s'han d'executar sota la línia de comandes. En el cas de la cerca s'indica directament mitjançant el caràcter '/'.
La resta dels casos s'activaran amb els dos punts (:).
 
/patró Cerca la següent aparició del patró
?patró Cerca l'anterior aparició del patró
n Cerca la següent coincidència
N Cerca l'anterior coincidència

En el cas de la substitució s'haurà d'activar primer la línia de comandes amb els dos punts.
La construcció d'una substitució segueix l'esquema :
:1,$ s/cadena_a_cercar/nova_cadena/g
La primera part (:1,$) ens indica que la substitució tindrà lloc des de la línia 1 fins l'última del fitxer (tot l'arxiu). La segona part ens indica que serà la substitució (s) d'una cadena determinada existent al fitxer per una nova cadena. Si haguéssim de substituir algun caràcter especial (*, /, // ...) ho hauríem d'indicar amb una contrabarra (\) davant de cada caràcter especial.
La 'g' del final ens dóna el caire de globalitat perquè substitueixi totes les coincidències, de no indicar-ho només canviaria la primera de cada línia en cas d'haver-la.
Si no volguéssim fer la substitució en tot el fitxer i ho volguéssim en unes línies determinades, per exemple de la 23 a la 29, ho farem així, :23,25 s/hola/adéu/g.
 

Operacions des de la línia d'ordres
 
:n Ens situem al principi de la línia 'n'
:w arxiu Gravem els últims canvis efectuats guardant-ho amb el nom arxiu
:n,m w arxiu Guarda les línies de la 'n' a la 'm' a l'arxiu indicat
:wq Grava els canvis i surt de l'editor
:wq! Força el conjunt de gravada i sortida (encara que sigui un fitxer de lectura)
:x! Equival·lent a la wq!
:q Abandona l'editor
:q! Abandona l'editor descartant els últims canvis
:e arxiu Edita l'arxiu indicat
:e! Reedita l'arxiu descartant els canvis
:r arxiu Insereix l'arxiu indicat dins de l'actual
:se nu Enumera les línies del fitxer que estem editant
:se nonu Desactiva la numeració de les línies