Szia Uram! Érdekel egy kis nyelvtan? Digitális!

Az egyre gyorsuló világunkban gyakran nem szokás egyes dolgok mögé nézni, megérteni a hozzájuk tartozó filozófiát, pedig ezzel sokat elveszthetünk. A vi, illetve újabban a Vim, vagy a neovim sokaknak egy nemszeretem kötelesség, amit valamely őskövület erőltetett rá a tanulmányai vagy munkája során, és amint lehetett, meg is szabadult tőle. Valószínű, hogy az említett őskövület sem volt tisztában ezen szövegszerkesztők filozófia alapjaival.
Ezt pótolandó íródott ez a szösszenet, illetve azért, hogy rendszerezzem az ehhez kapcsolódó tudásomat.

Lássuk miről is van szó! Murphy számítógépes törvényeiben szerepelt, hogy egy szövegszerkesztő hatékony használatához csak 200-300 billentyűkombinációt kell megjegyezni – hasonlóan a táblázatkezelők, vagy adatbázis-kezelők 200-300 utasításához/parancsához. Összehasonlításként a VS Code egyoldalas puskája (cheat sheet) közel 120 billentyűkombinációt tartalmaz. Igen, ezek elérhetőek a menüből is, de azért valljuk be, a menüben keresgetni az egyes funkciókat, főleg nem egérrel nem a hatékonyságot támogatja.

A legtöbb szövegszerkesztő a szöveg bevitelére van optimalizálva, így amelyik betűt/számot/írásjelet tartalmazó billentyűt nyomjuk meg, az kerül be a szövegbe. Ha szerkeszteni szeretnénk a szöveget –  nagyobb részeket törölni/másolni/áthelyezni – akkor jönnek a mindenféle billentyűkombinációk, melyek rosszabb esetben akár 4-5 billentyű közel egyidejű lenyomását is igényli. Persze gyakran ezek a funkciók menüből is elérhetőek: ekkor nem egyszerre, hanem egymás után kell lenyomni a szükséges billentyűket.

Van azért pár kivétel a szövegszerkesztők között is. Ezek több üzemmódban is képesek működni, ezért is hivatkoznak rá modal editor-ként. Vi és rokonsága esetén az alapvető mód – mely a normal nevet kapta –, szolgál a szöveg szerkesztésére. Ez is mutatja, hogy minek van itt központi szerepe. Itt tudunk mozogni, keresni a fájlban, törölni belőle, vagy áthelyezni szövegrészleteket. Aztán van az insert, azaz beszúró üzemmód, ahol – mint minden rendes szövegszerkesztőben – bővíthetjük a szöveget.

Az ed – a vi elődje – még képernyő nélküli üzemmódra lett tervezve. A vi – mint visual editor – már képernyőre lett optimalizálva 1976-ban. Ekkor elvileg már létezett az egér, de gyakorlatban igen kevesen használhatták, azaz a vi billentyűzetre lett optimalizálva, és az távolról sem volt 105 gombos, azaz napjainkban egy 60%-os billentyűzeten is kényelmesen tudnánk vele dolgozni, ha a Ctrl és Esc kicsit jobb helyen lenne.

vi motion

Én még használtam a PC-t egér és Windows nélkül; tehát emlékszem, hogyan próbáltuk pozícionálni a kurzort a nyíl-billentyűkkel, esetleg a Home/End, PgUp/PgDn billentyűkkel. A vi ennél elegánsabb megoldást talált ki, igaz rá is volt kényszerítve, mert eredetileg nem is voltak ilyen billentyűk.

A hjkl navigáció sokak számára ismerős lehet, mert igen sok jelenleg használt program átvette, gondoljunk csak a GMail-re, bár itt csak részleges az átvétel.

Normál módban ezt a négy billentyűt tekinthetjük a kurzorbillentyűk alteregóinak, ám ennél kicsit jobb a helyzet. Ugyanis lehetőségünk van egy számot begépelni s csak majd azután megadni az irányt. Ahogy várható a 15j megfelel annak, ha tizenötször nyomnánk le a lefele nyilat. Ez működik vízszintes irányban is, ám ott más lehetőségeink is vannak: ugorhatunk a sor legelejére, a sor első nem szóköz karakterére, vagy a sor végére. Itt természetesen nincs értelme külön megadni még egy számot is. Ha viszont a szavak között szeretnénk ugrani, akkor már mondhatjuk azt, hogy például a soron következő ötödik szó elejére ugranánk. Persze nem mindig akarunk számolgatni, ezért van horizontális keresés is, így megadhatjuk, hogy a soron következő vesszőre szeretnénk ugrani, vagy visszafele a harmadik idézőjelre. Ha elszakadunk az adott sortól, ugorhatunk az aktuális, vagy a következő mondat/bekezdés/fejezet elejére, a fájl elejére, végére, illetve az előre definiált könyvjelzőkre. Jellemzően egy-egy ugrásnak egy billentyű lenyomása felel meg. Sőt adott (reguláris) kifejezés következő/előző előfordulására is elugorhatunk. (Az, hogy mit jelent a fejezet, a vi esetén beállítás kérdése.)

Ez csak a lehetőségek kicsiny része, ezért akit érdekelnek a pontos részletek, az a https://vimhelp.org/motion.txt.html URL-n találhatja meg a pontos információkat.

vi műveletek

Miért is fontos a pozícionálás? Mert jellemzően ott akarunk valamit módosítani: beszúrni újabb szöveget, törölni vagy módosítani valamit. Jelenleg általában az egeret használja erre mindenki, odakattint a szöveg valamely pozíciójára, majd visszatér a billentyűzethez. Gondoljunk csak bele, írjuk a programkódot, szükség van egy függvényre, melyet csak akkor használhatunk, ha a kód elején szerepel a megfelelő include utasítás. Egyszer el kell ugrani a kód elejére, ott beszúrni egy szót vagy esetleg egy új sort, s irány vissza az előző pozícióba, hogy folytassuk a kódot. Lehetőleg minél gyorsabban, hogy ne essünk ki a gondolatmenetből. Mindenkinek más a stratégiája: feljegyezhetjük az aktuális sorszámot, és az alapján ugorhatunk vissza. Rakhatunk az aktuális sorra, vagy akár azon belüli pozíciója egy könyvjelzőt, vagy az egy újabb ablakban megnyithatjuk ugyanezt a fájlt, ott ugrunk a fájl elejére, és módosítás után bezárjuk az ablakot.

Persze szokás másképp is használni az egeret: kijelölünk valami szövegrészt (régiót), majd jöhet akár egy törlés, vagy egy parancs – menüből vagy billentyűzetkombinációval.

Vi esetén az aktuális pozíció és a pozícionálás kijelöl egy régiót. Annak érdekében, hogy egyszerűbben tudjak fogalmazni a kiindulási pozícióra az angol elnevezés alapján hivatkozzunk horgonyként, míg az ugrás utáni pozícióra meg kurzorként. Tehát ha leütjük a parancs (törlés, csere, behúzás, kisbetű/nagybetű csere, stb.) billentyűjét, majd pedig a mozgással megadjuk a régiót – azaz a horgony és kurzor közti területet –, akkor a régióra végrehajtódik a parancs. Lássunk erre egy példát: ha törölni szeretnénk a soron következő szót – na meg az azt követő szóközt – a dw kombinációt kell használnunk. Itt az igét jelölő billentyűt követi a tárgy billentyűje – vagy majd billentyűi –, és ez megfelel az angol szórendnek is. Persze nem véletlen! Ha a következő három szót szeretnénk törölni, akkor d3w illetve 3dw közül választhatunk. Ha az aktuális sorban a második idézőjelig szeretnénk törölni, akkor a d2f" a megfelelő parancs. Az ötödik bekezdés végéig pedig a d5} paranccsal törölhetünk.

A vim 16 operátort ismer, ebből egy a törlés. A vi-ban megtalálható a csere (c), a másolás (y), behúzás (indentálás, <,>), kisbetű/nagybetű váltás (~), valamint külső parancs hívása (!). Például a !3}wc parancs a soron következő három bekezdésben számolja meg a karakterek, szavak és sorok számát. (Az eredeti állapotot egy u-val állíthatjuk vissza.)

Azzal hogy szabadon kombinálhatjuk a műveletet és a mozgást, több ezer billentyűkombinációt válthatunk ki.

Az már csak hab a tortán, törlés, csere és másolás esetén megadhatunk egy regisztert – régi nevén puffert –, amire clipboard-ként érdemes tekintenünk, és szükség esetén onnan elővehetjük a szöveget újra és újra. A vi 26 általunk szabadon használható regiszterrel rendelkezik. Például "ad3} az a regiszterbe menti el a három törölt bekezdést.

Egy apróság: ne felejtsük el, hogy a programozók lusták és kényelmesek. Ha lehetőség van rá, akkor az ujjtörő mutatványok mellett bevezetnek alias-okat. Így lehet a d_ helyett dd-t, az y_ helyett yy-t használni, csak hogy eljussunk ahhoz a pár billentyűzetkombinációhoz, amit egyszer belénk vertek. Hogy teljes legyen a kép, az 5dd öt sort töröl, mert a parancs előtt is lehet számot megadni.

Az, hogy a parancs előtt és után is megadhatunk egy számot ahhoz a szörnyszülötthöz vezet, hogy a 3d2w összesen hat szót (háromszor kettő) töröl. Arra még nem jöttem rá, hogy ennek van-e kézzel fogható haszna, de a vis-nek sikerült félreimplementálnia, és a pár tesztem alapján szorzás helyett összefűzi a számokat, így az előbbi példával harminckét szót törölhetünk ki.

Tovább is van, mondjam még?

Amit eddig leírtam, az közel ötvenéves technológia. A Vim – hivatalos nevén Vi IMproved – ezen egy kicsit továbblépett. Ha törölnénk egy szót, mondatot, vagy épp bekezdést, akkor hagyományosan érdemes annak az elejére/végére ugranunk, mert különben csak részben töröljük. Ezért lett bevezetve a text-object fogalma. Valójában ez is egy régiót fog meghatározni, de a kiinduló pontunk nincs feltétlenül a régió határán: magyarul mind a horgony, mind a kurzor elmozdulhat az aktuális pozícióról.

Ezzel a módszerrel kijelölhetjük az aktuális szót, mondatot, idézetet, zárójelet, bekezdést. Bizonyos esetekben illik benne lenni a szerkezetben, azaz az idézetben, zárójelben, ám a Vim néha keresi meg nekünk azt, ami borzasztóan kényelmessé teszi a dolgot. Azért van ebben egy kis következetlenség. Ha páros határolókra hivatkozunk (zárójelek, vagy kacsacsőr), ott akár bekezdésekkel későbbi szerkezetet  is megtalál a vim, s alkalmazza rá a megadott operátort. Viszont ha idézőjelekről van szó – és nem vagyunk az idézet belsejében –, akkor csak az adott sorban hajlandó keresni.

Itt két módosítót kell megjegyeznünk: i (inner) és a (around). Ha egy idézetről van szó, akkor az i" jelzi az idézőjelek közti részt, míg az a" beleérti a határoló idézőjeleket is. Ezekre is használhatjuk a korábban látott operátorokat, így a da" törli a teljes idézetet, míg a ci" lehetővé teszi, hogy lecseréljük a tartalmát, függetlenül attól, hogy hol is vagyunk az idézőjelek között. Annak érdekében, hogy a front-end fejlesztők is boldogak legyenek, a html-tag is megjelent text-object-ként, azokat is lehet könnyedén szerkeszteni.

Persze itt is használhatunk számokat, és akkor nem csak a legközelebbi zárójel tartalmát módosíthatjuk, hanem azét is, amelyben ez a zárójel megtalálható, például 2da].

Remélem hogy ez a rövid áttekintés betekintést engedett a függöny mögé, és talán segít rendszerezni az eddigi tudást, valamint fokozza a hatékonyságot. Kiegészítésként javaslom még a https://www.youtube.com/watch?v=wlR5gYd6um0 videót, ami további példákat mutat be, illetve olyan plugin-okat, melyek tovább bővítik a lehetőségeinket.

Lehet másképp is?

Vi használóként könnyen érezhetjük magunkat bátornak – nem vak ez a ló, hanem bátor –, mert nem látjuk, hogy mekkora lesz a mozgás, mire vonatkozik a korábban megadott operátor. A vim bevezette a visual üzemmódot, ahol látható az aktuális kijelölés, amit vi mozgásokkal tovább alakíthatunk, és ha elégedettek vagyunk vele, akkor alkalmazhatjuk rá az eddig megismert operátorokat, sőt további parancsokat. A vim help természetesen ismerteti az összes lehetőséget: https://vimhelp.org/visual.txt.html Ezzel valójában túlléptünk az ige-tárgy megfelelésen, ugyanis ez inkább ige-ige kapcsolatnak felel meg, mert a kijelölés is egy művelet lesz, ahogy majd az operátor is, mely a kijelölésre hat.

Mondhatnánk az, hogy egérrel is így dolgozunk, előbb kijelöljük a régiót, majd jön egy billentyűkombináció (igaz ott ^C/^X/^V). Van benne igazság, de itt nem kell egeret használni, és a vi mozgások széles repertoárja alkalmazható a régió kialakítására. Ízléseken és pofonokon felesleges vitatkozni. Egyeseknek kell az a segítség, amit a vizuális üzemmód ad, mások pedig egy stratégiát dolgoztak ki: a https://media.pragprog.com/titles/dnvim2/vim.pdf fájlban dicsőített ismétlés/redo (.) – ami itt véletlenül sem az undo párja – használatának egy külön blog-bejegyzést érdemelne. Ha szeretnénk úgy 11-13 szót kitörölni, és nincs semmi fogódzó (vessző, pont, speciális írásjel), amivel nagyobb darabokat irányított módon törölhetnénk, akkor kiadhatjuk mondjuk a 9dw parancsot, s ekkor már egyből lehet látni, hány szó maradt, s például egy 3. segítségével töröljük a megmaradó három szót. (Itt a pont az ismétlés jele, a szó törlése az a módosítás, amit még szeretnénk háromszor megismételni.) Ha pedig véletlenül elrontottunk valamit, mindig ott van az undo (u), ami után újra próbálkozhatunk.

Esetleg fonákul?

Volt aki úgy gondolta, hogy miért nem a visual mód az alapértelmezett mód, vagy legalábbis miért nem látjuk folyamatosan a cselekvés tárgyát, mint bármely rendes szövegszerkesztőben? A filozófiai
részletek megismerhetőek a https://kakoune.org/why-kakoune/why-kakoune.html  URL-en. Engem első látásra nem fogott meg a Kakoune editor, viszont az ezt a szellemiséget követő Helix már annál inkább.

Meg kell hagyni, sokkal egyszerűbb lenne az átállás, ha nem lenne átfedés a Vim és Helix között. Sok minden azonos a két programban, de még több az eltérés, ezért az ide-oda váltás nem olyan egyszerű. Szerencsére a vi-mozgás alapértelmezésben
megegyezik. Viszont más lesz az eredménye. A 3w elvileg három szót lép előre. A vi esetén a horgony marad ott, ahonnan indult az egész, s a kurzor a harmadik szó utánra kerül. A kurzor a Helix esetén is itt lesz, de a horgony már a harmadik szó elején. Ha most adjuk ki a törlés operátorát, akkor csak a harmadik szót töröljük ki, nem pedig a három következőt.

Lássunk még egy példát az eltérésre: ha csak egy szót szeretnénk a Vim-ben törölni, épp az aktuálist, akkor a diw a leginkább használt/javasolt billentyűkombináció – azaz egy szöveg-objektum, amit bárhol kiadhatunk, nem kell speciális pozíciót elfoglalni, s ami még hiányzott a vi-ból.

Helix-ben a miw kijelöli az aktuális szót, ezt követheti a d, de ennél rövidebb, és emiatt is javasolt az bed, ahol előbb elugrunk a szó elejére – azaz idekerül a kurzor, míg a horgony ott van a szó közepén, majd a b elviszi a szó végére a szó végre a kurzort, miatt a horgony a szó elejére kerül, így már az egész szót kijelöltük, azaz törölhető. Elsőre nagyon idegen ez a dupla pozícionálás, de hozzá lehet szokni. Programszövegeknél kicsit könnyebb a helyzet, ott akár mozoghatunk az kód absztrakt szintaxis fáján is, így könnyebb kijelölni egy-egy egységet.

A vi/Vim tanulásának egyik eszköze a https://www.vimgolf.com, ahol az a kérdés, hogy egy adott szövegmódosítást hány billentyű leütéssel tudunk elérni. Találtam olyan forrást, amely szerint általában a Helix hatékonyabb, mint a Vim, de ezt nem ellenőriztem. Akit érdekel itt próbálkozhat a Helix-szel: https://keygli.de

Arra figyelmet kell fordítani a Helix-ben, hogy hol van a horgony és hol a kurzor, mert ennek hatása van a következő kijelölésre. Emiatt több figyelmet igényel a szövegszerkesztő, míg a vi(m) esetén – aminek a viselkedése kiszámíthatóbb –, esetleg az agyunk már pár művelettel az ujjaink előtt jár, így könnyebben elérhetjük a flow állapotát. Persze ehhez megfelelő gyakorlat szükséges, amire nem mindenki hajlandó.

A https://docs.helix-editor.com/keymap.html  ad egy rövid összefoglalót, hogy milyen lehetőségein vannak. Igen sok ismerős bejegyzés található – ha ismerjük a vi-t –, de először semmi esik kézre. Érdemes végigkövetni a szövegszerkesztő beépített tutor-ját, ami végigvezet a kezdő lépéseken, s egy jó alapot szolgáltat a későbbi ismerkedéshez.

A rossznyelvek szerint a (n)vi(m) user onnan ismerszik meg, hogy naponta beleszerkeszt a .vimrc vagy éppen init.lua fájljába, sőt többet foglalkozik a szövegszerkesztője konfigurációjával, mint az érdemi munkával. A Helix esetén erre nem igazán van szükség, jópár vim plugin tudása már be lett építve a szövegszerkesztőbe, és már rövid konfigurációs fájlokkal is hatékonyan dolgozhatunk.

Ha valaki most ülne fel a neovim hype vonatára – minden lényeges előismeret nélkül –, akkor lehet, hogy a Helix-el jobban jár. Ám ezt mindenkinek saját magának kell mérlegelnie, mert például az általam használt távoli szerveren csak egy régebbi Vim érhető el, oda a Helix biztos nem kerül fel. Pedig pillanatok alatt sikerült bekonfigurálnom a Python LSP-t, hogy az normálisan fusson a Helix
alatt, míg ez Vim alatt eléggé problémás volt évekkel ezelőtt.

Akinek nem ismeretlen a vi, esetleg vethet egy pillantást a https://asta.boserup.eu/forest/rethinking-helix/  blogbejegyzésre, mert az előbbi nyavalygásaim itt bővebb lére lettek eresztve, több példával.

Viszonylag új szereplő a Ki https://ki-editor.github.io/ki-editor/, ahol már végleges a szakítás a vi famíliával, legalábbis a megszokott mozgások terén, de következetességet ígér. (Hosszasan sorolja, hogy a vim és helix hol következetlen, amiben van valami igazság, de nekem már volt időm hozzászokni.) Ebben a szövegszerkesztőben alapvetően az absztrakt szintaxis-fán lépdelhetünk, és annak aktuális részét/részeit módosíthatjuk. Érdemes megnézni a szövegszerkesztő wiki-jét, mert az egyes Ki-mozgásokat interaktív animációval mutatja be. Tervben van, hogy megismerkedem ezzel a programmal is, viszont mivel mindent újra kell tanulni, lassú lesz a tanulási görbe.

Összegzés

Divatos eszköz lett a Vim és a neovim, igen sok Youtube videóban használják a kódolás bemutatására. Viszont gyakran látni, hogy az előadó épp hogy csak használni tudja a programot, minimálisak az ismeretei. Pedig a vi-nyelvtan megértésével, akár pár tucat mozgás és 3-5 operátor megismerésével már sokkal hatékonyabbak lehetünk, aztán majd szépen sorra lehet további mozgásokat, operátorokat elsajátítani. Csodát ne várjunk, nem leszünk tízszer hatékonyabbak, de hamar érezhetjük az előnyöket.

Hozzászólások

Nagyon jó összefoglaló, szinte kedvcsináló. Bár nálam a Windowsw default editor is vim. ;)

Ahogy írod az összefoglalóban, tulajdonképpen a parancskészlet töredékének ismerete is elég lehet egy adott feladat elvégzéséhez. Van néhány olyan könyv, pl. ez, aminek van egy egyoldalas parancskészletet összefoglaló melléklete, amit összehajtva akár könvjelzőnek is lehet használni. A vi használatával megszerezheted a tudást az ed/sed/awk (regexp), meg a set -o vi használatához is. Az utóbbi inkább AIX/ksh mellett működik jól, mert a bash "kizökkenthető" ebből az üzemmódból. Ez az editor támogatja a hozzám hasonló cinikus fickókat: Nna, ezt csináld utánam Windows alatt! :-D

Például vi *.cfg, avagy melyik szövegszerkesztőre bíznád, ha a budapesti telefonkönyv text inputjában néhány karaktert kellene megigazítani?

A C programozók néhány makró segítségével kialakíthatnak egyszerű IDE-t. Windows utf-8 szerkesztéskor nálam a shift-U kapcsol át.

Egy unix shell programozónak nem szabad elfelejteni, hogy a rendszer nyomdai szövegelőkészítésre is készült. Többször megnéztem szótárban hogyan mondják az ángolok azt a bizonyos text formattáló funkciót - és lám, volt ilyen unix parancs!

en ott elvesztem, hogy mi a turoert lett a hjkl az alapertelmezett, lett volna inkabb ijkl (esszerubb), vagy jklé (minden ujjra egy).

Elegge beleastam magam, es igazabol nincs valasz, azon kivul, hogy maradjunk a hjkl-nel mert regen az volt, nem lehet atterni. Kb. mint elektromossagban a +- elrontasa.

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

Azon a terminálon, ahol a vi készült, ide voltak felvésve a nyilak. Ezért jó ötletnek tűnt ezt választani. 

De azért van ahhoz is köze, hogy a Ctrl-H a balra törlés, a Ctrl-J a soremelés kódja. Továbbá ekkor még nem volt egér a jobb kézben (így nem kényszerült senki az WASD használatára), s alaptartásban a jobb mutatóujj pont a J fölött várakozik. Így nem sokat elmozdítani az ujjakat.

A Ki editor viszont az ijkl billentyűk mellett döntött (már ha qwerty-t használunk).

AL

Azert ez a hjkl majdnem annyira logikus, mint ha a ldur lenne (left, down, up, right). Vagy mondjuk ws3e (west, south, 3orth, east). Az lenne a lenyege, hogy az ujjaid alatt vannak a legfontosabb gombok, erre odebb kell csusztatnod, hogy ala keruljenek.

A koncepcio alapvetoen tetszene, hogy kulon modok vannak. Viszont annyira logikatlan, szarul van kitalalva, hogy nem hatekony. Az sem az, hogy majd kulon szamolgatod, hogy 35 sort akarsz lefele menni, inkabb ranyomsz a lefelere, es addig nyomod.

A sajat, layeres, makrozhato billentyuzet viszont hasonlo, es minden program alatt mukodik. Raadasul tenyleg eleri, hogy ne kelljen a kezedet odebbmozgatnod, ha jol talalod ki a kiosztast (meg ha olyan, az egeret is vezerelheted rola).

A strange game. The only winning move is not to play. How about a nice game of chess?

Sajnálom, hogy nem ment át a lényeg. 

Számolgatni én sem szeretek, nemrég az elemző jelzett, hogy az egysoros, nem túl sok szóközt tartalmazó Json fájl 1250-dik karakterénél probléma van. Egy megszokott szövegszerkesztővel lett volna gondom. Vim-ben ráállva az első karakterre, a 1249l parancs segített, s egyből láttam, hogy mi a baj. 

Ízléseken és pofonokon felesleges vitatkozni. Nekem bejött az abszolút címzés. Noha a vi lehetővé teszi a 123G parancsot, hogy a 123-dik sorra ugorjunk, én jobban szeretem a :123<CR>-t, mert ekkor a szám a bal alsó sarokban képződik és nem a jobb alsóban, ami kiesik a látóteremből. Ezt azért használhatjuk, mert a :set nu paranccsal bal oldalt megjelennek a sorszámok a sorok előtt. A vim további lehetőségként szolgáltatja a relativenumbers kapcsolót, mellyel az aktuális sor bal oldalán a valós sorszám jelenik meg, míg alatta és fölötte elkezdődik a számozás egytől. Így ha látom a sort a képernyőn, már tudom is, hogy milyen számot kell beírni a j vagy k elé. Viszont az messziről bűzlik ha több tucat sor van minden megszakítás nélkül. (Tudom a log-fájlok ilyenek, de arra megfelel az előbbi példa.) Az ember általában el tud számolni ötig, ezért is ez a határ a strigulázásnál. Emitt ránézésre lehet mondani, hogy négy bekezdéssel lejjebb szeretnék menni, vagy két függvénnyel lejjebb. Ha már közel vagyunk, akkor lehet finomítani a mozgáson, és már sorokban számolni.

Gondolom, hogy van akinek belefér a munkaidejébe az hogy csak a kurzorbillentyűkkel mozogjon, ahhoz gondolkodni sem kell. Más meg szenved azalatt, ami eltelik a gondolat és annak megvalósítása között. Drew Neil könyvének nem véletlenül alcíme az, hogy gondolatgyors szövegszerkesztés. Meddig juthat el ezzel egy ember: https://www.youtube.com/watch?v=y6VJBeZEDZU s ne feledjük, hogy Primeagen ekkor még Dvorak kiosztást használt, ami szétdobálja a hjkl billentyűket. Én ezzel kérdőjelezném meg, hogy nem hatékony. Igaz, ehhez fel-le-balra-jobbra-PgUp-PgDn-Home-End nyolcasa helyett érdemes megtanulni vagy harminc billentyűparancsot. 

Az, hogy könnyedén mozgathatok mondatokat, bekezdéseket, függvényeket – nem feltétlenül egyet, hanem ötöt-tizet –, ugrálhatok fájlok között, függetlenül, hogy saját gépen vagyok vagy bármely távoli Linux-os szerveren, az nem váltja ki egy layeres, makrózható billentyűzet. A még ha van 20 makróm is, nem összemérhető azzal a sokezer lehetőséggel, amit a parancs-mozgás kombináció ad a vi esetén. A vi ötven éve alatt sikerült kikupálódnia, bár ehhez a vim feladta a kompatibilitást, amit talán nem sokan bánnak. 

Kicsit régi, de még mindig érvényes ismertető: https://www.ele.uri.edu/faculty/vetter/Other-stuff/vi/009-index.html Érdemes belekezdeni, hátha ebből kiderül, hogy miben más az eredeti vi, mint a divatos szövegszerkesztők.

 

PS. Ha az ésszerű dolgok győznének, akkor nem qwerty vagy még inkább qwertz kiosztáson írnánk ezeket a sorokat. 

AL

hogy Primeagen ekkor még Dvorak kiosztást használt, ami szétdobálja a hjkl billentyűket.

Azt azért tegyük hozzá, hogy az a Dvorak nem az a dvorak amire az ember gondol.

Azaz egyedi dvorakot talált ki, mert szerinte az alap kretén kiosztás.

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

Azert ez a hjkl majdnem annyira logikus, mint ha a ldur lenne (left, down, up, right). Vagy mondjuk ws3e (west, south, 3orth, east). Az lenne a lenyege, hogy az ujjaid alatt vannak a legfontosabb gombok, erre odebb kell csusztatnod, hogy ala keruljenek.

Viszont annyira logikatlan, szarul van kitalalva, hogy nem hatekony.

Az latszik, hogy sosem hasznaltad a vim-et, maskepp nem irnal le ilyen badarsagokat.

Azt viszont mindenki tudja, hogy az F5 a copy. :-D

Még DOS alatt használtam az Xtree Pro Gold-ot, amihez 99%-ig elegendő volt a parancsok ismerete. Na, ott a copy egyszerűen C volt, de az sem ment sokaknak. :-DDD Vajon miért? Vajon mi a logikus ezek után? A többség az F5-re voksol! :-D

Linuxra és unixlike rendszerekre vannak Xtree klónok, pl. ytree.

Az F5 viszont problémás. Egyes billentyűzeteken nincs rajta, csak layer-váltással tudod használni, amihez extra billentyűt kell nyomkodni. A másik, hogy ahhoz, hogy a funkcióbillentyűket nyomkodd, el kel hagyni a gépírási alaptartást, el kell hagyni az alfanumerikus részét a billentyűzetnek. Egyes rendszerek tty-aiban is problémás lehet a funkcióbillentyűk kezelése.

“Linux isn't an OS, it's a troubleshooting sim game.” (a YouTube commenter)

Félreértetted. Az F5 a Norton Commander és utódai fícsöre. Az egybites népekről beszélek, akik még a copy parancsot sem ismerik.

Az is egy tipikus mondásom, hogy a Windows Commandert is csak az használja, aki nem ért hozzá. ;)

Alaptartás... :-D

Régen az alacsonyabb iskolázottságú lányok jártak gép- és gyorsíró tanfolyamra. Mindenkinek, aki számítógépet használ ezt kellene tennie. Mondom én is, de nem teszem. :( Pedig egy ügyfélszolgálatosnál is azonnal felismerhető, ha tud gépírni. Néha találkozhatunk ilyen üdítő kivétellel.

Egyes tty... Nekem soha nem volt gond, ha F10 helyett  ESC 0-át kellett használni. Működik, de a terminfót is meg tudom írni.

mar mi nincs benne? Normalisan a J billentyun pihen a jobb kezed, van is rajta egy kis bizbasz, hogy erezd. Altalaban lefele scrollozom a legtobbet, tehat csak lenyomom a jobb mutatoujjam. Ha felfele megyek, akkor kozepso ujj.
Vim-ben oldalra tipikusan nem a H es L billentyuket hasznaljuk, ezert lehetnek 1 tavolsagra a mutatoukktol, illetve gyurusujjon. Vannak sokkal jobb modszerek az oldalra mozgashoz. De ha a hjkl-lel gond van, akkor inkabb nem folytatom. Tanulni, tanulni, tanulni!

Persze. A jhkl csak alap mozgás, kezdők ezt ismerik meg először, de sokszor ez a legkevésbé hatékonyabb. Lehet mozogni szavanként, mondatonként, bekezdésenként (kódban függvényenként), zárójelenként, lehet azonnal specifikus sorhoz ugorni, lehet használni a keresés funkció (f, F, t, T, /, ?), ezekkel még gyorsabban lehet az adott részhez ugorni

“Linux isn't an OS, it's a troubleshooting sim game.” (a YouTube commenter)

Lehet mozogni szavanként, mondatonként, ... zárójelenként,

Ez vízszintes mozgás, azaz nem scrollozás.

bekezdésenként (kódban függvényenként), zárójelenként,

Ez nem hatékony. Ez kijelöléskor jön jól, amikor valamit beillesztesz valami helyére, vagy kivágod/törlöd.

Navigálásra azért rossz ( paragrafus: '{', '}', valamint fuggveny: '[f', ']f' ), mert nem egységeset ugrik, azaz mástól függsz, hogy hogyan van a kód formázva, így fájlonként random hogy mekkorákat ugrál a kód, így 

szemmel állandóan keresni kell.

lehet használni a keresés funkció (f, F, t, T, /, ?), ezekkel még gyorsabban lehet az adott részhez ugorni

Hat a f,F,t,T az megint vízszintes navigáció és nem scrollozás.

A '/' és '?' az sima keresés, az olyan, mint más szövegszerkesztőkben Ctrl-F -fel navigálnál. Ez sem scollozás.

 

Szerintem hatékonyan így lehet scrollozni:

Ctrl-d és Ctrl-u -t remappeled :

Ctrl-d -> Ctrl-d + zz

Ctrl-u -> Ctrl-u + zz

 

Azaz fél képernyőt ugrasz, de a view-t középre is helyezed, így mindig ugyanoda nézel szemmel, nemvagy elveszve a változó ugrálásokkal, ellentétben a [f, ]f, {, } gombokkal.

Kellően gyors, azaz rátámaszkodhatsz a billentyűre és elég hamar leérsz a fájl aljára több ezer sornál.

Ezt kombinálod a relatív sorszámozással. Így amikor már majdnem ott vagy ahol lenni akarsz, és látod a képernyőn, hogy pontosan hova akarsz érkezni, akkor a 

végén benyomod, hogy 12j vagy 9k és pontosan sorra érkezel.

Ez a leggyorsabb.

Ha meg giga fájlban (10 ezer sor és felfele) navigálsz, és tudod, hogy nagyjából hol keresed (eleje, közepe, vége), akkor meg egyszerűen beírod, hogy 75%, és 

innen Ctrl-u és Ctrl-d, és a végén 21j és pontosan sorra érkezel.

 

Ezek egyike se h,j,k,l mozgás (azaz a végén a pontos sorra ugrás igen, de tök mindegy melyik karakter már), azaz továbbra is fenntartom, hogy a hjkl 

gombválasztás egy kretén f*szság. De ha te eltérsz, akkor az már nem vim mozgás, és csak magadat szivatod.

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

A vim one size fits all program, mindent is be lehet rajta állítani. Ha nem tetszenek a kurzormozgató billentyűk, akkor át lehet azokat definiálni, majd vinni magunkkal a vimrc fájljunkat (vim -u sajatrc), hogy más gépeken is így tudjuk használni. 

nnoremap u k
nnoremap d j
nnoremap l h
nnoremap r l

Persze a vim eléggé kihasznál minden pozíciót (http://www.viemu.com/vi-vim-cheat-sheet.gif), így valamit biztos kitakarunk vele; de valamit valamiért.

AL

vim.keymap.set("n", "<C-d>", "<C-d>zz", { noremap = true, silent = true })
 

Azaz en nvim-ezek, így ha vinnem kéne a konfigfájlomat, akkor komplett mappát kellene cuccolnom.

Tehát nem érdemes az alap vim-től eltérni, mert akkor máshol lesz idegen minden és csináltam magamnak

egy egyedi szövegszerkesztőt.

Szóval jah, próbálj fps-ezni hjkl gombokkal, majd mondjuk asdw gombokkal, és meglátod, melyikkel lőnek hamarabb fejbe. 

És ott a válasz, hogy melyik hatékonyabb.

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....