Sistema Operatiu Linux
Unitat: L'editor de text vi
Contingut:
Introducció a l'editor
vi
Edició bàsica
Buffers
Finestres
Opcions. Inicialització
i configuració de l'editor
L'ajuda de vi
|
Introducció
a l'editor vi
|
-
En Linux existeixen molts editors de text disponibles, com ara l'ex,
l'ed, el vi o l'emacs. L'editor estàndard d'Unix
System V és el vi.
-
L'editor vi està pensat per a l'ús dels programadors
i no pas com a procés de text d'ús general orientat a usuaris.
La seva interfície es poc amigable. En el seu disseny s'ha privilegiat
la eficiència i no pas l'aspecte. Principalment l'usarem per a escriure
scripts (programes del shell) i programes en 'C'.
-
vi funciona en qualsevol sistema Unix-Linux en modus text. En Linux
Red Hat hi ha una versió evolucionada anomenada vim. Quan
treballem en l'entorn de finestres (X-Windows) serà més eficient
traballar amb l'editor emacs.
-
En principi vi sembla un editor molt senzill, peró descobrirem
que té un munt de possibilitats i opcions que no podrem estudiar
al complert per manca de temps.
-
Per a utilitzar adecuadament un procés de text hem de tenir correctament
configurat el tipus de terminal que usem. Aixó ho fem amb la variable
d'entorn TERM. Comproveu el seu valor:
$ echo $TERM
linux
Si TERM no conté la paraula linux, aleshores
ho arreglem:
$ TERM=linux
$ export TERM
En entorns UNIX TERM haurà de contindre la paraula
ansi.
-
Quan treballem en vi sobre un cert fitxer aquest es manté
inalterat ja que es crea una còpia en memòria sobre la que
es treballa. Només si al sortir donem l'ordre de grabació
es modificarà realment el fitxer original.
Com entrar a l'editor
$ vi
- Entra sense nom de fitxer. Escriurem text i donem el nom
del fitxer al sortir.
$ vi fitxer
- Edita el fitxer. Si no existeix, el crea.
$ vi fitxer1 fitxer2
- Obra els dos fitxers. Primer mostra fitxer1. Quan
tanquem fitxer1 mostra fitxer2. Si els volem editar els dos
alhora caldrà crear finestres independents per cadascun (veure l'apartat
de finestres més endavant).
$ vi +10 fitxer
- Obra el fitxer i es sitúa en la línia 10. És
útil quan estem compilant el fitxer del text d'un programa i sabem
que en la línia 10 hi ha un error.
$ vi + fitxer
- Obra el fitxer i es sitúa en la última línea.
$ vi -r fitxer
- Obra el fitxer en modus "recuperació". Útil
només si el sistema s'ha penjat mentre modificavem el fitxer i volem
recuperar tot el posible a partir de la últimacòpia de seguretat
que ha fet el vi.
Modus de funcionament
-
Hi han dos modus de funcionament: el modus ordre i el el
modus edició.
-
El modus ordre permet introduir tot tipus d'ordre dirigides a l'editor,
com ara esborrar líneas, gravar els canvis, sortir de l'editor,
etc. Quan entrem en vi, sempre estem en modus ordre. En modus ordre
no podem introduïr text, només admet comandaments.
-
El modus edició permet treballar amb el text del fitxer. Algunes
ordres es poden executar directament des del modus edició combinant
la tecla CTRL amb altres.
-
Inicialment entrem al vi en modus ordre, pasem a modus edició per
a treballar amb el text i després conmutem entre els modus ordre
i text per fer modificacions. Finalment quan sortim del vi ho farem
en modus ordre.
Tipus d'ordres
-
Totes les ordres s'ha de introduïr en el modus ordre.
-
Hi han dos tipus d'ordres: les ordres de l'editor (com ara sortir del vi)
i els comandaments d'edició (com ara esborrar una línea o
una paraula).
-
Les ordres de l'editor sempre comencen per dos punts (:) i es mostren en
l'ùltima línea de la finestra de l'editor. Per exemple :q
per sortir del vi.
-
Els comandaments d'edició per defecte no es mostren: simplement
tecleixem el comandament i vi l'executa directament. Per exemple
per esborrar la línea de text en la qual està el cursor piquem
dos cops la lletra d (dd).
Canvi de modus de funcionament
-
Per canviar de modus ordre a modus edició premem la lletra i
(apareix
a l'última línea de la pantalla la paraula insert).
Podem aleshores introduïr text.
-
Per canviar de modus edició a modus ordre premem la tecla ESC
(escape). Desapareix la paraula insert de la pantalla.
Sortir de vi
-
Sortirem sempre des del modus ordre. Les opcions més interesants
són:
:q
- Surt del vi sempre i quan no s'hagi modificat el fitxer
:q!
- Surt del vi sense grabar els canvis
:wq
- Guarda el fitxer i surt. El fitxer ha de tenir un nom assignat
abans de sortir. Si el fitxer es nou i no té encara nom, primer
l'haurem de donar-ne un abans de sortir. Per exemple:
:w fitxer
:q
Executar ordres del shell sense sortir de vi
-
Des del modus ordre del vi podem executar programes i ordres del shell.
Per exemple per veure els fitxers del directori actual des del vi escribim:
:!ls
-
També podem sortir temporalment al shell amb l'ordre :bash
-
Per tornar al vi després de haber sortit temporalment fem $ exit
Pràctica: Introducció a
vi
Moviment per dintre del text
-
En modus edició podem fer servir les fletxes de moviment estàndard
del teclat
-
En modus ordre tenim, per exemple (no donem totes les possibilitats), les
següents:
j moure una
línea aball
k "
" " amunt
0 anar al principi
de la línea actual
$ anar al final de
la línea
G anar al final del fitxer
1G anar al principi del fitxer
nG anar a la línea "n" del fitxer.
Exemple: 10G anirà a la línea 10
Suprimir caràcters
-
En vi quan suprimim caràcters, paraules o líneas el
que fem es pasar-los a un buffer d'edició, es a dir que de fet no
els esborrem sinó que els "retallem".
-
En modus edició, premem la tecla Supr.
-
En modus ordre tenim el comandament x que esborra el caràcter
on està el cursor. Podem esborrar un número de caràcters
indicant-lo abans. Per exemple 4x esborra quatre caràcters.
Suprimir paraules (modus ordre)
-
Amb el cursor situat en la primera lletra de la paraula premem dw
(delete word). Si la paraula acaba en un signe de puntuació
(coma, punt i coma, punt, etc) i també el volem esborrar junt amb
la paraula premem dW
-
Podem suprimir un número de paraules. Per exemple per suprimir 3
paraules premem 3dw
Suprimir líneas (modus ordre)
-
Situem el cursor en qualsevol punt de la línia i premem dd.
Per esborrar un nombre de líneas premem 3dd (esborrar
3 líneas).
Copiar text (modus ordre)
-
Per copiar la línea actual al buffer premem yy
-
Per copiar "n" líneas començant per l'actual premem nyy
-
Per copiar desde la posició del cursor fins el final de la paraula
premem yw
Moure text (modus ordre)
-
Primer copiem o esborrem el text, el qual en els dos casos quedarà
copiat en el buffer d'edició, i després el recuperem amb
el comandament p (paste).
Cerca i substitució de text (modus ordre)
-
Per buscar la propera aparició de la paraula "exemple" premem /exemple
-
Per seguir buscant la següent aparició premem n
-
Per buscar l'anterior aparició de la paraula "exemple" premem ?exemple
-
Per seguir buscant l'anterior aparició premem N
-
Per sustituir text utilitzem un ordre de l'editor (recordem que les ordres
de l'editor comencen per dos punts) amb la següent sintaxi:
:inici,final s/text1/text2/opcions
- inici és la primera línea del fitxer des d'on comencem
a executar l'ordre
- final és la ùltima línea del fitxer que
quedarà afectada per l'ordre
- s és l'ordre de substitució de text
- text1 és el text a buscar i reemplaçar
- text2 és el text que reemplaça a text1
- opcions són paràmetres optatius. El més
important és el paràmetre g (la g de global) que indica
que efectúe totes les substitucions. Cas de no indicar-lo només
efectuaría una substitució per cada línia del text.
- Exemple: per substituir la paraula gener per febrer
des de la línia 10 fins la 20 fem
:10,20 s/gener/febrer/g
- Per fer el mateix en tot el fitxer escriurem
:1,$ s/gener/febrer/g
Inserir una línea
-
En modus edició premem Intro al principi o al final d'una
de les líneas existents.
-
Em modus ordre premem la lletra o
Repetició de pulsacions de tecles
-
Si escribim unes lineas (en modus edició) i després les volem
repetir, pasem a modus ordre (amb ESC) i premem . (punt) amb la
qual cosa vi repetirà tot el que hem escrit anteriorment.
Cancel.lació i repetició de l'ùltima acció
(modus ordre)
-
Premem la lletra u (undo, desfer acció).
-
Per desfer els canvis efectuats només en una línea premem
U
-
Per repetir l'ùltima acció premem . (punt)
Pràctica: Edició bàsica
en vi
-
A banda del buffer estàndard d'edició (recordem, buffer:
zona de memòria reservada per un programa per realitzar certes operacions
habituals) vi en disposa d'altres: els buffers numerats i
els buffers alfabètics. Tots ells s'accedeixen des
del modus ordre.
-
Els buffers numerats van de l'u al nou. Formen un històric del buffer
estàndard d'edició. Quan copiem alguna cosa en el buffer
d'edició el seu contingut anterior no es perd sinò que es
pasa al buffer numerat 1. Si tornem a copiar un altre cosa en el d'edició
alehores el contingut d'u es pasa al buffer dos i el d'edició es
pasa a l'u. Etc.
-
Per recuperar el contingut del buffer n premem, en modus ordre,
np
-
Si només volem veure el contingut del buffer n primer premem
np (copiar) i després u (desfer)
-
Els buffers alfabètics són d'ús particular de l'usuari.
Hi han 26, des de l'a fins el z.
-
Per accedir a un buffer tenim la següent sintaxi: "xOrdre
- "
és el prefix que indica que accedim a un buffer alfabètic
- x
és la lletra que identifica al buffer
- ordre indica qué és el que
fem amb el buffer
-
Exemples d'ús dels buffers alfabètics:
- Per copiar (ordre Y) la línia actual al buffer a premem
"aY
- Per recuperar (ordre p) el contingut del buffer b premem "bp
- Per esborrar la línia actual (ordre dd) i copiar-la
en el buffer c premem "cdd
- Per esborrar la paraula actual (ordre dw) i copiar-la en el
buffer z premem "zdw
-
Podem dividir la finestra de l'editor en dues o més subfinestres
que poden mostrar el mateix fitxer o bé diferents fitxers. És
útil quan volem copiar part del contingut d'un fitxer en un altre
(per exemple per aprofitar una part d'un programa en un altre). Habitualment
no treballarem amb més de dues subfinestres.
-
Els comandaments de finestres s'accedeixen amb la combinació de
tecles CTRL simultàniament amb la lletra w ( de windows,
finestra en anglés). Abreviadament: CTRL + w (el signe +
no es part del comandament, simplement indica que hem de prèmer
les dues tecles simultàniament).
-
Cada comandament tindrà, doncs, la sintaxi CTRL + w comandament
-
Per dividir la finestra actual en dues subfinestres idèntiques premem
CTRL + w s (la s vé de split, partir
en anglés)
-
Per anar a la finestra superior premem CTRL + w j
-
Per anar a la finestra inferior premem CTRL + w k
-
Per tancar la finestra actual fem com si sortisim del vi, premem
:q o bé :wq o bé :q!
-
Per iniciar vi amb dues finestres: $ vi -o 2
-
Per editar un fitxer anomenat text en la finestra actual premem :e text
Pràctica: buffers i finestres de vi
|
Opcions.
Inicialització i configuració de l'editor
|
-
vi permet personalitzar el seu comportament modificant el valor de les
seves variables d'entorn. Algunes d'aquestes variables són de tipus
lògic: estàn activades o desactivades. Per canviar el valor
de les variables tenim el comandament :set variable
-
Per veure totes les posibles opcions (hi han moltes!) premem :set all
-
Amb set all es mostren totes les opcions numèriques, de text i només
les lògiques que estiguin activades
-
Per activar una opció lògica premem :set opció
-
Exemple: el modus edició s'indica per la paraula Insert degut
a que la variable showmode està activada.
- Per desactivar-la premem :set noshowmode
- Per tornar-la a activar premem :set showmode
-
Una opció interesant és la que activa la visualització
dels comandaments d'edició que per defecte no es mostren mentre
els premem. Per activar la visualització fem :set showcmd
i per desactivar-la fem :set noshowcmd
-
Els canvis fets amb set no són permanents sinó que per el
contrari només valen per la sessió actual d'edició.
En surtir del vi es perden.
-
Si volem que una opció duri tota la nostre sessió (des de
l'inici de la nostra connexió fins que fem exit per sortir) la definirem
en la variable d'entorn EXINIT. Per exemple:
$ EXINIT='set showcmd'
$ export EXINIT
-
Amb EXINIT les opcions es perden quan ens desconectem del sistema.
-
Quan volem que les opcions siguin permanents, o bé tenim moltes
opcions personalitzades, utilitzarem el fitxer d'inici del vi anomenat
.exrc (els noms de fitxers que comencin per un punt solen estar reservats
per fitxers d'inicialització com a norma). Per exemple des de la
línea d'ordres del shell fem:
$ cat >.exrc
creem el fitxer d'inici del vi
set showcmd
opció 1: mostrar comandaments de l'editor
set visualbell
opció 2: quan pasem del final del text la finestra farà
"pampallugues"
set noshowmode opció 3: no mostra
Insert en el modus edició
CTRL+d
fi del fitxer
$ vi
entrem en vi per comprovar
:set all
comproveu els valors de les opcions anteriors
-
Quan utilitzem simultàniament EXINIT i .exrc hem de
tenir en compte que s'exclouen un a l'altre. En alguns sistemes el primer
anula al segon (cas del Linux Red Hat per exemple) i en altres es a l'inreves
(cas de l'Unix System V).
-
vi té un sistema d'ajuda prou complert, malauradament està
en anglés
-
Per accedir a l'ajuda en general premem en modus ordre :help
-
Per demanar ajuda sobre un comandament premem en modus ordre :help comandament
-
En una de les primeres pàgines de l'ajuda trovem un índex
on les paraules temàtiques estàn entre signes <,>.
-
Per "saltar" a l'ajuda sobre un tema situem el cursor sobre el tema i premem
CTRL + ]
-
Per tornar enrera premem CTRL + t
-
Per sortir de l'ajuda premem :q