A következő leírás egy halovány kis segítségként is felfogható azok számára, akik még csak most ismerkednek a vi szövegszerkesztő "kezelgetésével". A leírást amúgy semmifélé szerzőijog alá nem ejtem, így mindenki kedvére másolhatja és alábiggyesztheti a nevét, mint e sorok íróját... Szóval kellemes hamisítást...:-)
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..:-)
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é.
A .exrc fájlban a parancsokat nem kell kettősponttal kezdeni! Ha hibás a .exrc fájlunk, akkor a hibás sor utáni beállítások nem jutnak érvényre!
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 Extra lehetőségek:
^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.....:-)