Kalandozások Vimmel
Eredetileg közzétéve: 2020. április 4.
Archív bejegyzés
Ez a cikk 2020-ben jelent meg a letscode.hu korábbi, azóta megszűnt verziójában. A benne szereplő eszközök, verziószámok vagy gyakorlatok azóta elavulhattak - történeti értékét megőrizve, változtatás nélkül tesszük újra elérhetővé.
A szokásostól eltérő bejegyzés következik tőlem, mert ennek most nem feltétlenül a tudás átadása a célja, mintsem inkább egy kis történet, vagy épp folyamat megosztása. Ez a folyamat pedig nem más, mint a Vim szerkesztő elsajátítása, már amennyire egyelőre annak lehet nevezni, kb. két hét után. De ne rohanjunk ennyire előre, kezdjük az elején. Az már köztudott, hogy a Vim tanulási görbéje igencsak meredek.
Elvárások
Mégis mit vártam tőle? A legtöbbet használt funkciókat modern IDE-kből. Autocomplete, automatikus import, autoformat, fordítási hibák jelzése, könnyű refaktor, valami gyorskeresőt, snippetek, git integráció, tesztek futtatása.. tehát igazából az alapokat. Vajon tudja ezt egy "egyszerű" szerkesztő? Természetesen ha csak ezeket tudja, akkor még mindig kérdés, hogy miért éri meg váltani, hiszen nem fog valaki hónapokat tölteni azzal, hogy elsajátítson egy új eszközt, csak azért, hogy pontosan ugyanannyira legyen produktív, mint előtte. Le akartam szokni az egérhasználatról is, hiszen minden alkalommal, amikor kinyúl az ember érte, egy apró törést okoz. Na meg úgyis ott van előttem a billentyűzet, hát miért ne tudnám megtenni ott? Nos Vimben kb. MINDENT meg lehet oldani csak a billentyűzet segítségével, amit pedig nem tud alapból, vagy éppen pluginek segítségével, arra ott a vimscript, amivel mi is tudunk mindenfélét hozzáadni.
A Vim cheatsheet amúgy igencsak ajánlott, kinyomtatva az asztalon, vagy ami mégjobban segít, minden napra egy parancsot kiszemelni és azt gyakorolni, még ha nincs is rá szükség, hogy rögzüljön.
Amikor az ember cikkeket olvas a Vimről vagy éppen videókat néz róla, akkor szinte sosem azt látja, mint amit az első telepítéskor/megnyitásakor. A Vim alapból is rengeteg mindent tud, de ami igazán naggyá teszi, azok a pluginek. Ezekkel teletűzdelve fogunk leginkább vele találkozni. Aztán alig várjuk, hogy mi is kipróbáljuk az adott témát/betűtípust/plugint vagy bármi mást.
Még nem jutottam el arra a szintre, hogy olyan szépen rendezett vimrc fájlom legyen, mint azoknak, akik bátran osztják meg a sajátjaikat githubon, de valamennyire próbálom rendszerezni mindezt, mert ha tényleg leváltom a korábban használt IDE-t, akkor szinte ez lesz az egyik legfontosabb konfigurációs fájl, amit az évek során szerkesztgetek és magamal hurcolok majd. Nem is hittem volna, hogy ennyi mindent testreszabok majd menet közben, ami nem tetszik vagy éppen jobb lenne, ha másképp működne. Az egyik igen gyakran használt billentyű pl. az Escape, ami igencsak kiesik, ezért az a szokás, hogy egy másik kevésbé használt billentyűt mappelnek rá. Nálam se volt ez másképp, a Caps Lock jutott erre a sorsra, amit linuxon az alábbi módszerrel oldottam meg a terminálból:
dconf write "/org/gnome/desktop/input-sources/xkb-options" "['caps:escape']"
Ugyanerre Macen a Karabiner-Elementset használtam, így a Caps Lock ott is az Escapet jelenti. Mondanom sem kell, azóta kevesebbet is ordítozok a neten. Ha már az escapenél járunk, akkor itt meg kell jegyezni azt is, hogy a neovim terminál kezelésével is voltak bajaim, mert az alap Escape ott nem lépett ki Normal módba, így a .vimrc-ben a következő sorral oldottam meg, hogy amennyiben a terminál az aktív ablak, az Esc leütése igazából egy Ctrl-\-t követő Ctrl-N legyen.
:tnoremap <Esc> <C-\><C-n>
Furcsa, de már két hét után a vim-ből használt billentyűkombinációkat használnám a navigációra még itt a wordpress kezelőfelületén is. Apropó navigáció: ha már elindultam a mouseless irányba, letöltöttem egy böngészőplugint is, a Vimiumot, aminek segítségével a Vimből már ismert billentyűkombinációk segítségével tudok navigálni az oldalon. Innen az F billentyű az egyik leghasznosabb, ugyanis azzal ki lehet emelni azokat az elemeket az oldalon, amikkel interakcióba lehet lépni és billentyűkombinációkat rendel hozzá, amiket leütve rá tudunk bökni, mindezt egér nélkül.
Jelen állapot
Na de hol járok most az eddigiekkel?
Autocomplete? ✅
A CoC nevű plugin, ami Node.Js alapú, a kiegészítőin keresztül lehetőséget biztosít kódkiegészítésre számos program és leírónyelvhez, mint pl. PHP, Java, CSS, Vue és még sorolhatnám. Ha a coc-java kiegészítő le van töltve és be van kapcsolva, akkor az első Java fájl megnyitásakor tölti is le a Java language servert és már indítja is.
Autoformat ✅
Az autoformat plugin segítségével megoldható, sőt itt már ki is egészítettem, hogy hasonlóan működön, mint az IntelliJ, tehát ne csak a fájlokat formázza meg, hanem pl. a nem használt importokat is törölje, mindezt az F3 lenyomására:
noremap :exec 'UnusedImportsRemove'<bar>Autoformat<CR>
A fenti formatter egyébként külső programokat használ, pl. Java esetében az astylet.
Fordítási hibák jelzése ✅
Az A.L.E. plugin segítségével ez is megoldható. Sőt, nem csak a fordítási, de pl. a Checkstyle és PMD is bekonfigurálható. Ez pedig még nem minden, könnyen beköthetjük egy billentyűkombinációra, hogy amit tud ezekből meg is fixáljon automatikusan.
Snippetek ✅
Ki ne gondolná, de erre is van plugin, aminek a segítségével tudunk különböző fájlkiterjesztésekhez rövidítéseket és hozzájuk snippeteket rendelni.
Gyorskereső ✅
Itt igazából két plugint is megemlítenék, az egyik a fájlok tartalmában, a másik pedig azok nevében keres.
Itt megint két plugint említenék meg. Az egyik a git parancsokra, diffelésre, logokra, blamere jó, míg a másik a többi editorhoz hasonlóan jelzi a módosításainkat az adott fájlban a repositoryhoz képest.
Erre a vim-test plugint és a vim-dispatchet használom. Ez pl. a Ctrl-T billentyűkombinációra van nálam kötve, ami lefuttatja az adott fájlban taláhlató teszteket. Persze ez is egyéni preferencia kérdése, mert le lehet futtatni teszteket név alapján, a kurzorhoz legközelebb levőt és... sorolhatnám. Itt is van egy kis extra konfigurációm a .vimrc-ben, hogy jobban igazodjon az én igényeimhez. Itt arra gondolok, hogy akadnak olyan integrációs tesztek a projektben, amik suiteban futnak és a suite elején indul a hozzájuk tartozó MySQL, így önállóan nem futtathatóak. Ehhez már kis vimscriptet is kellett írjak.
Refaktorálás ❌
Ez az, amit még nem próbáltam ki, de elvileg erre is ott a plugin. Mivel még nem értem a történet végére, ezért lehet még ez is változik és azt is természetesen megírom.
Mit is látok eddig? Munkás, de megéri. Olyan, mintha kaptam volna valami új kütyüt, amit lehet ide-oda tekergetni. Nulláról indulva hetek kellenek ahhoz, hogy valaki ugyanolyan produktív legyen vimben, mint egy modern IDE-ben (már ha azt kellően kihasználta, ha nem, akkor lehet hamarabb is eljön ez az idő). Nem is ajánlom senkinek, hogy rögtön valami szoros határidős projekt mellett kezdje el ezt a munkahelyén használni. Egyelőre én is szabadidőmben tweakelem, ahogy felmerülnek az új és új ötletek, amiket még lehetne benne csinálni és fokozatosan viszem be az éles fejlesztésbe.
Persze itt tovább lehet menni, hogy méginkább elszakadjunk az egértől. Itt jön képbe pl. az i3 ablakkezelő (vagy macre az Amethyst, bár az közel sem tud annyit), amivel szintén billentyűkombinációk segítségével lehet navigálni és feladatokat végezni. Ezt speciel még nem tettem fel, mert hirtelen nagy ugrás lenne, ha ezt is beiktatnám a napi tanulási folyamatba, de ha már biztosabbnak érzem magam vimben, akkor jöhet ez is.
