post

Vim ro:Moduri

Contents

Introducere

Am avut prima întâlnire cu modurile în capitolul precedent. Să continuăm explorarea acestui concept cu modurile disponibile şi ce se poate face în fiecare din ele.

Moduri

Există trei moduri de bază în Vim – normal, insert şi visual.

  • Modul normal este cel în care rulăm comenzi. Este modul implicit în care porneşte Vim.
  • Modul insert este cel în care putem introduce/scrie text.
  • Modul visual (rom. vizual) este modul în care selectăm vizual o porţiune de text pentru a executa o operaţie/comandă asupra acesteia.

Modul normal

Implicit sunteţi în modul normal. Să vedem ce putem face în acest mod.

Introduceţi :echo "hello world" şi apăsaţi enter. Ar trebui să vedeţi faimoasele cuvinte hello world afişate pe ecran. Tocmai aţi pus Vim să execute comanda numită :echo şi i-aţi dat acesteia un text pe care să-l afişeze pe ecran.

Introduceţi /hello şi apăsaţi tasta enter. Vim va căuta această frază şi va “sări” la prima sa apariţie.

Acestea au fost doar două exemple simple de lucruri ce pot fi făcute în modul normal. Vom mai vedea o mulţime în capitolele următoare.

Cum se foloseşte asistenţa (engl. help)

Aproape la fel de important precum cunoaşterea modului normal este cunoaşterea modului de a folosi comanda :help. De aici o să învăţaţi multe lucruri despre comenzile disponibile în Vim.

Reţineţi că nu trebuie să memoraţi toate comenzile disponibile în Vim, e mai bine să ştiţi cum să le găsiţi când vă trebuie. De exemplu, :help usr_toc Ne duce la cuprinsul manualului de referinţă. Puteţi citi :help index pentru a căuta un anumit subiect care vă interesează, de exemplu, rulaţi /insert mode pentru a accesa informaţiile relevante legate de modul insert.

Dacă nu vă aduceţi aminte aceste două subiecte la început, apăsaţi F1 sau daţi comanda :help.

Modul insert

Când porneşte Vim în modul normal, am văzut că putem tasta i pentru a intra în modul insert. Există şi alte moduri de a trece în modul insert:

  • Daţi comanda :e dapping.txt
  • Apăsaţi i
  • Introduceţi paragraful următor (inclusiv toarte greşelile de dactilografiere, o să le corectăm mai târziu):

means being determined about being determined and being passionate about being passionate

  • Apăsaţi <Esc> pentru a trece înapoi în modul normal.
  • Daţi comanda :w

Uups, se pare că am uitat un cuvânt la începutul liniei, iar cursorul nostru este la sfârşitul liniei, ce e de făcut?

Care să fie cea mai eficientă cale de a ne deplasa la începutul liniei şi a insera cuvântul care lipseşte? Să folosim mausul pentru a muta cursorul la începutul liniei? Să folosim tastele săgeţi şi să parcurgem pas cu pas textul până la începutul liniei? Să apăsăm tasta home şi apoi i pentru a trece din nou în modul insert?

Se va vedea că eficienţa maximă se obţine apăsând tasta I (majuscula i):

  • Apăsaţi I
  • Introduceţi Dappin
  • Apăsaţi <Esc> pentru a trece în modul normal.

Observaţi că am folosit o altă tastă pentru a trece în modul insert, specialitatea sa este că mută cursorul la începutul liniei şi trece în modul insert.

Mai observaţi şi cât de important este să comutaţi de îndată înapoi în modul normal după ce aţi introdus textul. Dacă vă formaţi acest obicei veţi avea avantajul că (după încheierea fazei iniţiale, de introducere a textului) aproape toată procesarea va fi în modul normal, acolo unde se petrece rescrierea/editarea/finisarea textului.

Acum să considerăm o altă variaţiune a comenzii i. Observaţi că dacă apăsaţi i, cursorul se va poziţiona înaintea caracterului curent şi Vim va trece în modul insert. Pentru a plasa cursorul după poziţia curentă, apăsaţi a (engl. ‘a’fter=rom. după).

  • Apăsaţi a
  • Apăsaţi g (pentru a completa cuvântul “Dapping”)
  • Apăsaţi <Esc> pentru a vă întoarce în modul normal.

Similar relaţiei între tastele i şi I, există şi o relaţie între tastele a şi A – dacă vreţi să adăugaţi text la sfârşitul liniei apăsaţi tasta A.

  • Apăsaţi A
  • Apăsaţi . (puneţi un punct pentru a încheia propoziţia corect)
  • Apăsaţi <Esc> pentru a comuta înapoi în modul normal.

Să rezumăm ce am învăţat până acum:

Comanda Acţiunea
i inserează text în stânga cursorului
I inserează text la începutul liniei
a adaugă text după cursor
A adaugă text la sfârşitul liniei

Observaţi cum comenzile cu majuscule sunt versiuni ‘mărite’ ale comenzilor cu minuscule.

Acum că suntem pricepuţi la mutarea rapidă a cursorului în linia curentă, să vedem cum ne putem muta în linii noi. Dacă vreţi să creaţi o linie nouă în care să scrieţi, apăsaţi tasta o.

  • Apăsaţi o
  • Introduceţi I'm a rapper.
  • Apăsaţi <Esc> pentru revenire în modul normal.

Hmmm, parcă ar arăta mai bine dacă noua propoziţie ar fi singură întrun nou paragraf.

  • Apăsaţi O (majuscula ‘O’)
  • Apăsaţi <Esc> pentru revenire în normal.

Ca un rezumat:

Comanda Acţiunea
o deschide (engl. ‘o’pen) o linie nouă sub linia curentă
O deschide o linie nouă deasupra liniei curente

Observaţi cum ‘o’ şi ‘O’ produc o linie nouă în direcţii opuse.

Era ceva în neregulă cu textul introdus? Aah, trebuie să fie ‘dapper’, nu ‘rapper’! Trebuie să modificăm un singur caracter, care e cea mai eficientă cale de a face asta?

Am putea apăsa i pentru a intra în modul insert, apoi <Del> pentru a şterge litera r, să tastăm d şi apoi <Esc> pentru revenire la normal. Dar asta înseamnă 4 paşi pentru o schimbare aşa de mică! Nu există ceva şi mai bun? Puteţi folosi comanda s de la ‘s’ubstituţie.

  • Mutaţi cursorul până la caracterul r (sau mai simplu apăsaţi b pentru a reveni la începutul cuvântului)
  • Apăsaţi s
  • Apăsaţi d
  • Apăsaţi <Esc> pentru revenire în normal

Da, desigur, poate că nu am economisit mult acum, dar gândiţi-vă la sute sau mii de repetări pe zi! Accelerarea la maxim a acestei operaţii este benefică pentru că ne ajută să ne focalizăm energia pe aspecte mai creative şi interesante. Aşa cum spunea Linus Torvalds, “nu e vorba atât de a face lucrurile mai repede cât, pentru că e e atât de rapid, despre cât de mult se va schimba modul vostru de lucru.”

Din nou, există şi o versiune ‘mai mare’, S care înlocuieşte întreaga linie, nu doar caracterul curent.

  • Apăsaţi S
  • Introduceţi Be a sinner.
  • Apăsaţi <Esc> pentru comutare în modul normal.
Comanda Acţiunea
s substituie caracterul curent
S substituie linia curentă

Să ne întoarcem la acţiunea precedentă… Nu am putea face înlocuirea (engl. ‘r’eplace) şi mai eficientă? Ba da, putem folosi tasta r.

  • Mutaţi cursorul la primul caracter al cuvântului sinner.
  • Apăsaţi r
  • Apăsaţi d

Observaţi că suntem deja înapoi în modul normal; nu mai trebuie să apăsăm <Esc>.

Există şi o versiune ‘mai mare’ pentru r numită R care va înlocui consecutiv şi caracterele următoare.

  • Mutaţi cursorul la ‘i’ din sinner.
  • Apăsaţi R
  • Introduceţi app (acum cuvântul devine ‘dapper’)
  • Apăsaţi <Esc> pentru revenire.
Comanda Acţiunea
r înlocuieşte caracterul curent
R înlocuieşte caracterele consecutive

Acum textul ar trebui să arate aşa:

Dapping means being determined about being determined and being passionate about being passionate.

Be a dapper.

Am parcurs multe în acest capitol, dar vă garantez că asta a fost partea cea mai grea. De îndată ce înţelegi asta, practic ai înţeles litera şi spiritul lui Vim, celelalte funcţionalităţi sunt cireaşa de pe tort.

Ca să repet, înţelegerea modurilor şi comutarea lor este partea principală în a deveni Vimmer, deci dacă nu aţi digerat încă exemplele de mai sus, puteţi să le recitiţi oricând. Nu vă grăbeşte nimeni.

Dacă vreţi să citiţi detalii mai particulare despre aceste comenzi, citiţi :help inserting şi :help replacing.

Modul visual

Să zicem că vreţi să selectaţi o mulţime de cuvinte şi să le înlocuiţi cu un nou text pe care vreţi să-l scrieţi. Ce-o să faceţi?

O soluţie ar fi să mutaţi mausul la începutul textului respectiv şi să-l selectaţi, iar apoi să începeţi să scrieţi noul text. Distractiv, nu?

Am putea folosi <Del> sau <Backspace> pentru a şterge toate acele caractere, dar pare chiar mai puţin eficient.

Cea mai eficientă cale este să poziţionăm cursorul la începutul textului, să apăsăm v pentru a trece în modul visual (rom. vizual), să folosim tastele săgeţi sau alte comenzi de mişcare pentru a ajunge la sfârşitul textuluzi relevant (de exemplu tastăm 5e pentru a muta cursorul la sfârşitul celui de-al cincilea cuvânt numarat de la cel care conţine cursorul) şi apoi să apăsăm c pentru a schimba (engl. ‘c’hange). Observaţi creşterea eficienţei.

În această operaţie (comanda c), veţi fi transferat în modul insert după executarea ei, aşa că va trebui să apăsaţi <Esc> pentru întoarcere în modul normal.

Comanda v lucrează cu caractere. Dacă vreţi să lucreze cu linii, folosiţi V.

Rezumat

Iată un desen cu relaţiile între diferitele moduri:


               +---------+  i,I,a,A,o,O,r,R,s,S  +----------+
               |   Mod   +---------->------------+   Mod    |
               | normal  |                       |  insert  |
               |         +----------<------------+          |
               +-+---+---+        <Esc>          +----------+
                 |   |
                 |   |
                 |   |
                 |   |
                 |   |
           v,V   V   ^  <Esc>
                 |   |
                 |   |
                 |   |
                 |   |
             +---+---+----+
             |    Mod     |
             |  visual    |
             +------------+

(Acest desen a fost creat folosind Vim şi pluginul DrawIt, creat de Dr. Chip)

A se vedea :help vim-modes-intro şi :help mode-switching pentru detalii privind diversele moduri şi comutarea între ele.

Dacă nu sunteţi siguri că modurile sunt un concept central pentru puterea şi simplitatea lui Vim, citiţi articolele“Why Vi” şi modelul intrărilor în vi referitoare la motivaţia superiorităţii acestui mod de editare.


Advertisements