Ötödik lecke

"...az igazi programozó szerint az "azt kapod amit látsz" elv éppen olyan hibás az editoroknál, mint a noknél. Nem, az igazi programozó az "ezt akartad, hát nesze" editort szereti - bonyolultat, titokzatosat, veszélyeset..."
(Ed Post: Az Igazi Programozó)

Verzió: 1.0

Szövegszerkesztés Unix alatt

Egy operációs rendszerben mindennapi feladat, hogy egy szövegfájl tartalmát meg kell változtatnunk. Ezt a célt szolgálják az editorok. A Unix szabványos editora a vi, amelynek az az elonye, hogy minden rendszeren megtalálható. Az elonyök felsorolását ezzel ki is merítettük -- mai szemmel nézve a vi rettenetesen elavult. A grafikus operációs rendszerek alatt futó szövegszerkesztokkel (Word for Windows, Ami Pro, stb.) elkényeztetett felhasználónak a vi editortól olyan érzése támad, mintha késsel és villával próbálna megenni egy tál levest. Ha csak tehetjük, nagy ívben kerüljük el a vi-t!

A vi használatának elkerülésére a következo stratégiákat alkalmazhatjuk:

  1. Több más editor is létezik, például emacs, pico, joe. Nézzük meg a dokumentációban, vagy kérdezzük meg a rendszeradminisztrátortól, hogy ezek közül melyiket lehet használni.
  2. Ha valamilyen grafikus munkaállomáson dolgozunk, akkor ott kell lennie ablakos editornak. A Silicon Graphics gépeken jot a neve, a Sun-okon textedit, de biztosan könnyen elérheto helyen van. Ezek azonban csak grafikus terminálon futtathatók.
  3. Ha PC-rol jelentkezünk be, akkor nagyobb fájlok esetén érdemes un. "file transfer" muvelettel áthozni a fájlt DOS alá, ott a DOS editorral vagy akár valamilyen szövegszerkesztovel elvégezni a szükséges muveleteket, a kész fájlt pedig visszavinni a Unixra. A PC és a Unix közötti fájlátvitelrol szintén az írásos dokumentációból, vagy a rendszeradminisztrátortól szerezhetünk információkat. A leggyakrabban használt program neve ftp (File Transfer Protocol), ennek használatáról a hálózatokról szóló leckében lesz szó.

Mégis érdemes a vi kezelését legalább alapszinten elsajátítani: ha netán kitennének minket egy lakatlan szigetre, és a sziget Unixos gépén történetesen csak vi van, akkor ne álljunk ott tehetetlenül.

A vi editor

Eloször is meg kell értenünk a vi alapelveit. Két üzemmódja van: szöveges mód és parancs mód. A parancs módban begépelt karaktereket parancsként értelmezi, például 'karakter törlés' vagy 'kurzor mozgatása jobbra'. Szöveges üzemmódban a bevitt karakterek bekerülnek a kurzor aktuális pozíciójába. Parancs módból úgy tudunk szöveges (text) üzemmódba váltani, hogy kiadjuk az a,C,i,o,O vagy R parancsok valamelyikét. Text módból az ESC billentyuvel jutunk parancs módba. Nagyon vigyázzunk, mert a képernyon semmi sem utal rá, hogy éppen melyik üzemmódban vagyunk! Ez a fo ok, ami miatt az emberek ellenséges érzelmeket táplálnak a vi editorral szemben. Ne felejtsük el azonban, hogy a vi-t sok-sok évvel ezelott írták, amikor e terminálok még nem voltak olyan fejlettek mint napjainkban. Vigyázat, a kis- és nagybetuk különbözonek számítanak! Igyekezzünk fejbol megtanulni a parancsokat; azt fogjuk tapasztalni, hogy minél több parancsot tudunk fejbol, annál könnyebbé válik a vi kezelése. Egy parancsot mindenképpen tanuljunk meg, ez a :q! (a kettospont és a felkiáltójel itt a parancs része).

Mozgás a szövegben

Ctrl u, Ctrl d
A kurzort a szövegben felfelé (up) vagy lefelé (down) viszi 12 sorral.
Ctrl f, Ctrl b
A kurzort a szövegben elore (forward) vagy hátra (back) viszi 12 sorral.
e
A kurzort a következo szó végére viszi.
b
A kurzort az elozo szó elejére viszi.
Ctrl g
Kiírja a kurzort tartalmazó sor sorszámát.
G
A szerkesztett fájl végére ugrik.
n G
A fájl n-dik sorára ugrik.
$
Ugrás az aktuális sor végére.
/keresett_szó
A keresett_szó elso elofordulási helyére ugrik.
n
A keresett_szó következo elofordulási helyére ugrik.

Szöveg beszúrás

i
A begépelt szöveget beszúrja (insert) a kurzor pozíciójához. Ha befejeztük a muveletet, üssük le az ESC billentyut.
a
A begépelt szöveget a kurzor pozíciójától kezdve hozzáfuzi (append) a szerkesztett dokumentumhoz. Ha befejeztük a muveletet, üssük le az ESC billentyut.
o
Egy üres sort hoz létre az aktuális sor alatt. Gépeljük be a kívánt szöveget, majd üssük le az ESC billentyut.
O
Egy üres sort hoz létre az aktuális sor felett. Gépeljük be a kívánt szöveget, majd üssük le az ESC billentyut.

Szöveg módosítása

x
Kitörli a kurzor pozícióján álló karaktert.
rc
Kicseréli (replace) a kurzor pozícióján álló karaktert c-re.
R
Felülírásos üzemmódba kapcsol; Üssük le az ESC billentyut ha vissza akarunk térni parancs módba.
dd
Kitörli az aktuális sort.
J
A következo sort összefuzi az aktuális sorral.
C
Kijelöli az aktuális sor kurzortól jobbra eso részét (egy $ jelet rak a sor végére.) Amit ezután begépelünk, az felülírja a megjelölt részt.
u
Visszacsinálja az utolsó muveletet
U
Visszacsinálja az eredeti állapotot az aktuális sorban.
:i,j m p
Az i. és j. sorok közé eso részt (beleértve magát az i. és j. sort is) áthelyezi a p. sor után.

Kilépés a vi-ból

:w
Elmenti a szerkesztett szöveget.
:w név
'név' néven elmenti a szerkesztett szöveget.
:i,j w név
'név' néven elmenti az i. és j. sorok közé eso részt (beleértve magát az i. és j. sort is)
:q
Kilép, ha nem változtattunk a szövegen az utolsó mentés óta.
:q!
Mindenképpen kilép, az esetleges változtatások elmentése nélkül.
:wq
Elmenti a szerkesztett szöveget és kilép.

Egyéb

.
Megismétli az utolsó parancsot.

Feladatok

Készítsünk magunknak "puskát" a vi legfontosabb parancsairól! Ehhez eloször mentsük ki e lecke szövegét egy szövegfájlba. Ezt minden levelezoprogrammal meg lehet tenni, általában az export parancs segítségével. Ha sehogyan sem boldogulunk, akkor használjuk a Unix mail programját. (Indítsuk el a mail programot, válasszuk ki ezt a levelet a sorszámának begépelésével, majd az s vi-doc paranccsal mentsük el a szöveget egy vi-doc nevu fájlba.

Az így létrehozott szövegfájlt töltsük be a vi-ba! Töröljük ki a parancsok leírása elotti bevezeto szöveget, és a feladatok leírását. Mentsük el a változtatásokat! Most lapozzunk vissza a fájl elejére, és szúrjunk be egy-egy üres sort minden parancs leírása elé!

Az elkészült "puskát" ki is nyomtathatjuk, feltéve, hogy van nyomtató a rendszerben. A nyomtatási lehetoségekrol és a nyomtató használatáról (hogy hívják a PRINT parancsot ezen a héten), olvassuk el a dokumentációt, vagy kérdezzük meg a rendszeradminisztrátort!

Nézzük meg, hogy az eddigi munkánkkal mennyi helyet foglalunk!


*************************************************************************
*=                                                                     =*
*=                           SZERZOI JOGOK                             =*
*=                                                                     =*
*=   Ez  a dokumentum a Unix  operacios  rendszer  es a szamitogepes   =*
*=   halozatok elterjedeset  kivanja  elosegiteni, ezert dijmentesen   =*
*=   terjesztheto.  Nem szabad azonban a terjesztes soran a szoveget   =*
*=   megvaltoztatni,  barmilyen  modon  megcsonkitani  es a  szerzoi   =*
*=   jogokra vonatkozo megjegyzest eltavolitani!  Sem  a dokumentum,   =*
*=   sem annak barmely resze nem hasznalhato fel segedanyagkent vagy   =*
*=   tankonyvkent profitorientalt intezmenyekben vagy tanfolyamokon,   =*
*=   a szerzok elozetes irasbeli engedelye nelkul!                     =*
*=                                                                     =*
*=   (C) Csaky Istvan es Mork Peter         Miskolc, 1994. januar 19   =*
*=                                                                     =*
*************************************************************************