T. I. N. T. F. M.

(This IsN't The F*cking Manual)

UNIX
a la Hamster

VI Joe! (C) Lovag :-)

A vi többnyire a rendszergazdák nagy kedvence, egyetlen vetélytársa van a "leghasználhatóbb editor" címért folytatott versenyben, és ez az emacs, ami viszont egy csúnya, nagy és gonosz dolog, tehát diszkvalifikálandó ;-) A két betű a "visual" szóból jött, és így leírva
egyszerűen víájnak ejtendő, mert a 'vi' fonetikus kiejtéstôl általában rángógörcsöt kap mindenki...

Minden egyszerű user "kedvenc" editora ez, mely bár nevéből ítélve már valami optikailag is értékelhető dolognak ígérkezik, de a valóságban az ed-féle sororientált és a PC-ken megszokott képernyőorientált szerkesztők keveréke. A programozók mindenesetre kedvelik, nem véletlenül... Tapasztalatom szerint a legtöbb ember megijed a láttán, eddig rajtam kívül egyetlen embert láttam, aki alapból ki tudott lépni belőle, és ez nem vicc, legalább tucat ember mesélte, hogy CONTROL-Z, aztán meg KILL segítségével lép ki, ha véletlenül elindult a vi...  A vi-ban három üzemmód létezik, a parancsmód, a beviteli mód, és az ex mód, mely az ex nevű editorral kommunikál, ez az ex pedig a régi jó kis ed továbbfejlesztése... Alapban parancsmódban indul a kis kedves,

: / ? !
karakterek valamelyikének segítségével pofozható tovább ex-módba. Bevitelből ESC-el kerülhetünk ide vissza, a sokat emlegetett beviteli üzemmódba pedig aAiIoOcCsSR segítségével kapcsolunk. Ez eddig jó bonyolultan hangzott, ugye? Az is... Kezdjük úgy, hogy egy file-t megnyitunk szerkesztésre:
vi huhh.gyerunk
Parancsmódban vagyunk, ha a file már létezik, valós tartalommal, akkor azt látjuk, különben csak az üres sorokat jelző ~ jeleket. A parancsformátum itt:
argumentum parancs objektum
Az argumentum az ed-nél látottakhoz hasonló leírás, a parancsok is ismerősek lehetnek onnan. Az objektum w vagy W betűk esetén az adott szó, ahol a kurzor áll ( vagy ) esetén az a mondat, amin a kurzor áll, a { illetve } bekezdésre utal (üres sorokkal határolt szövegrész). Egy próbafeladat a memorizáláshoz: ha parancsmódban vagyunk, keressük meg azt a sort, ahol valamit csinálni akarunk:
j - 1 sor le
k - 1 sor fel
h, [BS] - 1 karakter balra
l, [SPACE] - 1 karakter jobbra
$ - sor utolsó karaktere
0 - sor első karaktere
w, W - következő szó első karaktere
b, B - előző szó első karaktere
(, ) - mondat eleje, vége
{, } - bekezdés eleje, vége
nH - kurzor a képernyő felülrôl n-edik sorába kerül
nL - ugyanez alulról
^f, ^b - teljes képernyőnyi görgetés előre, hátra
^d, ^u - ugyanez fél képernyővel...
nG - a puffer n-edik sorának elejére ugrik a kurzor
/minta - megkeresi a kurzortól előre (a fájl vége fele) haladva a mintát, és az első karakterére áll
?minta - ugyanez a kurzortól visszafele
Ez eddig eléggé őrítő, pedig tényleg csak azt írtam le, ami szerintem a legfontosabb, vagy háromszor ennyi billentyű van, szóval kezet csókolhattok :-)

Ha megtaláltuk a keresett helyet, akár durvulhatunk és pusztíthatunk is (még mindig parancsüzemmódban vagyunk!):
x - törli a kurzor alatti karaktert
d[arg] - törli az argumentummal kijelölt részt (wW(){}), ha még emlékeztek...
dd - törli az egész sort. Itt az utóbbinál (ugyan nem) látszik, hogy a parancsok nagy része az egész kurrens (micsoda szó) sorra vonatkozik, ha a parancskaraktert megduplázzuk.
p - a legutóbb letörölt karaktert, vagy objektumot lerakja a mostani kurzorpozíció után, a
P pedig elé
Persze kicsit szebb, ha nem törölgetünk feleslegesen, hanem csak kijelölünk másoláshoz:
[darab]y[obj]
Hűha... nem kezdetek fáradni? (én igen)
zz - na ez egy jó parancs, kimenti a dolgokat, és gyorsan itthagyja ezt a tetves vi-t
u - undo
. - előző szövegmódosító parancs végrehajtása
~ - kurzor alatti karaktert kicsiről nagyra, vagy nagyról kicsire konvertálja

Na de nem csak törölni meg módosítani lehet, mi van, ha újat akarunk létrehozni a semmiből? (akkor kicsit beképzeltek vagyunk...) Akkor az alábbi parancsbillentyűket használhatjuk:
a, A - beviteli mód, az ezután gépelt szöveg a kurzor után, ill. elé kerül beszúrásra
i, I - beszúrás, mögé/elé (ha szerencsénk van, akkor olyan vi-verziónk van, aminél ezesetben műxenek a klavi kurzormozgató gombjai, hát nem tökjó?)
o, O - új sort kezd az aktuális pozíció mögött, előtt
R - overwrite mód, de ha túlmentünk az eredeti szövegsor végén, akkor átmegy síma beviteli módba...
S - az egész sort lecseréli az ezután begépelhető szövegre...
s - az aktuális pozíció alatti karaktert törli, és onnantól szúr be

Hú, mostmár nagyon zsibbadtaknak kell lennetek!

Na jó, marad még pár ex-módban használható parancs:
:wq - elmenti a puffert, és kilép
:q - kilép, már ha előtte elmentettük a puffer tartalmát
:q! - kilépés mentés nélkül... az egyik legfontosabb parancs ;-)
:e név - betölti a nevezett fájlt, normális esetben erre csak akkor hajlandó, ha üres a puffer, vagy elmentettük az előtte szerkesztgetett marhaságainkat
:e! - "na jól van, töltök mentés nélkül is"
Ezenfelül használhatjuk az ed-nél látott parancsok nagyrészét is, például a mintacserélést, ilyesmit, meg egy csomó mást is... AMit leírtam, abban mind nincs benne az, amiért a programozók különösen szeretik a vi-t, a kellemes reguláris kifejezés (regexp) támogatást a search and replace funkciókban, stb... Majd egyszer. Mindenesetre még fontosnak tartanám elmondani, hogy manapság kevés helyen látni az eredeti vi-t, jobbára valamilyen továbbfejlesztése kerül fel a rendszerekre, például elvis, vim. Ezekben tapasztalhatók kisebb eltérések, valamint a terminálbeállításainktól függően létezhetnek hot key-k, amik más verziókon, más oprendszereken nem használhatók, ezeket magunknak kell felfedezni. A nagy kedvencem, a vim mindenesetre :help -re igen tekintélyes méretű helpet ad, érdemes nézegetni!

Vissza Előre