IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)


Linux Professional Institute Certificate. LPIC-1

Lpic1 large.gif
Certificat LPIC-1
Examen: 101 (torneu a la resta de temes)
Fitxers: UD_8_3_editors_vi_altres.pdf
Objectius: http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_101_detailed_objectives
Dipòsit SVN: https://svn.projectes.lafarga.cat/svn/lpi/Materials/Examen_101/103.8
Usuari: anonymous
Paraula de pas: qualsevol paraula de pas

Vi (pronunciat "viai") va ser un dels primers editors de text a pantalla completa i està dissenyat per ser una aplicació molt petita. Va ser creat el 1976 per als sistemes Unix i actualment vi és l'editor de text que podem estar segurs que portarà qualsevol distribució Linux o sistemes de recuperació (consoles de recuperació, disquets, etc).

Al principi la sintaxi de vi pot ser una mica complexa, sobretot quan s'està acostumat a editors de text més contemporanis o basats en entorn gràfic. És imprescindible però, conèixer la sintaxi ja que en certs casos vi pot ser l'únic editor de text disponible al sistema. A més, algunes ordres del sistema com man utilitzen sintaxis derivades de vi.

Existeix una versió millorada de vi anomenada vim (vi improved). Les ordres d'aquest manual funcionen tant amb vi com amb vim.

NOTA: Cal tenir en compte que de fet, algunes distribucions (com per exemple Ubuntu), executant directament vim quan escrivim l'ordre vi.]

Vi està força inspirat en la comanda ex i és un editor basat en modes (Editor Modal).

Instal·lació

Vi és una aplicació que sol existir a totes les distribucions Linux per defecte. De fet, al ser una aplicació tan lleugera, sol ser l'editor per defecte utilitzar en distribucions molt petites.

A Ubuntu, la comanda vi per defecte executa vim, concretament vim.tiny:

$ whereis vi
vi: /usr/bin/vi /usr/share/man/man1/vi.1.gz /usr/share/man/man1/vi.1posix.gz
$ ls -la /usr/bin/vi
lrwxrwxrwx 1 root root 20 2009-04-26 10:42 /usr/bin/vi -> /etc/alternatives/vi
$ ls -la /etc/alternatives/vi
lrwxrwxrwx 1 root root 17 2009-04-26 10:41 /etc/alternatives/vi -> /usr/bin/vim.tiny

L'aplicació vim.tiny és proporcionada pel paquet vim-tiny:

$ dpkg -S /usr/bin/vim.tiny
vim-tiny: /usr/bin/vim.tiny

Manual

En sistemes Debian, el manual de vi es proporcionat pel paquet:

manpages-posix

Tal com podeu comprovar si executeu:

$ whereis vi
vi: /usr/bin/vi /usr/share/man/man1/vi.1.gz /usr/share/man/man1/vi.1posix.gz
$ dpkg -S /usr/share/man/man1/vi.1posix.gz
manpages-posix: /usr/share/man/man1/vi.1posix.gz

Funcionament de vi. Modes

Vi pot operar en 3 modes:

  • Mode ordre (mode normal): Aquest mode serveix per indicar ordres a vi. Les ordres acostumen a ser un sol caràcter
  • Ex mode: És el mode que permet manipular els fitxers (sortir, guardar, etc.). Aquest mode pren el seu nom de l'ordre ex.
  • Mode d'inserció (insert mode): Serveix per entrar text al fitxer.
NOTA: Cal tenir en compte que la terminologia del modes de vi varia segons la literatura que es consulta. Alguns llibres o tutorials  parlen només de
2 modes, el mode normal (mode ordre) i el mode d'entrada de text (o edit mode o entry mode) en comptes del mode inserció. El mode ex, és sovint considerat dins del
mode ordre (les ordres ex són les ordres anomenades "colon commands").

Per moure's entre els diferents modes:

  • ESC: Surt del mode insert i entra al mode ordre.
  • i o a: Entra al mode insert. Amb i s'insereix el text al lloc on està el cursos i amb a s'insereix el text després del caràcter on està el cursor
  • o: L'opció open text, també s'utilitza sovint per tal de començar a inserir text en una nova línia.
  • :: Permet entrar al mode ex, des del mode ordre.

Cal tenir en compte que després d'executar el mode ex, vi sempre torna a entrar automàticament al mode comanda.

IMPORTANT: En cas que tingueu dubte del mode en que us trobeu, premeu la tecla ESC i anireu al mode ordre.

Navegació

Caràcter a caràcter:

Les tecles bàsiques per tal de moure's pel document són les fletxes del teclat. Per raons històriques, també podeu utilitzar per tal de desplaçar-se pel document les tecles:

h --> Fletxa esquerra
j --> Fletxa avall
k --> Fletxa amunt
l --> Fletxa dreta

Aquesta combinació de tecles es deguda a que originàriament el creador de vi, Bill Joy, utilitzava un teclat ADM3A al qual les fletxes es trobaven en aquestes tecles:

TeclatADM3A.svg

Des del mode ordre (des de el mode inserció tindran el seu sentit habitual) també podeu utilitzar:

Barra d'espai --> moure's endavant
Backspace --> Moure's endarrere.

De paraula en paraula

w (word) --> Una paraula endavant (a la dreta).
b (before) --> Una paraula endarrere (a l'esquerre)

De línia en línia:

^ --> Ens movem a l'inici de la línia
$ --> Ens movem al final de la línia actual
Return --> Ens movem a l'inici de la següent línia

Per la pantalla:

H (high) --> Es mou a la part superior de la pantalla
L (low) ---> Es mou a la part inferior de la pantalla.
M (Middle) --> Es mou a la meitat de la pantalla.

Avançar/Retrocedir pàgines:

Ctrl-F (forward) --> s'avança una pantalla i col·loca el cursor a la part superior esquerra e la nova pantalla.
Ctrl-D --> s'avança meitat de pantalla.
Ctrl-B (scroll backward) ---> Retrocedeix una pantalla.
Ctrl-U --> Retrocedeix mitja pantalla.

Altres:

1G: mou el cursor al principi del document
G o Shift+g: Mou el cursor al final del document. 

Anar a una línia concreta

Cal escriure:

liniaG

Per exemple per anar a la línia 5

5G

Ordres

Entrar al mode d'inserció (i,o,a)

Podem entrar al mode d'inserció des del mode ordre, utilitzant qualsevol de les següents ordres:

  • i (insert): insereix text a la posició del cursor. L'opció I (Shift+i) insereix text al principi de la línia on es troba el cursor.
  • a (append): insereix text a la posició següent al cursor. L'opció A (Shift+a) insereix text al final de la línia on es troba el cursor.
  • o: Open text. Insereix text en una nova línia. Consulteu #Vi#Open_text_.28Inserir_una_nova_l.C3.ADnia.29._Tecla_o. L'opció O insereix una línia a sobre de la posició actual del cursor.
  • R: Entra en el mode insert però reemplaça el text existent pel que anem escrivint. S'haveu que esteu en aquest mode per que a la línia d'estat apareix el text -- REPLACE --.

Open text (Inserir una nova línia). Tecla o

Permet afegir una línia i escriure:

o: Open text. Insereix una nova línia i ens col·loca el cursor en mode inserció a la nova línia.

Modificar majúscules/minúscules

  • ~: reemplaça el caràcter sobre el que està el cursor de majúscules a minúscules (i viceversa) i es mou a la següent posició. Prement repetidament el caràcter ~ podem anar modificant tota la paraula

Desfer (undo) els últims canvis

u --> Desfà l'últim canvi.
U --> Desfà tots els canvis que s'han fet a la línia on està el cursor.

Yank mode. Copiar i enganxar

Yank és el nom de l'ordre copiar a vi (i el nom de l'ordre enganxar a Emacs).

Per exemple, per copiar 4 línies escriuriem:

4yy

Fixeu-vos que a la línia d'estat del final del document apareix:

4 lines yanked


Si en comptes de copia voleu tallar, podeu utilitzar l'ordre dd.

4dd

veureu que a la línia d'estat apareix el text:

4 fewer lines

I que s'han esborrat (tallat) les 4 línies des de el cursor (la línia a la que està el cursor i les 4 següents).

Un cop tallat o copiat el text el podeu enganxar a qualsevol lloc del document situant el cursor al lloc desitjat i polsant la tecla.

p

o P (shift+p).

També es poden utilitzar buffers amb nom:

  • Col·loque-vos a la primera línia que voleu copiar o tallar
  • Teclegeu cometes dobles (") i poseu un nom (un sol caràcter) al buffer. Per exemple: "a
  • Ara procediu com si volguéssiu fer la copia o la tallada normal (p. ex. 4yy o 5dd)
  • Col·locar-se a la línia on es vol pegar.
  • Teclegeu cometes dobles (") seguit del buffer que voleu utilitzar i la lletra p

Recursos:

Esborrar

  • dw: esborra la següent paraula.

Buscar text

  • /text_a_buscar: Amb la barra invertida podem buscar un text. Per exemple per buscar el text color, escriuríem en mode ordre /color.

Si la cerca arriba al final, amb vim, es continua la cerca des de l'inici del document. Per buscar cap endarrere utilitzeu ?, per exemple ?color.

Modificar text des del mode ordre

Caràcter a caràcter:

s (substitute)--> Substitueix el caràcter sota el cursor per un o més caràcters. Es tecleja s, el text a nou i un cop acabat es pulsa ESC
r (replace) --> Substitueix el caràcter sota el cursor per un nou caràcter. Es tecleja r més un sol caràcter i automàticament vi torna al mode ordre.

Transposicionar caràcters:

Pot ser útil per tal de modificar errors típic com qeu en comptes de que. Col·loqueu el cursor sobre el primer caràcter i pulseu xp.

Paraula per paraula:

cw (complete word) --> Es posiciona el cursos a l'inici de la paraula, es tecleja cw seguit de la nova paraula i ESC quan s'hagi acabat.

Línia per línia

cc --> Es pot posar el cursos en qualsevol part de la línia i polsar cc. La línia desapareix deixant una nova línia en blanc a la que podrem inserir text. Al finalitzar polsar ESC.
C --> Modificar una línia des de la posició del cursor fins al final.

Partir/unir línies

Partir una línia--> es col·loca el cursor a la posició on es vol partir la línia i premeu r(replace) seguit d'Enter
Unir dos línies --> col·locar el cursor a la línia superior i teclejar J.

Esborrar text des del mode ordre

Caràcters:

x --> Posicioneu el caràcter sobre el cursor a esborrar i premeu x.
X --> Igual que x però esborra el caràcter anterior a la posició del cursor.

Paraules:

dw --> Esborra fins al final de la paraula. Es col·loca el cursor a la posició on es vol començar a esborrar i es prem dw.

Línies:

dd --> Esborra una línia
D --> Esborra tot el que està a la dreta del cursor i fins al final de la línia
d0 --> Esborra tot el que està a l'esquerre del cursor i fins l'inici de la línia

Fitxer:

dG --> Esborra des de la línia actual fins al principi del fitxer.
d1G --> Esborra des del principi del fitxer fins a la línia actual

Buscar i reemplazar

Buscar

  • /text_a_buscar: Permet buscar un text. Per exemple per tal de buscar la paraula es escriurieu /es i premeu Enter. Per buscar la següent ocurrència premeu n i per tal de buscar l'anterior N.
  • ?text_a_buscar: igual que /, perì busca endarrere del text.

Buscar i reemplaçar:

  • %s/original/replacement: Permet buscar i reemplaçar un text a tot el document. Per exemple per canviar tots els text erronis cnvis per canvis cal escriure %s/cnvis/canvis.
  • %5/original/replacement: Igual que l'anterior però el canvi només s'aplica a la línia 5.

Normalment la cerca és case sensitive (diferència entre majúscules i minúscules). Es pot modificar aquest comportament per defecte amb:

  • :set ic : Diferencia entre majúscules i minúscules
  • :set noic : No diferencia entre majúscules i minúscules

Alguns caràcters es poden utilitzar com a comodins (/ & ! . ^ * $ \ ?) o tenen un sentit especial. Si voleu buscar aquests caràcters els heu d'escapar amb la contrabarra (\).

Comandes del mode ex

Normalment podem afegir el caràcter ! a qualsevol comanda, fet que ens permet forçar el canvis (per exemple sortir encara que no s'hagi guardat).

Guardar el document

  • :w: Guarda el document

Sortir

  • :q: Surt del document. No permet sortir si hi ha canvis pendents. Es pot forçar la sortida amb :q!

Guardar i sortir

  • :wq: Es poden concatenar les ordre guardar (w) i sortir (q). Escriure ZZ és equivalent.

Obrir/Editar un nou fitxer

  • :e /cami/nou/fitxer: No es carrega un nou fitxer fins que l'actual no s'ha salvat (o si no s'ha obert encara cap fitxer). Es pot forçar el canvi sense guardar amb :e!

Incloure els continguts d'un altre fitxer

  • :r/cami/del/nou/fitxer: Es pot indicar el número de línia on inserir amb :#línia r nom_fitxer

Mostrar els números de línia

  • :set nu: Mostra els números de línia
  • :set nonu: Oculta els números de línia

Executar una ordre externa

  • :!: Permet executar una ordre externa. Per exemple, per executa ls: :!ls

Copiar i moure línies

Copiar línies:

:#linia_inici,#linia_final co #linia_on_copiar

Moure línies:

:#linia_inici,#linia_final m #linia_on_moure

Esborrar línies:

:#linia_inici,#linia_final d

Es poden utilitzar les següents variables:

. --> Indica el final de la línia
$ --> Indica el final del fitxer

Exemple complet de modificació d'un fitxer

El primer pas és executar vi:

$ vi

Un cop dins podeu indicar quin fitxer voleu editar escrivint l'ordre:

:e/boot/grub/menu.lst.copia

També podríeu haver obert directament el fitxer amb:

$ vi /boot/grub/menu.lst.copia
NOTA: L'objectiu d'aquest apartat és afegir una línia al menú de GRUB. Per tal d'evitar problemes, no treballeu directament amb el fitxer de grub si no amb una copia que podeu obtenir executant:
$ sudo cp /boot/grub/menu.lst /boot/grub/menu.lst.copia

Si us fixeu, al final del fitxer apareixen múltiples caràcters titlla (~), indicant el final del fitxer.

La línia de més avall de la pantalla o emulador de terminal és la barra d'estat que indica el resultat de l'última ordre executada. Per defecte al entrar a un nou fitxer, veureu quelcom similar a:

"/boot/grub/menu.lst.copia" 170 lines, 5804 characters

és a dir us mostra el nom del fitxer que esteu editant i informació estadística bàsica del fitxer (aquesta informació és per cert similar a la que podeu obtenir mitjançant l'ordre wc).

Podem moure el cursor amb les fletxes del teclat o podem utilitzar les tecles:

h --> Fletxa esquerra
j --> Fletxa avall
k --> Fletxa amunt
l --> Fletxa dreta

Imagineu-vos que volem copiar i pegar (duplicar) un conjunt de línies. Podem seguir les següents passes.

  • Col·loqueu-vos a la primera línia del text que voleu copiar
  • Utilitzeu l'ordre yy (yank) per tal de copiar les n línies anteriors. Per defecte vi ja es troba en el mode ordre i podeu escriure:
4yy

No cal prémer enter. El resultat és que a la barra d'estat posarà:

4 lines yanked
  • Col·loqueu-vos al final del fitxer i premeu p, Inserirà una nova línia i el text indicat. Si voleu inserir el text a la línia on està el cursor utilitzeu P (Shift+ p).
  • Ara cal editar la nova entrada. Col·loqueu el cursor al lloc on voleu fer la modificació. Per aquesta operació hem d'entrar al mode inserció. Tenim varies opcions, però dos de les més destacades són:
  • i o a: Entra en el mode inserció simple.
  • R: Entra en el mode insert en mode que reemplaça el text existent pel que anem escrivint. S'haveu que esteu en aquest mode per que a la línia d'estat apareix el text -- REPLACE --.
  • Repetiu els passos per modificar tot les línies que calguin. Podeu sortir del mode insert amb la tecla ESC'. Recordeu que per defecte torneu al mode ordre.
  • Finalment salveu el fitxer amb l'ordre :wq (o de forma equivalent ZZ). Els dos punts són per entrar al mode ex i les comandes wq indicant guardar i sortir respectivament.

Avantatges de vi

Si us fixeu, vi està pensat per poder fer gairebé totes les accions sense la necessitat de combinacions de tecles de l'estil Ctrl+tecla, o Shift+Tecla o Alt+tecla. Els editors no modals (com nano o joe) fan ús d'aquestes combinacions per tal realitzar accions com guardar el fitxer, sortir, etc.

vim

Vim és una versió millorada de vim. Els conceptes bàsics de vi també s'apliquen a vi.

Recursos:

visudo

visudo és una aplicació utilitzada per a editar de forma segura en fitxer /etc/sudoers de sudo. Consulteu l'article sudo per a obtenir més informació.

vipw

Permet modificar el fitxer /etc/passwd de forma segura:

$ sudo vipw

NOTA: Tot i el nom de l'ordre s'utilitza l'editor per defecte del sistema i no pas vi.

Abans de poder guardar el fitxer es comprovarà que la sintaxi del fitxer és correcta. Si ens equivoquéssim en la sintaxi podríem deixar el sistema inservible.

vigrp

Similar a vipw però permet modificar de forma segura el fitxer /etc/groups.

vimtutor

La versió completa de vim conté un tutor incorporat, anomenat vimtutor.

Cheatsheet (xuletes)

Vegeu també

Enllaços externs