vi a fost primul editor de text full-screen scris pentru Unix. Proiectat să fie mic și simplu este, adesea, singurul editor care poate fi folosit în cazuri de restabilire de urgență a sistemelor (fiind și singurul instalat). Din acest motiv, învățarea vi este valoroasă - este ceea ce m-a determinat să-l deslușesc, deși dintotdeauna am folosit nano.
Pentru cei care sunt obișnuiți numai cu editoare de text în mod grafic, vi poate părea un pic ciudat. Pentru a folosi vi, trebuie să înțelegem, în primul rând, cele 3 moduri în care operează. După ce-am înțeles aceste moduri, putem începe învățarea procedurilor d eediatre text implementate de vi.
Cele mai multe distribuții Linux vin cu cu o instalare a unei variante vi, cunoscută ca Vim, sau Vi îmbunătățit (Vi IMproved). Așa cum spune și numele, Vim are mai multe caracteristici decât originalul vi. Cele de mai jos se aplică ambelor variante - vi și Vim.
Modurile de funcționare vi
În orice moment, vi se află în unul din cele 3 moduri:
Modul Comandă (Command Mode)
Acest mod de lucru acceptă comenzi, care sunt de obicei introduse printr-o singură literă. De exemplu, i și a intră în modul de inserare, iar o deschide o linie nouă sub cea curentă.
Modul Ex (Ex Mode)
Pentru manipularea fișierelor (inclusiv salvarea fișierului curent și rularea unui program extern), vom folosi modul Ex (de la Exit). Intrăm în modul Ex din modul Comandă cu ajutorul a două puncte (:), urmat, de obicei, de comanda ex-mode pe care dorim s-o folosim. După rularea comenzii ex-mode, vi revine automat în modul Comandă.
Modul Insert (Insert Mode)
Este modul de lucru care permite inserarea textului. Apăsarea celor mai multe taste are ca rezultat apariția semnelor dorite pe ecran. O excepție importantă este tasta Esc, care părăsește modul Insert și intră în modul Comandă.
Dacă nu suntem siguri în care mod ne aflăm, vom apăsa tasta Esc și vom intra în modul Comandă, de und eputem reintra în modul Insert, dacă este necesar.
Din păcate, terminologia în jurul modurilor de lucru vi este inconsistentă: de exemplu, modul Comandă este numit uneori și modul Normal, iar modul Insert este cunoscut și ca modul Editare sau modul Intrare. De asemenea, nici modul Ex uneori nu este recunoscut ca un mod de sine stătător și se face referire la el ca fiind comenzile colon (comenzi două puncte).
Explorarea procedurilor de editare text
Ca metodă de învățare vi, am folosit ca exemplu fișierul /etc/fstab pentru a adăuga un nou disc sistemului (bineînțeles, am lucrat pe o copie, în nici un caz pe fișierul original).
Începem prin a copia fișierul /etc/fstab în directorul nostru personal:
cp /etc/fstab ~
Iată cum arată fișierul meu fstabv:
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
# UUID=3b7c8f48-be62-49ea-9031-1abdcc16c7fc
/dev/sda9 / ext4 rw,relatime,data=ordered 0 1# UUID=c5051bbe-e0c6-45d4-a759-617fed4b3db8
/dev/sda7 /home ext4 rw,relatime,data=ordered 0 2# UUID=bef71f7b-9e98-4b65-98b8-e2b282053054
/dev/sda5 none swap defaults 0 0
#/dev/sda8 /run/media/date ntfs-3g uid=bobses,gid=users 0 0
#/dev/sda8 /mnt/date ntfs-3g defaults 0 0
/dev/sda8 /run/media/bobsesa/date ntfs-3g defaults 0 0
Pentru a lucra cu acest fișier în Vim, nu trebuie decât să dăm comanda următoare (presupunând că ne aflăm în directorul nostru home și am copiat anterior aici fișierul /etc/fstab):
vi fstab
Rezultatul ultimei comenzi este deschiderea fișierului fstab în Vim. Semnul tilda (~) de jos semnifică sfârțitul fișierului:
Ultima linie de jos arată statusul ultimei comenzi, deoarece am specificat un nume de fișier când am lansat programul.
Putem adăuga o linie nouă fie scriind-o de la început la sfârșit, fie duplicând o linie existentă și apoi modificând-o. Pentru a crea o linie complet nouă, se urmează pașii următori:
- mutăm cursorul la începutul penultimei linii (folosind tastele săgeți)
- apăsăm o (litera o, nu numărul zero 0). Se deschide o linie nouă imediat sub linia curentă, cursorul mutându-se la începutul ei - programul a intrat în modul Insert
- scriem linia nouă, ca mai jos
/dev/sdb1 /home2 ext 4 defaults 0 0
- apăsăm tasta esc pentru a reveni la modul Comandă
Pentru a crea o nouă înregistrare modificând o intrare existentă, se urmează pașii de mai jos:
- mutăm cursorul la începutul liniei proaspăt create mai sus (înaintea /dev/sdb1) - cursorul clipește chiar pe primul semn / din /dev/sdb1
- acum trebuie să copiem linia respectivă (termenul folosit frecvent este yank, mai degrabă decât copy - copie textul într-un buffer de unde putem, ulterior, să-l lipim în fișier). Pentrru a copia textul, vom folosi comanda yy precedată de numărul liinilor pe care vrem să le copiem. Astfel, vom scrie 1yy (NU VOM APĂSA tasta Enter!) - comanda dd lucrează asemănător cu yy, cu deosebirea că șterge liniile înainte de a le copia în buffer.
- mutăm cursorulpe linia de dinaintea celei pe care vrem să apară linia nouă
- apăsăm tasta p (din nou, fără să apăsăm și Enter) - vi lipește conținutul bufferului. Fișierul ar trebui să aibă acum două linii identice /dev/sdb1. dacă dorim ca textul din buffer să fie lipit pe linia dinaintea cursorului, vom apăsa tasta P
- începem să personalizăm linia lipită - mutăm cursorul pe cifra 1 din /dev/sdb1
- până acum, am operat vi în modul Comandă. Putem folosi oricare din comenzile următoare ca să intrăm în modul Insert. În acest punct, cel mai convenabil este să apăsăm tasta R, care intră în modul Insert configurat în așa manieră încâr înlocuiește conținutul (Replacement) în loc să insereze. Dacă se preferă inserarea în locul suprascrierii, se poate folosi i sau a (ultima avansează cursorul cu un spațiu). Dar pentru a ne atinge scopul pe care-l urmărim acum, vom apăsa tasta R pentru a intra în modul Insert cu înlocuire (suprascriere)
- scriem 2 pentru a schimba din /dev/sdb1 în /dev/sdb2
- mutăm cursorul cu tastele săgeți pe cifra 2 din /home2 (vom modifica punctul de montare)
- scriem 3 pentru a schimba din /home2 în /home3
- ieșim din modul Insert apăsând tasta Esc
- salvăm fișierul și ieșim din vi dând comanda :wq - este o comandă ex-mode, pe care o voi descrie puțin mai încolo.
După cele descrise mai sus, fișierul meu de lucru arată ca mai jos:
Sunt disponibile multe comenzi pe care putem să le folosim în diferite situații. Cele mai importante sunt următoarele:
Schimbare dimensiune literă (Change Case) - să presupunem că trebuie să schimbăm dimensiunea unei litere (sau a mai multor litere) dintr-un cuvânt. În loc să intrăm în modul Insert și să rescriem cuvântul, putem folosi semnul tilda (~) în modul comandă pentru a schimba dimensiunea. Poziționăm cursorul pe primul caracter pe care dorim să-l schimbăm și apăsăm în mod repetat până obținem rezultatul dorit.
Revocare (Undo) - pentru a revoca orice schimbare făcută, apăsăm tasta u în modul Comandă.
Introducere text (Open text) - în modul Comandă, apăsăm tasta o (litera o, nu cifra 0) și va fi inserată o nouă linie imediat sub linia curentă, intrându-se și în modul Insert pentru a putea introduce text.
Căutare (Search) - pentru a căuta înainte într-un fișier text, apăsăm tasta / în modul Comandă, urmat imediat de textul pe care vrem să-l localizăm. Scriind ? textul indicat va fi căutat înapoi.
Salt la o linie - tasta G ne duce la linia specificată. Tasta H (homes) mută cursorul pe prima linie din fișier, iar tasta L duce cursorul pe linia cea mai de jos din ecran.
Înlocuire globală - pentru a înlocui toate aparițiile unui șir dintr-un text cu alt șir de caractere, vom scrie :%s/original/înlocuire/g, unde original este șirul inițial, pe care vrem să-l înlocuim și înlocuire este șirul de caractere cu care dorim schimbarea.
Salvarea schimbărilor
Pentru a salva schimbările dintr-un fișier, scriem :w în modul Comandă. Aceasta provoacă intrarea în modul Ex și rulează comanda ex-mode w, care scrie (write) fișierul folosind numele pe care l-am specificat atunci când am lansat vi.
Editarea unui fișier nou - comanda :e se folosește pentru a edita un nou fișier. De exemplu, scriind :e /etc/fstab
va încărca fișierul /etc/fstab pentru editare. vi nu va încărca un nou fișier până când cel existent nu a fost salvat sau până nu atașăm un semn de exclamare comenzii :e - :e!
Includerea unui fișier existent - comanda :r include conținutul unui fișier vechi în cel existent
Executarea unei comenzi externe - comanda ex-mode :! execută comanda externă pe care o specificăm. De exemplu, dacă scriem :!ls, vom rula comanda ls
, putând vedea ce fișiere avem în directorul curent.
Ieșirea din vi - vom folosi comanda :q pentru a ieși din program. La fel ca :e, comanda de ieșire nu rulează până nu salvăm schimbările făcute la fișierul în lucru sau până nu adăugăm un semn de exclamare - :q! forțează ieșirea fără să salveze.
Comenzile ex-mode (cele cu două puncte 🙂 pot fi combinate pentru executarea unor acțiuni multiple. De exemplu, comanda :wq salvează modificările și apoi iese din aplicație.
Vi/Vim oferă mult mai multe opțiuni decât cele prezentate de mine aici. ca de fiecare dată la sfârșitul unei prezentări, sugerez folosirea comenzii man vi
pentru cei care doresc să învețe mai mult vi/Vim.
Foarte mulți linuxiști sunt atașați de acest editor de text.
Eu sunt foarte la început cu folosirea lui, dar deja începe să-mi placă prin provocările pe care mi le oferă.
Voi ce editor de text folosiți în terminal?
[…] a evita folosirea editorului vi, vom instala […]