UNIX-Linux/héjprogramozás - vi
Szövegszerkesztők Tartalom 1. Szövegszerkesztés UNIX alatt.....................................................................................................1 2. Egyszerű szerkesztők...................................................................................................................1 3. A vi és az Emacs..........................................................................................................................2 4. A vi szerkesztő használata...........................................................................................................2 4.1 A vi működési módjai...........................................................................................................2 4.2 Fontosabb parancsok ............................................................................................................3 1. Indítás a parancssorról............................................................................................................3 2. Kilépés és mentés....................................................................................................................3 3. Beállítások...............................................................................................................................4 4. A szerkesztett sorok címzése..................................................................................................4 5. Mozgás a pufferben.................................................................................................................4 6. Bejelölések (mark) használata................................................................................................5 7. Beszúrás és módosítás.............................................................................................................5 8. Törlés......................................................................................................................................6 9. Keresés és helyettesítés...........................................................................................................6 10. Néhány hasznos Ex mód parancs..........................................................................................7 11. Yank (Copy) és Paste............................................................................................................7 12. A vizuális (Visual) mód .......................................................................................................8 13. A vi súgója............................................................................................................................8
1. Szövegszerkesztés UNIX alatt Grafikus felhasználói felület nem állt mindig a felhasználó rendelkezésére, sőt ma sem mindig áll. Például egy hálózaton keresztüli bejelentkezés során sokszor csak terminálon keresztül dolgozunk. Ezért a szövegszerkesztők a szöveges terminál használatát feltételezik, ma is többnyire így használják őket. A UNIX szövegszerkesztői igen komplex szövegkezelési műveletekkel rendelkeznek, többnyire programozás közben felvetődő szerkesztési feladatokra alakították ki őket.
2. Egyszerű szerkesztők Több kisebb szövegszerkesztőt lehet bármely UNIX vagy Linux disztribúció alatt futtatni. Ezek közül az ismertebbek az alábbiak: Az egyik legrégebbi szerkesztő az ed, amelyik ma sem használja ki a terminálon a kurzormozgatás lehetőségét, és akár egy régi kiíró eszközön, sorok szintjén szerkeszti a szöveget. A pico nevű szerkesztő szintén kis méretű, a pine nevű levelező kliens szerkesztője. Egyszerű szerkesztési feladatokra használható. Ennek GNU klónja a nano nevű szerkesztő. Igen népszerű a joe nevű, az előbbieknél interaktív módban valamivel többet megoldó szerkesztő. Mivel a joe billentyűkombinációit ismert szoftverektől vették ad, néhány évvel ezelőtt igen népszerűvé vált. Ugyancsak népszerűségnek örvend a Midnight Commander nevű állományrendszer böngésző program szerkesztője. 1
UNIX-Linux/héjprogramozás - vi
3. A vi és az Emacs Két szerkesztőt tekintenek a UNIX illetve Linux alatt "igazi" szerkesztőknek, a vi és Emacs nevűeket. Mindkettőnek több változata van, és használatuk a UNIX hagyomány részét képezik. Az Emacs arról nevezetes, hogy szövegszerkesztő funkciói mellett beépített levelezőprogrammal, böngészővel stb. is rendelkezik. Ugyanakkor egy Lisp variáns segítségével programozhatók a makró parancsai, ezek rendkívül kiterjeszthetővé teszik. Vannak akik sokoldalúsága miatt az Emacs-ot tekintik az egyetlen "igazi" programnak. A vi tekinthető a UNIX alapú rendszerek standard szerkesztőjének: minden rendszeren megtalálható, még igen leszűkített rendszereken is ott van. Bár parancsai nehezen tanulhatóak és a kezdetben frusztrálóak, népszerűsége megmaradt mind a mai napig, még a grafikus felületeken futtatott szerkesztők mellett is. Ezt igen erős, jól használható szerkesztő parancsainak köszönheti. Ezek nemcsak ötletességükkel tűnnek ki, hanem azzal, hogy nagyon gyorsan lehet velük dolgozni billentyűzetet használva, nagy, több állományból álló programok esetében is. A vi Windows rendszereken is használható, gvim név alatt fut a grafikus verzója: erről a címről tölthető le: http://www.vim.org/download.php#pc (gvim72.exe , 2008 november.). Ez a verzió grafikus menükkel is rendelkezik, de szöveges módban is használható: parancsai nyilván ugyanazok mint a UNIX alatt futó verzióé.
4. A vi szerkesztő használata A vi nem magával az állománnyal dolgozik szerkesztés közben, hanem annak egy másolatával, amelyet szövegpuffernek nevez.
4.1 A vi működési módjai
1. ábra: A vi szerkesztő működési módjai
Command (parancsmód): elsősorban a szövegben való mozgásra használjuk. Ilyenkor a szöveget nem lehet módosítani. Ide mindig az ESC billentyű lenyomásával jutunk - bárhonnan. 2
UNIX-Linux/héjprogramozás - vi
Insert (szövegbevitel): Arra szolgál, hogy módosítsuk a szöveg puffert. Ide különböző szerkesztést indító parancsokkal jutunk. Extended (bővített mód): egy saját parancsnyelvet fogad itt el a szerkesztő. Ide a parancs módból jutunk a : karakter leütésével. A vi elindítható automata szerkesztési módban ezzel a lehetőséggel, vezérlő állományt használva. Visual mód (vizuálisan megjelenített): arra szolgál, hogy vizuálisan jelöljünk ki szöveg területeket a pufferben, és utána ezeken műveleteket végzünk.
2. ábra: A szerkesztő vizuális kijelölési módja
4.2 Fontosabb parancsok 1. Indítás a parancssorról vi file
a file-t megnyitva elindítja a szerkesztőt
vi -r file
elindítja a szerkesztőt és visszaállítja a file-t, amennyiben annak szerkesztése előzőleg megszakadt
view file
a file-t megnyitva elindítja a szerkesztőt a file megjelenítése miatt: ilyenkor az állományt írás védetten nyitja meg
2. Kilépés és mentés ZZ
azonnal kilép és menti a szerkesztett állományt (parancs módból kell kiadni )
:w filenév
kiírja a puffer tartalmát a megnevezett állományba és a szerkesztőben marad
:w
lementi a puffer tartalmát a megnevezett állományba és a szerkesztőben marad
:w!
megpróbál írásvédett állományra írni (ez sikerül, ha az állomány tulajdonosa a vi-t futtató felhasználó vagy a root)
:wq
kiírja a puffer tartalmát és kilép
q!
kilép és nem változtatja meg a szerkesztett állományt
3
UNIX-Linux/héjprogramozás - vi
3. Beállítások A beállítások minden felhasználó számára a /etc/vimrc állományban vannak. Ha saját beállításokat szeretnénk használni, ezt az állományt a home könyvtárba .vimrc név alá kell másolni, és ezután a vi csak ezt a másolatot kezeli konfigurációs indító állományként. A vi konfigurációs állománya meglehetősen bonyolult lehet, mert benne a teljes parancskészlete használható beállítások létrehozására. Íme néhány nélkülözhetetlen beállítás. Ezeket a .vimrc végére, egy-egy külön sorba kell beírni. set number megjeleníti az állomány sorainak számát. Kikapcsolás: set nonumber set showcmd
a status sorba kiírja a folyamatban levő beütött parancs karaktereit
set tabstop=n a tabulator megjelenítésekor használt szóközök száma, pl. set tabstop=4 set expandtab a tabulator szövegbe kerülésekor szóközöket ír helyette set hlsearch
kereséskor színessel kijelöli a megtalált szavakat: ha zavaró, akkor a set nohlsearch beállítással lehet kikapcsolni
set list
megjeleníti a kontroll karaktereket (sorvége, tabulátor, stb.)
4. A szerkesztett sorok címzése A címek segítségével területet lehet kijelölni, amelyet feldolgozó parancsoknál paraméterként használunk majd. Ezeket a címzéseket az Ex mód parancsaiból használjuk. .
aktuális sor címe
^
a file első sora
$
file utolsó sora
%
a file minden sora
+
egy sorral a kurrens sor alatt
-
egy sorral a kurrens sor fölött
+n
n sorral a kurrens sor alatt
-n
n sorral a kurrens sor fölött
.,$
az elsőtől az utolsó sorig
n,m
az n.-től az m. sorig, pl: 1,3
5. Mozgás a pufferben A pufferben való mozgást első sorban parancs módban végezzük. Az alábbi parancsok nem módosítják a szöveget: a kurzor a címzett helyre ugrik. 0
aktuális sor kezdete
$
aktuális sor vége
w
előre egy szót
b
hátra egy szót 4
UNIX-Linux/héjprogramozás - vi
(
mondat elejére
)
mondat végére
{
paragrafus elejére
}
paragrafus végére
[n] G
ugrás egy bizonyos sorra: 5G az ötödik sorra ugrik, 1G az elsőre. Paraméter nélkül a file végére: G
[n] |
ugrás az n.-dik oszlopra a kurrens soron
H
M
L
j
vagy
↓
Egy sor le
k
vagy
↑
Egy sor fel
h
vagy
←
Egy karakter balra
l
vagy
→
Egy karakter jobbra
A képernyő tetejére (Home), közepére (Middle), aljára (három parancs)
''
Vissza a legutolsó helyre ahonnan elugrottam
' jel
Ugrás a "jel" jelre (mark), pl. 'a ugrás az a jelre.
6. Bejelölések (mark) használata m kisbetű
jel beállítása: pl. ma beállítja az a jelet. 26 Ilyen jelet lehet beállítani
' jel
Ugrás a "jel" jelre, pl. 'a ugrás az a jelre.
jel1, jel2
Terület címzése jelekkel, pl. a,b az a jeltől a b jelig. Például Ex módban ennek segítségével egy szövegterületet új állományba lehet írni: : 'a,'b w file
7. Beszúrás és módosítás A beszúrás parancsokat parancs módban adjuk ki, és ilyenkor a szerkesztő átlép Insert módba. i
insert -beszúr a kurrens karakter elé
a
after - beszúr a kurrens karakter után
I
kurrens sor elejére
A
kurrens sor végére
o
Új sort nyit szerkesztésre a kurrens sor alá
O
Új sort nyit szerkesztésre a kurrens sor fölé
c mit
change: a c után egy területet kell megadni, ami vagy a címzések vagy mozgások segítségével történik. A szerkesztő törli a területet és átlép Insert módba pl.: cw - a következő szót cseréli ki c5w - a a következő öt szót cseréli ki c3↓ -a következő 5 sort 5
UNIX-Linux/héjprogramozás - vi
cG - mindent cserél a file végéig c'a -az a jelig mindent cserél S
substitute: a kurrens sort törli és felülírja
C
a kurzor pillanatnyi helyétől a sor végéig töröl és belép Insert módba
R
replace: ugyancsak a kurrens sort helyettesíti, de otthagyja a szövegét és rálehet írni.
r karakter
a kurzor alatti karaktert helyettesíti a beütött karakterrel, és nem lép át insert módba mint a többi parancs, pl. az rx szekvencia a kurzor alatti karakter helyére x -et ír, és nem lép át insert módba.
u
undo: a legutolsó módosítást visszaállítja. Többször egymás után lenyomva halad visszafele, ha több módosítás volt. 5u az utolsó öt módosítást állítja vissza.
U
a kurrens sort állítja vissza teljesen, ha több módosítás volt benne a szerkesztés során
~
Kicseréli a kurzor alatti kisbetűt nagybetűvé illetve fordítva
8. Törlés A komplex parancsok a szövegpufferben módosítanak. A parancsok formátuma általában az alábbi, és ezt alkalmazzuk nem csak a törlés, hanem a beszúrás esetében is. [ismétlés (egy szám)] parancs (mit végzünk el) hányszor (ez egy szám) meddig (ez egy cím a szövegben) Ilyen pl. 5d5w : Az első 5-ös a teljes utána következő parancsra vonatkozik, a d a parancs (törlés), a w a távolság (egy szó), amelyet 5-ször ismételünk. Tehát 5-ször törlünk 5 szó távolságra. d [n] meddig
delete: a d után egy opcionális számot (hányszor hajtsa végre a törlést) és egy távolságot kell megadni a kurzor pillanatnyi pozíciójától. Pl.: d2↓ törli a következő 2 sort dG töröl mindent a file végéig a kurrens kurzorpozíciótól dw egy szót töröl d5w 5szót töröl 5d5w 5x5, azaz 25 szót töröl d'a az a jelig töröl
dd
a kurrens sort törli, 5dd öt sort töröl a kurrens sortól kezdve
D
a kurzortól a sorvégéig töröl
9. Keresés és helyettesítés A parancsokat parancs módból kell kiadni. /karaktertlánc
keresi a karaktertlánc első előfordulását előre haladva. Kisnagybetű számít.
?karaktertlánc
keresi a karaktertlánc első előfordulását vissza haladva. Kisnagybetű számít. 6
UNIX-Linux/héjprogramozás - vi
n
megismétli az előző keresést
N
megismétli az előző keresést a másik irányba
:set ignorecase
Ex módból be lehet állítani, hogy kis nagy betű ne számítson (ez az implicit)
:set noignorecase
Ex módból be lehet állítani, hogy kis nagy betű számítson
/\ckaraktertlánc
keresi a karaktertlánc első előfordulását előre haladva. Kisnagybetű NEM számít, akkor sem ha :set ignorecase be van állítva. Tehát egy \c -t kell a keresett szó elé írni.
:[terület]s/s1/s2/f Ez a helyettesítési parancs. Jelentések: [terület] egy opcionális címzési területet jelent, amelyre kiadjuk a
parancsot. Az implicit terület csak a kurrens sor első találata. s - a parancs (substitute) s1 és s2 a keresett és a helyettesítő sztringek. s1 szabályos (reguláris) kifejezés. f - kapcsolók, itt néhány kisbetű állhat amelyek módosítják a behelyettesítést: g - global, minden találatot helyettesít a területen, c jóváhagyást kér. Pl.: s/abc/def/ csak a kurrens sor első találatát helyettesíti 1,3s/abc/def/c az első 3 sorban helyettesít, és minden helyettesítés előtt rákérdez %s/abc/def/g az egész állományban minden találatot átír Pl.: s/abc/def/ csak a kurrens sor első találatát helyettesíti 1,3s/abc/def/c az első 3 sorban helyettesít, és minden
helyettesítés előtt rákérdez %s/abc/def/g az egész állományban minden találatot átír Mivel a keresett karaktersor (a példában abc) reguláris kifejezés, további példákat később veszünk.
10. Néhány hasznos Ex mód parancs :r file
beilleszti a file állományt a kurzor elé
:r !parancs
lefuttatja a parancs UNIX parancsot, és a kimenetét szúrja be a szövegbe
11. Yank (Copy) és Paste A Yank parancsot akkor adjuk ki, ha egy terület már ki van jelölve (pl. vizuális módban), vagy közvetlenül utána jelöljük ki egy távolsággal a szövegben. Ugyanakkor a törlés parancs ( d ) folyamán a letörölt szövegrész is ebbe a pufferbe kerül (ez a más programoknál külön műveletnek 7
UNIX-Linux/héjprogramozás - vi
tekintett vágás – cut). y [ meddig ] Lemásol egy szövegrészt a kurzortól kezdve és egy pufferbe teszi, ahonnan
vissza lehet majd másolni. Példák: y egy karaktert másol yw egy szót másol 5yw 5 szót másol yG a kurzortól az állomány végéig y5↓ a következő 5 sort y'a a kurzortól az a jelig yy
A kurzor alatti egy sort másolja. De: 5yy 5 sort másol
p
Beilleszti az utolsó Yank által másolt szöveget a kurzor után
P
Beilleszti az utolsó Yank által másolt szöveget a kurzor elé Megjegyezzük, hogy a vi esetében a cut&paste típusú műveletek nagyon komplexek lehetnek, mivel a vi nem csak egy puffert, hanem többet tud egyszerre használni erre a célra, amint azt látni fogjuk.
12. A vizuális (Visual) mód v
Belép vizuális módba (visual mode). A kurzor mozgatásával egy területet lehet kijelölni. A kijelölést bármely területre alkalmazható szövegfeldolgozó parancs befejezheti: ilyenkor a parancs elvégzi a feldolgozást és visszalépteti a szerkesztőt parancs módba. Ilyen lehet pl. a d (törli a területet), y (másolja a területet), c (helyettesíti - ráír), vagy : átlép Ex módba, és itt parancsot lehet kiadni a területre. Ha kijelölés közben megadunk egy mozgást, akkor a kurzor elugrik, és hozzáadja a területet az addig kijelölthöz.
^V
Ugyancsak területet jelöl ki, de míg az előző kijelölésnél a kijelölt rész mindig sorok elejétől történik, itt a szöveget karakteroszlopok szintjén lehet kijelölni. Vizuális "blokk" módnak is nevezik (visual block mode).
Shift-V
Teljes sorokat jelöl ki - függetlenül a kurzor soron belüli pozíciójától (line visual mode)
***
13. A vi súgója Segítséget bármikor Ex módból a help vagy a rövid h paranccsal lehet kérni. Csak angol nyelven működik, pl. :h search
kiírja a keresés segédletét. A súgó szövegét is a vi nyitja meg.
8
UNIX-Linux/héjprogramozás - vi
9