Vim: hatékonyság mindenekfelett!

Shell, file-ok, fold

Ahogy korábban már volt róla szó, a Vim több lehetőséget ad a filerendszerben való bolyongásra például a beépített filekezelőn keresztül. A filerendszerrel és a parancssorral nagyon rugalmas a Vim kapcsolata, így nagyon hasznos trükköket csinálhatunk.

Shell parancsok

Hirdetés

:shell Közönséges parancssort ad, amiből kilépve visszakerülünk a Vimbe
:!parancs Végrehajtja a parancs parancsot, majd egy ENTER után visszakerülünk a szerkesztőbe
:! Így "üres" parancsot kiadva megnézhetjük a parancssort, ahol a legutolsó parancsok kimenete még mindig látható
:`<,`>!sort Miután kijelöltünk egy szövegrészt és megnyomjuk a :-t, a `<,`> rész automatikusan megjelenik a parancssorban, jelezve hogy a kiadott parancs csak a kijelölt szövegrészre vonatkozik. Itt bármilyen shell parancsot kiadva a parancs kimenete kerül a kijelölt szöveg helyére. A példában szereplő sort paranccsal például a kijelölt sorokat sorrendbe rakhatjuk. Megjegyzés: a Vimnek is van saját rendező rutinja, így jelen esetben még a ! sem kell, használhatjuk a :`<,`>sort parancsot is a sorbarendezésre
:%!svn blame % Ahogy a `<,`> a kijelölt szövegrészre, úgy a % jel a teljes szövegre vonatkozik, ha a : után a parancs első karaktereként használjuk. Ha bárhol máshol a parancsban tűnik fel, akkor már a file neve lesz behelyettesítve. Tehát ez a parancs a file teljes tartalmát kicseréli az svn blame filenev kimenetére, ami a gyakorlatban azt jelenti hogy minden sor elejére beszúrja az SVN revízió számát és annak a felhasználónevét, aki utoljára módosította az adott sort.

File-ok a filerendszerben

A filenevet jelölő % karaktert kicsit ki is bővíthetjük, például:

:vs %:h A :h toldalék jelen esetben azt jelzi hogy nem a filenév, hanem csak az azt tartalmazó könyvtár elérési útja érdekel minket, vagyis ez a parancs egy függőlegesen osztott ablakban megnyitja a filekezelőt ugyanabban a könyvtárban, mint amiben az aktuálisan szerkesztett file található. Nem árt tudni hogy a %:h alapesetben relatív elérési utat használ, ha valamiért a teljes (abszolút) elérési útra van szükség, akkor a %:p:h forma használandó
gf Ha a kurzor file- vagy könyvtárnéven áll, az adott file-t megnyitja (könyvtár esetén a filekezelő nyílik meg az adott könyvtárban). Az előzőleg szerkesztett file-ra a CTRL-O billentyűkombinációval térhetünk vissza. Alapesetben a filenevet (hacsak nem teljes elérési úttal szerepel) a Vim az aktuális könyvtárból kiindulva keresi, illetve operációs rendszertől függően bizonyos könyvtárakban, például Linux alatt a /usr/include-ban. Ha szeretnénk más könyvtárat is szeretnénk hozzáadni a listához, a path Vim-változót kell beállítanunk, például ha azt szeretnénk hogy a /usr/include és az aktuális könyvtár mellett a saját home könyvtárunkban is keresse a file-okat, akkor a következő parancsot kell kiadnunk: :set path=.,/usr/include,/home/usernevem. Természetesen nem kell minden alkalommal begépelni a parancsot, a .vimrc file-ba beírva az a Vim indításakor már érvényes lesz.
:find filenev A fent említett path változóban szereplő könyvtárakat végignézi a filenev file-t keresve, és ha megtalálja megnyitja szerkesztésre.

A vimben van egy beépített "diff", vagyis "file-különbség mutató" funkció. Ezt a legegyszerűbb úgy használni, ha nem a hagyományos vim hanem a vimdiff filenev1 filenev2 filenev3 paranccsal indítjuk a programot. Ilyenkor a paraméterként megadott file-ok egymás mellett jelennek meg, az eltérő részek a különbség típusától függően más-más színnel jelölve, az azonos részek "összecsukva" vagyis foldolva. A file-okban való navigálás szinkronizált, vagyis ha az egyik file-on állva megnyomjuk a Page Down-t, akkor az összes egy oldallal lejjebb ugrik. Természetesen minden szerkesztőfunkció működik. És nem, nem elírás, ezt egyszerre három file-ra is tudja :)

Fold

És ha már szóba került az összecsukás, vagyis fold, pár szót erről. Mint minden fejlett szövegszerkesztő, a Vim is képes a forráskód (vagy bármilyen más szöveg) egyes részeit összecsukni/kinyitni mint egy redőnyt vagy legyezőt. Képes automatikusan, a forráskódot értelmezve létrehozni ezeket a redőnyöket, de kérhetjük teljesen manuálisra is (ez utóbbi az alapbeállítás). Ezt a viselkedést a foldmethod változóval változtathatjuk, például:
:set foldmethod=syntax A kódszinezés (syntax highlight) alapján ismeri fel és hozza létre a foldokat, például C kód esetén minden { ... } blokk egy-egy összecsukható fold lesz.
:set foldmethod=indent A sor eleji behúzások alapján hozza létre a foldokat.
Ha a foldcolumn változónak valamilyen számot adunk értékül, akkor az ablak bal oldalán ennyi karakter széles területen a Vim megmutatja az egymásba ágyazott foldokat, így nagyon szépen látható a kód szerkezete.

A foldok nyitására/csukására a következő parancsok használhatók a fold bármely részén állva:

zo Aktuális fold kinyitása, az azon belül lévők csukva maradnak
zO Aktuális fold rekurzív kinyitása, vagyis minden azon belül lévő is kinyílik
zc Becsukás
zR A file-ban levő összes fold kinyitása
zM A file-ban levő összes fold becsukása

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt