A vi - ejtsd "vi-áj" - egy szabványos UNIX szövegszerkesztő, amely - az előbbi félmondatból is következően - valamennyi UNIX rendszeren megtalálható. Nyilvánvaló tehát, hogy mindenképpen érdemes megismerkedni legalább az alapszintű használatával, hiszen bárki kerülhet olyan helyzetbe, hogy semmifélé egyéb editor nem áll rendelkezésére (például nem tudunk a normál módon bejelentkezni a rendszerünkre, csak egy rendszerhelyreállító bootlemez segítségével) és az ilyen esetekben adunk majd hálát a Mindenhatónak azért, hogy voltunk olyan előrelátók, és megtanultuk a vi alapszintű használalát.
Jó kérdés. Állítólag a "visual editor" rövidítése. A vi alapanyaga az "ex" (extended editor) nevű sorszerkesztőből (ilyen például az "ed" is) ered. Bill Joy - az ex kitalálója - később írt egy képernyő-alapú felhasználói felületet az ex-hez és ezt elnevezte vi-nak. Mivel ez a kis tanmese a vi-ról szól és nem az ex-ről, ezért ha az ex-vel bővebben szeretnél megismerkedni, akkor csak gépeld be: ex (ez általában hatásos szokott lenni:-)
Csak gépeljük be, hogy:
vi
És már benne is vagyunk a vi kellős közepében. Természetesen előfordulhat, hogy a vi egy klónja található a rendszerünkön. Szabványos esetben ilyenkor is elég a vi szót begépelnünk, amely egy link az adott klónra (pl. vim, nvi). Most nem kívánok még egy külön pontot kijelölni a vi-ból való kilépésre is, bár valószínűleg erre sokkal nagyobb szükség lehet, mint az elindítási segédletre...:-) Tehát kilépés előtt térjük át parancsmódra(a leírása a következő pontban olvasható) és használjuk a
:xparancsot (ekkor mentjük a dokumentumot a módosításokkal együtt és kilépünk a programból). Amennyiben megijedtünk, hogy esetleg valami fontos dolgot is megsemmísítettünk a módosítás alatt, akkor használjuk a
:q!parancsot, ekkor mentés nélkül lépünk ki a programból.
(A szerk. megjegyzése: Persze mire rájöttem erre a két parancsra anno, hát majdnem megőszültem..:-)
Mivel ezesetben egy karakteres módú szövegszerkesztőről van szó és a vi megalkotásakor az emberek még nem egérrel a kezükben születtek, ezért valahogyan lehetővé kellett tenni, hogy a szöveg beírása mellett néhány egyéb formázó, szerkesztő parancsot is lehessen használni.
Nevéből is adódóan az adabeviteli módban gépelhetjük be a kívánt szöveget. Ilyenkor valamennyi - nem funkcióbillentyűs - begépelt karakter megjelenítődik a monitoron. Nagyon hamar nyilvánvalóvá válik azonban, hogy hiába vagyunk képesek szöveget begépelni, nem tudunk törölni, adott sorra ugrani, karaktereket cserélni...és meg sorolhatnám.., de sorolom is: másol-kivág-beilleszt funkció, insert, keresés...
És ekkor válik értelmes dologgá a vi parancsmódja.
Parancsmódba a legegyszerűbben egy ESC billentyű lenyomásával juthatunk el. Ha kétszer is
lenyomjuk, akkor csipogást hallhatunk, esetleg megvillan a monotor...most már biztosan parancsmódban vagyunk.
A parancsokat általában megelőzi egy kettőspont, amelynek helyes írása a hibás ".." helyett, a ":" alakban történik.
Például, ha mindíg szeretnénk tudni, hogy éppen melyik módban vagyunk, akkor előszőr lépjünk parancsmódba, majd
gépeljük be:
:set showmode
Ezután a vi folyamatosan tájékoztat bennünket, hogy melyik éppen az aktuális mód.
Ha szöveget szeretnénk begépelni a vi editorba, akkor adatbevitelimódra kell átváltanunk. Ez megtehető például az "i" billentyű lenyomásával, amikoris az aktuális kurzorpozíció elé kerül a beírt szöveg, vagy az "a" billentyű lenyomásával, amikor viszont éppenhogy mögé.
Indításakor a vi előszőr leellenőrzi, hogy a HOME könyvtárunkban létezik-e a .exrc fájl. Ebben a fájlban definiálhatjuk, a számunkra általános vi beállításokat. Ezek tulajdonképpen parancsok, amelyeket az ex program haj végre a vi meghívásakor. Végrehajthatunk shellparancsokat is a .exrc fájlon keresztül, ilyenkor a "!" jelet írjuk a shellparancs elé. Kommenteket is írhatunk a .exrc fájlba. A komment jele itt a kettős idézőjel, azaz a " jel. A vi a space és a tabulátor jeleket sem veszi figyelembe, így már viszonylag emészhető kinézetűvé tehetjük a .exrc fájlunkat. A viszont FONTOS:
Egy igen rövid példa a .exrc fájlra :-)
"Alapbeállítások set showmode set wrapmargin=10 "A pontos idő !date;sleep 2
A következő leírást bárki önmaga is előkeresheti, ha használja a vi editorban a :help parancsot , vagy az erre felkínált választási lehetőségek közül (viusage, exusage) valamelyiket.
Na jó nyelvi eltérések azért lehetnek...:-)
| ^A | a kurzornál lévő szóra keres rá a doksi további részében | |
| ^B | egy képernyőnyit lapoz visszafelé | |
| ^C | megszakít egy folyamatot (pl. olvasás, írás, keresés) | |
| ^D | lefelé lapoz egy fél oldalnyit (beállítástól függően) | |
| ^E | egy sort lép lefelé (képernyő görgetéssel) | |
| ^F | egy képernyőnyit lapoz előre | |
| ^G | fájl állapot információk (pl. unmodified: line 26 of 334 [7%]) | |
| ^H | balra lép egy karakternyit | |
| ^J | egy sort lép lefelé (amíg lehet, addíg scroll nélkül) | |
| ^L | képernyő frissítés | |
| ^M | soronként lépked lefelé (az első, nem üres helyre) | |
| ^N | soronként lépked lefelé | |
| ^P | soronként lépked felfelé | |
| ^R | képernyőfrissítés | |
| ^T | tag pop | |
| ^U | felfelé lapoz egy fél oldalnyit (beállítástól függően) | |
| ^V | input a literal character | |
| ^W | átvált a következő képernyőre (ha több fájl is meg van nyitva) | |
| ^Y | soronként lapoz visszafelé | |
| ^Z | megszakítja a szerkesztő működését | |
| ^[ | <escape> kilép az adatbeviteli módból, megszakítja a részleges parancsokat | |
| ^\ | átvált ex módba | |
| ^] | tag lekérés a kurzor a kurzor utáni szóból | |
| ^^ | átvált az előző fájlra | |
| space | jobbra mozog oszloponként | |
| ! | filter a shellparancsok outputjának fájlbamozgatására Példa: ! <ENTER> ls |
|
| # | ha számon áll a kurzor, akkor növeli vagy csökkenti az értékét | |
| $ | az utolsó oszlopra ugrik | |
| % | move to match | |
| & | megismétli a helyettesítést (sustitution) | |
| ' | move to mark (to first non-blank) | |
| ( | az előző mondatra ugrik | |
| ) | a következő mondatra ugrik | |
| + | soronként lépked lefelé (az első, nem üres helyre) | |
| , | ellenkező irányban megismétli az utolsó F, f, T vagy t keresést | |
| - | soronként ugrik felfelé (az első, nem üres helyre) | |
| . | megismétli az utolsó parancsot | |
| / | keresés előrefelé | |
| 0 | a legelső karakterre ugrik | |
| : | ex parancs | |
| ; | megismétli az utolsó F, f, T vagy t keresést | |
| < | a sort jobbra mozgatja | |
| > | a sort jobbra mozgatja | |
| ? | keresés visszafelé | |
| @ | lefuttatja a puffer tartalmát | |
| A | hozzáfűz a sor végéhez | |
| B | minden nagyobb szóra elejére ugrik, visszafelé | |
| C | szövegmódosítás a sor végéig | |
| D | a sor végéig töröl | |
| E | minden nagyobb szó végére ugrik, előrefelé | |
| F | a sorban visszafelé keresve a keresett karakterre ugrik | |
| G | a szöveg utolsó sorára viszi a kurzort | |
| H | az aktualis legfelső sorra viszi a kurzort | |
| I | a első, nem üres karakterhely elé szúr be | |
| J | az aktuális sor végéhez fűzi a következő sort | |
| L | a képernyő aljára ugrik | |
| M | a képernyő közepére ugrik | |
| N | az utolsó keresés, de visszafelé | |
| O | beillesztés az adott sor fölé | |
| P | beilleszti a puffer tartalmát a kurzor elé | |
| Q | ex módra vált át | |
| R | felülírja a begépelt szöveggel az adott sor tartalmát | |
| S | az aktuális sort helyettesíti a begépelt adattal | |
| T | a sorba visszafelé keresve a keresett betű elé ugrik | |
| U | visszaállítja a sor eredeti tartalmát | |
| W | a következő szóra ugrik | |
| X | törli a kurzor előtti karaktert | |
| Y | másolja az aktuális sort | |
| ZZ | lementi a fájlt és kilép | |
| [[ | visszaugrik a paragrafus (fájl eleje is lehet) elejére | |
| ]] | a paragrafus (fájl vége is lehet) végére ugrik | |
| ^ | a sorban lévő, első, nem üres karakterre ugrik | |
| _ | a sorban lévő, első, nem üres karakterre ugrik | |
| ` | a megjelölt részhez ugrik | |
| a | a kurzor utáni helyre illeszt | |
| b | az előző szóra ugrik | |
| c | módosítás visz végbe a mozgás irányában | |
| d | törlést végez a mozgás irányában | |
| e | a szó végére ugrik | |
| f | adott karakter keresése a sor vége felé (pl. fg, akkor a köv. g-re ugrik) | |
| h | balra ugrik egy oszlopot | |
| i | szövegetbemenetet illesz a kurzor elé | |
| j | lefelé ugrik egy sort | |
| k | felfelé ugrik egy sort | |
| l | jobbra ugrik egy oszlopot | |
| m | megjelöl egy fájlrészt | |
| n | megismétli az előző keresést | |
| o | beilleszt a sor után | |
| p | beilleszti a kurzor mögé a puffer tartalmát | |
| r | kicserél egy karaktert | |
| s | helyettesíti az adott karaktert (akár több karakterrel is) | |
| t | a keresett karakter előtti karakterre ugrik a sor vége felé | |
| u | visszaállítja az előző állapotot (undo) | |
| w | a következő szóra ugrik | |
| x | karakter törlés | |
| y | a vágólapra (pufferbe) másolja az aktuális sort | |
| z | újrapoziciónálja a képernyőt | |
| { | visszafelé lépked a bekezdéseken | |
| | | a sor elejére ugrik (az első oszlophoz) | |
| } | előrefelé lépked a bekezdések mentén | |
| ~ | a nagybetűket kisbetűre irja át, a kisbetűket nagyra |
| ^D | : scrollozza a sorokat | |
| ! | : szűri a sorokat a parancsokon keresztül, vagy futtat egy parancsot | |
| # | : megjeleníti az adott sor sorszámát és magát a sort is | |
| & | : repeat the last subsitution | |
| * | : lefuttetja a puffert | |
| < | : eltolja a sort balra | |
| = | : a dokumentum teljes sorszámát jeleníti meg | |
| > | : eltolja a sort jobbra | |
| @ | : lefuttatja a puffert | |
| append | : az adott sor után adatot vihetunk be pl. ^C -ig | |
| abbreviate | : meghatároz egy bemeneti (input) rövidítést | |
| args | : megjeleníti a fájl argumentumlistáját | |
| bg | : a szöveget a háttérbe teszi át | |
| change | : megváltoztatja az aktuális sor tartalmát | |
| cd | : megváltoztatja az aktuális könyvtárat | |
| chdir | : megváltoztatja az aktuális könyvtárat | |
| copy | : sorokat másol a fájl tetszöleges részébe | |
| cscope | : create a set of tags using a cscope command | |
| delete | : sorokat töröl ki a fájlból | |
| display | : megjeleníti a puffereket, kapcsolatokat, képernyőket vagy a tagokat | |
| [Ee]dit | : elkezd szerkeszteni egy másik fájlt | |
| [Ee]x | : elkezd szerkeszteni egy másik fájlt | |
| exusage | : megjeleníti az extra parancshasználat megállapításait | |
| file | : megjeleníti (vagy opcionálisan be is állítja) a fájl nevét | |
| [Ff]g | : előrehoz egy képernyőt a háttérből | |
| global | : lefuttat egy globális parancsot adott sorokon a RE-nek megfelelően | |
| help | : megjeleniti a verzióhoz tartozó aktuális help szöveget | |
| insert | : szövegadatokat illeszt az aktuális sor elé | |
| join | : a következő sort az aktuális sor mögé fűzi | |
| k | : megjelöl egy sorpozíciót | |
| list | : megjeleníti a sorokat félreérthetetlen formában | |
| move | : sorokat mozgat át valahová a fájlban | |
| mark | : megjelöl egy sorpozíciót | |
| map | : begépelt adatokat vagy parancsokat rendel, egy vagy több billentűzethez | |
| mkexrc | : létrehoz egy .exrc fájlt | |
| [Nn]ext | : szerkeszt (és esetlegesen meghatározza) a következő fájlt | |
| number | : átváltja a megjelenítési formát adott számú sorra | |
| open | : belép az "open" módba (egyenlőre nem elérhető) | |
| : sorokat jelenít meg | ||
| perl | : futtatja a perl értelmezőt/interpretert az adott paranccsal | |
| perldo | : lefuttatja a perl értelmezőt a paranccsal, de valamennyi sorra | |
| preserve | : fenntart egy szerkesztői munkafázist (session) az esetleges helyreállításra | |
| [Pp]revious | : szerkeszti a fájl argumentumlista előző fájlját | |
| put | : hozzáfűz egy vágólap (puffer) tartalmat a sorhoz | |
| quit | : kilép az ex/vi -ból | |
| read | : hozzáfűzi egy parancs kimenetét vagy egy fájl tartalmát a sorhoz | |
| recover | : visszaállít egy mentett fájlt | |
| resize | : grow or shrink the current screen | |
| rewind | : újraolvassa valamennyi fájlt, amely a fájl argumentum listában megtalálható | |
| s | : substitute on lines matching an RE | |
| script | : futtat egy shell-t a képernyőn | |
| set | : opciókat állít be (használd a ":set all" -t, a lehetőségek megtekintésére) | |
| shell | : felfüggeszti a szerkesztést és elindít egy shell-t | |
| source | : beolvas egy ex parancsokat tartalmazo fájlt | |
| stop | : felfüggeszti a szerkesztési munkafázist | |
| suspend | : felfüggeszti a szerkesztési munkafázist | |
| t | : átmásol egy sor a fájl adott részébe | |
| [Tt]ag | : szerkeszti a tag-et tartalmazó fájlt | |
| tagnext | : átlép a következő tag-re | |
| tagpop | : visszatér az előző tag csoportra | |
| tagprev | : visszalép az előző tag-re | |
| tagtop | : érvényteleníti valamennyi tag-et | |
| tcl | : meghívja a tcl parancsértelmezőt egy paranccsal | |
| undo | : visszaállítja a legutolsó változtatást | |
| unabbreviate | : töröl egy rövidítést | |
| unmap | : delete an input or command map | |
| v | : execute a global command on lines NOT matching an RE | |
| version | : megjeleníti a program verzióinformációit | |
| visual | : belépés visual (vi) módba (ex módból) | |
| [Vv]isual | : egy másik fájl szerkesztése (csak vi módból lehet kiadni) | |
| viusage | : megjeleníti a vi kulcsbillentyűk használati információi | |
| write | : írja a fájlt | |
| wn | : írja a fájlt és átvált a következő fájlra | |
| wq | : írja a fájlt és kilép | |
| xit | : kilép | |
| yank | : copy lines to a cut buffer | |
| z | : megjeleníti egy fájl különböző képernyőoldalait (pl. z+ z- ,...) | |
| ~ | : replace previous RE with previous replacement string |
![]() |
![]() |
| Awk | C |
![]() |
![]() |
| html | Perl |
![]() |
![]() |
| Tex | shellscript |
Néhány igen jó leírás található a vi-t, illetve a klónokat tartalmazó csomagokban (mint ahogy azt a többi programcsomag esetében is megszokhattuk..:-).
| vim | /usr/doc/vim/examples/tutor | Bevezető leírás a vim használatába (viszonylag jó és rövid, emellett jól tagolt). |
| vim | /usr/doc/vim/* | Minden ami a programnyelvi támogatásokhoz, a highlighting támogatáshoz és még sok egyébhez szükséges. |
| nvi | /usr/doc/nvi/FAQ.gz | Nincs mit hozzáfűzni..bár elég rövid..:-( |
És persze man vi, man nvi, man vim, ...
Szóval...jó ez a vi.....:-)