Vi Mode, Dvorak etc. pro/contra

Ca tot s-a discutat despre editorul folosit, as vrea sa aud parerile voastre despre moduri de editare a textului, fiindca asta ia de obicei cel mai mult timp si e un aspect foarte important.
Foloseste cineva spre exemplu Dvorak sau modul Vi (VIM) ? De exemplu pentru ST este un plugin Vintage Mode, care cica daca il insusesti ajungi sa scrii cod de cateva ori mai repede, oare foloseste cineva pe aici tehnici de genu ?

1 Like

Eu folosesc Vintage Mode in Sublime Text. Am invatat Vi prin 2009, dar acum folosesc doar o parte din comenzi: navigatie, select, search.

Eu folosesc keybindings de Vim în ST, prin pachetul Vintage. Acum câțiva ani, când foloseam Netbeans, foloseam plugin-ul jVi parcă.

Vim are un learning curve destul de abrupt, dar are avantajul că o poți lua pas cu pas, și poți integra în workflow-ul tău doar anumite features pe rând. O dată ce te înveți, într-adevăr îți crește enorm viteza de manipulare a textului.

Ca să nu dau link-uri către tuturiale de zeci de pagini, o să scriu aici pe scurt, ca și cei care nu sunt familiari cu vim să poată urmări discuția:

Într-un editor normal, ești mereu pe modul “edit”, da? Orice tastă apeși, se face output pe ecran. Iar combinații de taste (shortcuts) fac diverse chestii, de la editor la editor și mașină la mașină.

Vim, în schimb, are mai multe moduri de funcționare, între care faci switch mereu în timp ce codezi. Cele mai importante sunt:

  1. Command mode, sau normal mode
  2. Visual mode
  3. Insert mode (ăsta e modul de funcționare identic cu orice alt editor)

By default, când dai drumul la vim, ești în command mode. Dacă ați deschis vreodată din greșeală un vim pe server și nu reușeați să mai ieșiți din el sau să scrieți text, e pentru că erați în command mode. În modul ăsta tastele apăsate nu reprezintă caractere, ci comenzi. Pentru a edita text, trebuie trecut în insert mode (cu tasta i sau ins).

Acum, cea mai faină chestie legată de comenzile în vim este că pot fi chained. Să vă dau vreo două exemple care ilustrează asta. Să zicem că am următorul cod JS…

if (confirm("Ești sigur(ă) că vrei să înveți VIM?")) {
    alert("Yeeey!");
}

… și acum vreau să schimb textul de la confirm, să îl traduc în engleză. În mod normal ar trebui să selectez tot textul dintre ghilimele și să scriu altul. Dar selecția textului dintre ghilimele fie te obligă să folosești mouse-ul, fie să apeși mai multe taste. În vim, oriunde ai fi cu cursorul tastaturii în interiorul ghilimelelor, e de ajuns să scrii:

ci"

Și apoi să începi să scrii direct noul text. Pur și simplu apeși (pe rând, nu simultan, că nu e un shortcut, ci un chain de comenzi) c, i, ". Comenzile respective înseamnă:

c == change
i == inner / inside
" == separatorul în interiorul căruia vrem să edităm. Ăsta poate să fie ", ', {, [, etc.

Ăsta e doar un exemplu. Flexibilitatea pe care ți-o dau numeroasele comenzi și ușurința cu care se apelează este imensă. Doar pentru comanda c există un număr nelimitat de combinații pe care le poți face. Cea mai simplă din ele este ciw, “change inner word”, care înlocuiește cuvântul în care ești cu cursorul.

Încă un exemplu scurt. Am următorul cod:

<a href="http://example.com" title="Un titlu oarecare">Click me</a>

Și am decis că vreau să șterg titlul link-ului. Să scot atributul title cu totul. Asta înseamnă că vreau să șterg "toate caracterele de la primul t până la >" E de ajuns să mă duc cu cursul pe primul t din “title”, și să apăs:

dt>

Asta înseamnă:

d == delete
t == till (prescurtare de la until, “până la”)
> == caracterul până la care vreau să șterg

Ar mai fi foarte, foarte, foarte multe chestii de spus, tocmai d-aia are un learning curve destul de abrupt. Ideea e bază e că nu te obligă nimeni să înveți toate comenzile de la început. Poți începe prin a-ți petrece majoritatea timpului în “insert mode”, care funcționează identic cu editorul tău actual, și să începi să îți introduci în workflow din ce în ce mai multe comenzi. Cu timpul îți vor intra în reflex, și o să vezi că altfel curge codul.

Eu am probleme acum când scriu în browser, cum scriu acum aici, pentru că m-am învățat așa tare cu keybindings de vim încât încerc să le folosesc peste tot. Există ceva addons de browser pentru asta, dar nu m-a atras nici unul în mod special.

6 Likes

Si eu folosesc Vim de cativa ani (>= 3). Chestii uzuale pe care le fac (cu Vim):

  • comentez linii de cod (pluginul TComment https://github.com/tomtom/tcomment_vim), am mapat la \t; de ex. daca vreau sa comentez 3 linii de cod incepand de unde este cursorul: “3\t”
  • sterge tot ce se afla intre “” sau () sau [] si pune cursorul intre ele; comanda: “ci” sau “ci(” sau “ci[”
  • go to … inceput sau sfarsit de linie: “^” === inceput, “$” === sfarsit
  • transforma in uppercase / lowercase; comanda “~”
  • go to … matching ( or { or [; comanda “%”
  • sterge cuvantul curent si lasa-ma in “edit mode”; comanda “ciw” (change inner word)
  • sterge tot pana la caracterul X; comanda “dtX” (delete till “X”)
  • indenteaza tot fisierul; comanda gg=G (gg - inceputul fisierului, = indenteaza, G sfarsit)

etc.

E foarte puternic Vim, m-am invatat cu el si nu cred ca as putea reveni la alt editor :slight_smile:

2 Likes

L-am ținut activ cred că vreo jumătate de an și în tot acest timp tot încercam să-l folosesc. L-am dezactivat când mi-am dat seama că singurul lucru la care foloseam vim mode era i sau a :smiley:

Într-adevăr, dt* este util, dar ci*, pe de altă parte… nu prea :smile:

După 15+ ani de qwerty nu cred că voi reuși să fiu prea eficient pe alt layout.

În plus, eu nu cred că peste 100 WPM se mai simte vreo diferență atunci când codezi.

1 Like

Fun fact: devforum permite câteva shortcuts de vim (în special navigarea printre posturi).

Apăsați ? pentru a vedea toate scurtăturile disponibile :sunglasses:

1 Like

Ma si gandeam cu postul lui @victorstanciu de mai sus, s-a terminat cu :wq :smiley: