Mi az a vi* hype?

A vi(m) editorral kapcsolatos érzelmek igen széles skálán mozognak. Egyik végleten azon infós diákok vannak, akiket valamilyen bevezető Linux kurzuson rákényszeríttetek a vi használatára, s számukra már az is lelki törést okozott, hogy vagy egy kill paranccsal kellett lelőni a szövegszerkesztőt, vagy ki kellett guglizniuk, hogy egyáltalán hogyan lehet belőle kilépni. (A stackoverflow megfelelő oldala már hárommilliós látogatottságnál jár.) A másik végleten pedig azon szépirodalmi szerzők állnak, akik mindenképpen ragaszkodnak a vi valamelyik klónjához.

Viszont akár imádjuk, akár gyűlöljük, a vi jelentős hatással volt az informatikára az 1976-os megjelenése óta.  IDE-k jönnek-mennek, távolról az Eclipse, Netbeans, Visual Studio, IntelliJ, VS Code vonalat követtem, s talán mindegyikhez akad vi plugin-package, mellyel a vi billentyűzetkombinációt használhatjuk ott is. Vagy gondoljunk a gmail-re, a feedly-re és sok egyéb portálra, ahol szintén fel lehet fedezni a vi örökséget.

Egyrészt valóban van egy megmagyarázhatatlan hype, mellyel szent őrültként kezelik azokat és ezzel együtt fel is néznek azokra, akik a rengeteg, lényegében ingyen elérhető keretrendszer, szövegszerkesztő, IDE megléte ellenére mégis a valamely vi klónnal intézik napi feladataikat. Páran magukat magasabb polcra helyezve konferenciákon vagy YouTube videókban (n)vim segítségével demózzák mondanivalójukat, bár a szakértő szem látja, hogy még csak a vi tutorial feléig jutottak el, de már ennyi ismerettel is magabiztosan használják a programot. Azt persze durva lenne elvárni, hogy valaki belülről-kívülre ismerje a Vim-et, mert az öt évvel ezelőtti verzió manuálja több mint háromezer nyolcszáz A4-es oldalon fér el, s azóta volt egy verzióváltás is.

Ha valaki bírja az angol nyelvet, van ideje, és kicsit kíváncsi a vi-ra, látogasson el a http://dahu.github.io/vim_waz_ere/1_editor_fundamentals.html oldalra. Ha teljes ismertetőt nem is kap, de egy jó kis kedvcsinálót igen. (Érdemes átlépni a megfelelő GitHub oldalra is, mert a vim verzió nem teljes, de mellette ott van az eredeti vi-os is.)

A vim napos oldala

Manapság szinte már minden programtól elvárjuk, hogy valamelyest testre szabható legyen, az ismétlődő feladatokat tudjuk benne automatizálni. Már a vi-ban lehetőség volt makrók elkészítésére, többszöri futtatására. Avatott kézben ezzel is elképesztően sok mindent el lehet érni, de a VimScript megjelenése lehetővé tette a plugin-ok meglétét, amivel szinte mindenre rá lehetett venni a vim-t. Ezen felül ma már van Lua,  Python,  TCL és  Perl interpreter is a programban, amivel el lehet kerülni a VimScript alapos megismerését. Egy idő után megjelent a terminál is a programban, és könnyedén lehetett a szövegből a terminálba másolni, illetve onnan vissza. Talán a legújabb újdonság az LSP, melyből elérhető már belső is, így nem kell külső programokra hagyatkozni.

Már vi is szoros kapcsolatban állt a környező operációs rendszerrel, a megadott szövegrészt át lehetett futtatni bármely külső filter-en - pl. sort, grep - adott szövegrészt ki lehetett menteni fájlba, vagy fájlok tartalmát beszúrni a szerkesztett szövegbe. A Unix filozófiát követve nem feltétlenül kell mindent újraimplementálni a vim-ben, bár pár apróság esetén (pont a sort és a grep) ez mégis megtörtént. Hivatkozási alap lehet, hogy nem csak Linux környezetben fut a vim.

A Unix-ból megszokott módon szövegfájlokkal állíthatjuk be a vim-et. Egyrészt rengeteg kapcsoló van, másrészt közel húszezer plugin érhető el (https://vimawesome.com/). Mivel sokak szokása a konfigurációs állományaik megosztása, könnyedén összeollózhatunk egy nekünk tetsző beállítást. Bár a vim felhasználók rendszerint a gúny tárgyai, hogy többet foglalkoznak a beállításaik finomhangolásával, mint a valódi munkával.

Persze nem lehet elfelejteni hogy nem vagyunk egyformák. Van aki egy számítógépen éli világát, míg más sok tucatnyi gépen dolgozik, esetleg azokat másokkal megosztva. Előbbi esetben igen barokkos konfigurációs fájlokban is lehet gondolkozni, míg a másik esetben érdemes megtanulni az alapbeállításokkal élni, vagy legalábbis egy pársoros konfigurációs beállítást megjegyezni, amit bármikor tud reprodukálni az ember. Közösen használt gépeken pedig lehet személyre szóló konfigurációs fájlokat használni, s így nem barmolunk bele a kollégák beállításaiba. Javaslom a https://www.youtube.com/watch?v=XA2WjJbmmoM videót, mely bemutatja, hogy sok minden elérhető a vim-ben, amit sokan mégis plugin-nap akarnak megoldani.

A vim árnyékos oldala

A Wikipédia viszonylag jól leírja a vi keletkezésének körülményeit, illetve azt, hogy jókor volt jó helyen ez a program: https://en.wikipedia.org/wiki/Vi_(text_editor). Persze már távol vagyunk a 300, majd 2400 baud-os modemektől, melyekkel is használható volt az eredeti vi, bár már ott is feszegette a határokat, például egy idő után nem fért el a PDP11 memóriájában. A vim a kilencvenes évektől kezdve újabb és újabb lehetőségekkel bővült, melyekből az előző részben megemlítettem párat. Természetesen ezzel rettenetesen felduzzadt maga a program, de mivel a számítógépek fejlődése sem állt le, nem érezni a lassulást. Lassan már háromszázezer kódsorról beszélhetünk.

Bram Moolenaar - mint a vim fő fejlesztője - kötelességének tartotta a minél szélesebb elérhetőségét a programnak, ezért még ma is letölthetünk többek között MS-DOS, Amiga vagy OS/2 verziókat. Páran ezzel az örökséggel nem értettek egyet, ezért is indult el a Neovim kezdeményezés, ahol nagyjából a negyedét lefaragták az eredi kódnak, és a VimScript-es beállítások és plugin-ok mellé emelték a Lua alapú beállításokat és plugin-okat. Egyesek szerint ezzel nagyon megkönnyítették, mások szerint elbonyolították a program beállítását. A https://youtu.be/TQn2hJeHQbM?si=j52t7p8eBL8WLNbW URL-n egy friss videósorozatot találhatunk, mely bemutatja a neovim egy lehetséges beállítását. Mindenesetre igen könnyű elveszni a lehetőségek között, s bár elvileg mindenki képes beállítani a saját rendszerét a saját szájíze mentén, ez nem feltétlenül lesz rövid folyamat. Főleg ha belevágunk saját plugin-ok írásába is.

Vis

Néhány embert időnként zavar a - ki nem használt - lehetőségek tárháza és vágyik a minimalizmus után. Sem a vim, sem a neovim nem fogja elkényeztetni, mert ezek már hatalmasra nőttek. Viszont van egy program a https://github.com/martanne/vis címen, ami fura kísérlet a vi és sam szövegszerkesztőket próbálja ötvözni. A sam a plan9 félig meddig grafikus szövegszerkesztője (http://doc.cat-v.org/plan_9/4th_edition/papers/sam/ illetve https://www.youtube.com/watch?v=qENyNXnMZ6o), ami maga megérne egy külön cikket, miután ennek is egyre másra jelennek meg friss klónjai. A vis alapvetően a sam speciális reguláris kifejezéseit veszi át, illetve a neovim-et követve tartalmaz egy Lua interpretert, így lehetővé téve Lua-ban írt plugin-ek használatát. Bár ilyenekből csak pár tucat elérhető, de azok igen hasznosak, legalábbis számomra. Itt is lehetőség van színsémák használatára, illetve szintaxis-kiemelésre. Kis erőfeszítéssel a szövegszerkesztő által nem ismert programnyelvek esetén is összeállíthatunk egyedi parser-t a szintaxis-kiemelésre. Mivel az Ubuntu nem igyekszik a legfrissebb verziót csomagként elérhetővé tenni, a GitHub-ról letöltve egyszerűen lefordíthatjuk saját részünkre. Pár évtizede már nem fordítok magamnak kernelt, és megelégszem az apt kínálatával, de itt kivételt tettem. Több hónapja használom, szinte teljes munkaidőben. Bár a hatékonyságon még lehetne javítani - mármint az én hatékonyságomon, nem a programén - mert vannak még számomra fehér foltok a program utasításai között, amit szeretnék megismerni, hátha érdemben tudnám használni.

Vip

Ha valaki még inkább minimalista (és kicsit mazochista is), akkor neki is tudok ajánlani egy programot. A picolisp rendszernél hosszú évekig a vim volt a javasolt szövegszerkesztő. Aztán - lényegében proof of concept alapon - összedobtak egy vi klónt picolisp nyelven: https://picolisp.com/wiki/?vip

Miután közel kétezer soros kódról beszélünk, ahol a kódsorok igen rövidek, már az is értékelendő, hogy egyáltalán használható a program. Az emberi elme itt is csodás dolgokra képes, a szivárvány zárójeleknél - mivel alapvetően lisp programnyelvről van szó - leesett az állam, főleg milyen kevés kóddal lett megvalósítva. Picolisp programok írására ez a program tökéletes, de más feladatokra nem szívesen ajánlanám. Viszont egy megtekintést szerintem szintén megérdemel.

Modal editor

Ennyi dicséret és szidás után még mindig nem szóltam arról, hogy mivel nyújt többet, vagy miben más a vi mint más szövegszerkesztő, s főleg miért érdemes energiát fektetni a megtanulásába. Számomra a modalitás egy meghatározó tényező. A legtöbb szövegszerkesztőben egy billentyűnek, billentyűkombinációnak egy jelentése van. Így a betűk, számok, írásjelek saját magukat jelentik (azokat szúrjuk be velük a szövegbe). Ezzel letudtunk nagyjából ötven billentyűt. A maradék bő ötven persze nem lesz elég a szövegszerkesztő/IDE által nyújtott több száz funkcióra, ezért előjönnek a Ctrl, Alt, Super és egyéb kombinációk.

A modális szövegszerkesztőben több mód is van, és ugyanaz a billentyű különböző módokban mást és mást jelent. Miután jellemzően többet babusgatjuk a szöveget, mintsem csak begépeljük, az alap (normál) üzemmódban navigálhatunk a szövegben, és különféle formázási/szerkesztési parancsokat adhatunk ki. Például a j billentyű lenyomására egy sorral lejjebb lépünk, míg a Shift-j összefűzi (join) az aktuális sort a rákövetkezővel. Beszúró üzemmódban a j lenyomására egy j betűt írunk be a szövegbe. A vizuális üzemmódban (mely még nem volt az eredeti vi-ban) interaktívan kezelhetjük a kijelölést, a j lenyomására egy sorral többet jelölünk ki. Lehetőségünk van több karakterből álló parancsokat is kialakítani, ezzel gyakorlatilag nincs felső határa az elérhető funkcióknak.

A másik igencsak fontos tényező, hogy a vi által lefektetett alapok továbbra is változatlanok. (Pontosabban, pár bug/feature ki lett javítva, ami engem nem zavar). Emiatt az, amit harminc éve megtanultam, továbbra is érvényben van, s ahogy újabb lehetőségekkel bővül a program, csak az eltérést kell megtanulni. Az itt elsajátított ismeretek pedig igény szerint más programokban is használhatóak. A bash CLI például átalakítható vi módra, s egyszerűen módosítható a parancssorban szereplő szöveg.

Egy kis nyelvtan?

Nagyjából ezzel ki is merül az a tudomány, amit lenyomnak egy diák torkán a Linux/Unix kurzus során. Pedig ezek után következne az egész esszenciája a vi-movement. Ugyanis van egy nyelvtana a vi-nak. Ez lesz a csodafegyvere annak, aki hajlandó egy kicsit is tanulni.

Első kategória a szöveg-objektum, melyet az egyszerűség kedvéért tekinthetünk alanynak. Pár példa:

  • b - aktuális szó eleje,
  • e - aktuális szó vége,
  • w - következő szó eleje,
  • s - mondat,
  • p - bekezdés.

A három legfontosabb igénk a

  • c - csere,
  • d - törlés,
  • y - másolás.

Jöjjenek végül a módosítók:

  • i - belül,
  • a - kívül,
  • f -  -ig,
  • t - majdnem -ig.

A vi hagyományosan az ige-alany sorrendet követi: dw - törölj ki egy szót. Az alanyok számokkal is felturbózhatóak: d4w - törölj négy szót, 45j - menj lejjebb 45 sort. Szerencsére nem kell mindenképp a törlendő/másolandó terület egyik végére eljutnunk: di” - töröld ki az idézőjelek közti szöveget, ci} - cseréld le a kapcsos zárójelek közti részt.

El nem lehet képzelni, hogy az ezzel nyert lehetőségek mennyire felgyorsítják a szöveg szerkesztését, mennyire pontosan lehet kijelölni a szöveget, nem kell szenvedni azzal, mennyire precízen tudjuk egérrel kijelölni a kívánt szöveget. Drew Neil könyve alcíme szerint a gondolat sebességével szerkeszthetjük a szövegeinket.

Ha vi-nyelvtan valakit bővebben is érdekel, a https://learnvim.irian.to/basics/vim_grammar oldalon további példákat is talál.

Összegzés

Nem vagyok evangelista, nem kívánok senkit megtéríteni. Szerintem a vi - és klónjai - egy jó program, rengeteg segédanyaggal annak, aki hajlandó kicsit kilépni a komfortzónájából. Viszont a vi mögött álló eszmeiség - gondolok főleg a nyelvtanára - elsikkad az oktatás során, pedig ez nagyban segítené a tanulást. 

Hozzászólások

A vi azert kellett, mert mar akkor is a sok hopihe elegedetlenkedett az ed miatt :)

Pedig valahol az vi és a sed is ed. Ismeri az ed parancsokat, amiket parancsmódban, : után tudsz kiadni. Ezek mind egymásra épülnek, az ed, ex, vi, meg a sed is az ed-re, de még a grep is. Aki megtanulja a vi-t vagy vim-et, az egy nagyon kis gyakorlással az ed-et is tudja használni, meg a sed/grep parancsok is ismerősek lesznek neki.

Egyébként az ed előtti szövegszerkesztők még kevésbé voltak felhasználóbarátak. Akit érdekel a vi, annak inkább a vim-et, neovim-et szoktam ajánlani, ha az túl bloat, akkor elvis vagy nvi. A „sima” Joy-féle, vanilla BSD vi szerintem nagyon korlátozott ma már.

A valódi haszna egyébként a vi-nak, vim-nek, hogy a billentyűi kvázi szabványosak, azokat érti a legtöbb unixos, nixlike tool, tehát nem csak a vi, vim, de egy csomó fájlkezelő (Ranger, lf, Vifm, nnn, stb.), e-mailkliens (mutt, neomutt, aerc), pdf néző (Zathura, xpdf), képnéző (sxiv, nsxiv, imv, feh), IRC kliensek (weechat, irrsi), egy csomó GNU tool (pl. man, info, less, readline módos programok), de a Bash-nak és más shelleknek is van általában vi módja. Sok tiling ablakkezelő is érti ezeket a billentyűket. Pluginnel, addonnal más programokhoz is hozzáadható, pl. böngészőkhöz (vimb, surf alapból tudja, de addonként hozzáadható Firefox-hoz, Chrome-alapú böngészőkhöz, pl. Tridactyl, Vimium, Vimperator, stb.), de Emacs-hez is van evil mód, meg Visual Studio Code-hoz vim plugin, illetve sok más IDE-hez is. Sok más program ismeri ezeket a vi-os billentyűket, calcurse, newsboat, sc, sc-im, bvi, ncdu, bat, htop-vim, stb.. Egyszer kell vele megszenvedni, megtanulni, utána a határ a csillagos ég, örökké kamatozó tudás lesz.

Persze megértem, aki utálja, mert a legtöbben nem értik, hogy a vi/vim az nem hagyományos text editor, amiben van egy mód, és csak mész, írod a szöveget, meg kurzormozgató billentyűkkel mozogsz, javítasz át, törölsz, egérrel jelölsz ki. Ezért mikor a vi/vim-et próbálják, akkor frusztrálódnak, mert ez nem text editing, inkább text processing. Inkább egyfajta realtime, interaktív sed-re hasonlít, ahol a szöveget nem átszerkesztjük, hanem bizonyos feldolgozó utasítások mentén módosítjuk, csak a parancsokat gyorsbillentyűk helyettesítik, és azonnal végrehajtódnak a szövegen, vagy egy részén (szó, bekezdés, sor, karakterhalmaz, mint objektum), általában emiatt a parancsok előtt, után meg lehet adni hatókört, amire vonatkoznak, ez az, amit sokan ige+tárgy-ként emlegetnek. Így csak egész más a logikája, szerkesztési folyamata, mint a hagyományos mosóporos szövegszerkesztőknek.

The world runs on Excel spreadsheets. (Dylan Beattie)

Igen, ez így igaz. Nem is csoda ha az elmúlt negyven évben volt egy kis fejlődés. Bár a parancssorban nem szokás túl sok mondatot vagy bekezdést használni, ott az a és az i módosító hasznos lehetne, de azt hiszem lehet nélküle élni. Viszont hosszabb szövegek esetén mindegyik módosítót érdemes használni. Nem tudom, hogy hányan ragaszkodnak az nvi vagy az elvis klónokhoz. Úgy vélem, hogy a felhasználók 99%-nak elérhető a vim és nvim, és akkor már érdemesebb azt használni. 

AL

Én inkább arra akartam utalni, hogy bőven van egy halom olyan mozgató parancs, ami valószínűleg hasonlóan hasznos lenne, de cserében működik alap vi-jal. (Mint pl. $, vagy épp a ^ - vagy a 0, vagy épp a különböző zárójelek ( { [ ] } ), vagy az ', `, % . Nyilván nem egy teljes oktató anyag készül, és nem feltétlenül kell a kompatibilitással foglalkozni. Legfeljebb nem hátrány.

Szerk: idézőjel törölve, mert nem ide való.

Szerkesztve: 2024. 12. 18., sze – 20:54

nyilvan ez akkor volt buli amikor 300 baud-os modemmel leptek be a mainframere es minden gombnyomas masodpercekig tartott... ilyen korulmenyek kozott volt ideje az embereknek megtanulni milyen billentyukombinacioval hova lehet egybol ugrani :)

en sose szerettem a vi*-ot. csak nagyon alapszinten tudom hasznalni, mert van hogy nincs mas, meg ki is tudok lepni belole, de biztos nem irnek benne szepirodalmi muvet (mondjuk azt masban sem), de ha lehet meg config filet se... joe rulez, meg mcedit.

forráskódot írni is lehet magyar kiosztással, csak az AltGr ami gyakrabban jut szóhoz :-P

Rider volt kéznél, hogy megszámoljam, mennyire igaz a fenti állítás. Gyakrabban = másfélmillió extra billentyűleütés a fő projektünkben, és még van bőven kisebb .sln a cégben.

Nem használhatatlan, de normál módban valóban hátrány a magyar kiosztás, sok parancs (#, $, <, stb.) csak AltGr módosítóval érhető el, de még így van annyira hatékony, hogy megéri használni, én is magyar kiosztással használom, megszokható. Nincs ebben semmi meglepő, programozáshoz sem a legjobb a magyar kiosztás, ugyanezen okból kifolyólag. Lehetetlenné nem tesz dolgokat, csak körülményesebbé egy kicsit.

The world runs on Excel spreadsheets. (Dylan Beattie)

300 baudos modem ma már nincs, cserébe van minimál alpine konténer, amibe 3 lépésnyi RDP/Citrix/VNC+webes AWS konzolon keresztül jutok be, alig van benne installálva bármi, és ha valami troubleshootingot kell csinálni, akkor _jó esetben_ egy telepített-telepíthető fapados vi segítségével tudok konfigfilet szerkeszteni. Jó dolog az, amikor full alap dolgok (pl citrixen keresztüli copy-paste) sem működik. 

Én anno a vi vs emacs csatákban az emacs oldalon voltam, mégis ma már ha csak valami text fájlt kell szerkeszteni, akkor vim amit használok, mert az legtöbbször ott van bármilyen gépen, amihez hozzá kell nyúlnom. Csak az alap bilpentyűkombókat tudom fejből, ha azoknál több kell, akkor valami dedikált eszközt veszek elő (vagy googlizok). Emacsot nagyon sok éve nem.indítottam már, vim-et meg mostanában napi szinten használok. Fiatal kollégák szoktak is szörnyűlködni, amikor a futó dockerea alkalmazásban vim-mel szerkesztgetem a configot, hogy egy két betűs változtatás tesztje kedvéért ne kelljen újra buildelni az egész image-t. Vagy amikor a cloudos vps-en futó alkalmazást kell toszogatni, de csak egy szál webes ssh elérést kaptunk. Ilyenkor azért jól jön a vim.

Csaba

Nálunk volt egy hangos, fiatal iOS dev aki nagyon prüszkölt, ha logokat kellett bújni, mert a logokat egy Linux-os server-re gyűjtöttük plusz ssh. Őskövületnek hívott és kijelentette, hogy nem hajlandó elhagyni az xCode-ját. De volt nagy öröm és boldogság, mikor megmutattam neki, hogyan tudja az sshfs-t a Mac-jén beizzítani.

Ebben pont nem hasonlít. A vim tényleg csak egy szövegszerkesztő. Bár be lehet fogni IDE-nek, terminál multiplexernek, jegyzetelőalkalmazásnak, stb., de alapvetően csak egy text editor.

Az Emacs viszont egy Lisp interpreterre épülő komplett ökoszisztéma, majdnem egy komplett, sandboxolt OS. Megint más, hogy editornak indult, de mindenféle pluginnel sokkal több mindenre befogható. Egyébként az se rossz text editor, ami nekem abban nem tetszik, hogy a billentyűkiosztása, parancsai alapértelmezésben elég szarok, mindenhez Ctr+Ctr+ vagy Alt+Ctr+ billentyűakkordokat nyomkodni, nem ergonómikus. Lehet benne vi/vim módot is használni, de akkor meg már menjen helyette rendes vim, neovim.

The world runs on Excel spreadsheets. (Dylan Beattie)

"Az emacs-ból csak egy jó text editor hiányzik ugyebár... :-D"

A vi viszont a jotol nagyon tavol van, es a vim/neovim is elegge. Abban egyetertunk, hogy alapvetoen csak egy text editor. (bar a neovimnel lisp helyett talan lua-s dolgok szinten megjelennek)

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

Alapszinten nem nagy dolog elsajátítani a vi-t. Tőlem ennyit kértek a munkahelyen és azt tették mellé, hogy elképzelhető olyan helyzet, hogy csak ez van egy szerveren. És ha az alapszint megvan, utána már nem is kell utálni 🙂

ugyanez, config file-ok szerlesztésére, akár remote termnálból ... ilyenekre teljesen jó........ egyszer nekiálltam hogy majd összekonfiguirálok valami IDE szerű dolgot belőle....aztán rájöttem hogy tök fölöslegesen pazarlom az időt, gyakorlatilag semit nem nyerek vele.....

Szerkesztve: 2024. 12. 28., szo – 01:59

Mi az a vi* hype?

Én szeretem a vimet.

De azt nem tudom, hogy te szereted-e a vided...