103.8 Lecke 1
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
103 GNU és Unix parancsok |
Fejezet: |
103.8 A fájlszerkesztés alapjai |
Lecke: |
1/1 |
Bevezetés
A legtöbb Linux disztribúcióban a vi
— a “vizuális” rövidítése — előre telepítve van, és ez a shell környezet standard szerkesztője. A vi egy interaktív szövegszerkesztő, a fájl tartalmát szerkesztés közben megjeleníti a képernyőn. Mint ilyen, lehetővé teszi a felhasználó számára, hogy a dokumentumon belül bárhol mozogjon és módosításokat végezzen. A grafikus asztali vizuális szerkesztőprogramokkal ellentétben azonban a vi
szerkesztő egy shell alkalmazás, amely minden szerkesztési feladathoz billentyűparancsokat tartalmaz.
A vi
alternatíváját, a vim
-et (vi improved) néha a vi
modern helyettesítőjeként használják. A vim
egyéb fejlesztések mellett támogatja a szintaxisok kiemelését, a többszintű undo/redo műveleteket és több dokumentum szerkesztését. Bár a vim
több erőforrással rendelkezik, teljesen kompatibilis a vi
-vel, így a legtöbb feladat esetén megkülönböztethetetlen egymástól a kettő.
A vi
indításának szabványos módja, hogy paraméterként megadjuk egy fájl elérési útvonalát. Ha közvetlenül egy adott sorra akarunk ugrani, akkor a sorszámát plusz jellel kell közölni, mint például a vi +9 /etc/fstab
a /etc/fstab/
megnyitásához, és a kurzor 9. sorra helyezéséhez. Szám nélkül a pluszjel önmagában az utolsó sorra helyezi a kurzort.
A vi
kezelőfelülete nagyon egyszerű: a terminálablakban rendelkezésre álló összes helyet elfoglalja, hogy a felhasználónak megjelenítsen egy fájlt, amelyet általában parancsargumentumként kap meg. Az egyetlen vizuális támpont a kurzor aktuális pozícióját mutató lábléc és a fájl végét jelző tilde ~
. A vi
-nak különböző végrehajtási módjai vannak, amelyekben a program viselkedése megváltozik. A leggyakoribbak a következők: insert mode (beszúrási mód) és normal mode (normál mód).
Insert Mode
Az insert mód egyszerű: a szöveg úgy jelenik meg a képernyőn, ahogyan azt a billentyűzeten beírjuk. Ez az a fajta interakció, amit a legtöbb felhasználó elvár egy szövegszerkesztőtől, de a vi
először nem így jeleníti meg a dokumentumot. Az insert módba való belépéshez a felhasználónak a normál módban kell végrehajtania egy beszúrási parancsot. A Esc billentyűvel befejeződik az insert mód, és visszatér a normál módba, a vi
alapértelmezett módjába.
Note
|
Ha többet szeretnénk megtudni a többi futtatási módról, nyissuk meg a :help vim-modes-intro |
Normal Mode
Alapértelmezés szerint a vi
normál módban - más néven parancs módban - indul. Ebben az üzemmódban a billentyűzetbillentyűk a navigációs és szövegkezelési feladatokhoz tartozó parancsokhoz vannak rendelve. Ebben az üzemmódban a legtöbb parancs egyedi billentyű. Néhány billentyű és funkciójuk a normál módban a következő:
0
,$
-
A sor elejére vagy végére ugrás.
1G
,G
-
A dokumentum elejére vagy végére ugrás.
(
,)
-
A mondat elejére vagy végére ugrás.
{
,}
-
A bekezdés elejére vagy végére ugrás.
w
,W
-
Szó vagy szó és írásjel átugrása.
h
,j
,k
,l
-
Balra, le, fel, jobbra.
e
orE
-
Az aktuális szó végére ugrás.
/
,?
-
Előre vagy hátra keresés.
i
,I
-
Belépés az insert módba az aktuális kurzorpozíció előtt vagy az aktuális sor elején.
a
,A
-
Belépés az insert módba az aktuális kurzorpozíció után vagy az aktuális sor végén.
o
,O
-
Új sor hozzáadása és belépés az insert módba a következő sorban vagy az előző sorban.
s
,S
-
A kurzor alatti karakter vagy az egész sor törlése és belépés az insert módba.
c
-
A kurzor alatti karakter(ek) megváltoztatása.
r
-
A kurzor alatti karakter cseréje.
x
-
A kurzor alatt kiválasztott karakter(ek) törlése.
v
,V
-
Új kijelölés indítása az aktuális karakterrel vagy az egész sorral.
y
,yy
-
A karakter(ek) vagy az egész sor másolása (yanks).
p
,P
-
A kijelölt tartalom beillesztése az aktuális pozíció mögé vagy elé.
u
-
Az utolsó művelet visszavonása.
Ctrl-R
-
Az utolsó művelet megismétlése.
ZZ
-
Bezárás és mentés.
ZQ
-
Bezárás mentés nélkül.
Ha a parancs előtt egy szám áll, a parancs annyiszor kerül végrehajtásra. Például a 3yy
megnyomása az aktuális sort és a következő kettőt másolja, a d5w
megnyomásával az aktuális szót és a következő 4 szót törli, és így tovább.
A legtöbb szerkesztési feladat több parancs kombinációja. Például a vey
billentyűsorozatot az aktuális pozíciótól kezdődően az aktuális szó végéig tartó kijelölés másolására használjuk. A parancsismétlés kombinációkban is használható, így a v3ey
az aktuális pozíciótól kezdődő kijelölést másolná az onnan induló harmadik szó végéig.
A vi
képes a másolt szöveget regiszterekbe rendezni, lehetővé téve a különböző tartalmak egyidejű megtartását. Egy regisztert egy "
karakterrel kell megadni, és ha egyszer létrehoztuk, akkor az az aktuális munkamenet végéig megmarad. A "ly
billentyűsorozat létrehoz egy regisztert, amely az aktuális szekciót tartalmazza, és amely az l
billentyűvel lesz elérhető. Ezután az l
regisztert az "lp
billentyűvel lehet beilleszteni.
Lehetőség van arra is, hogy a szöveg mentén tetszőleges pozíciókban egyéni jelöléseket állítsunk be, megkönnyítve ezzel a gyors ugrást közöttük. A jelek létrehozása az m
billentyű, majd az aktuális pozíciót megcímző billentyű lenyomásával történik. Ha ez megtörtént, akkor a kurzor a '
és a kiválasztott billentyű lenyomásával visszatér a megjelölt pozícióba.
Any key sequence can be recorded as a macro for future execution. A macro can be recorded, for example, to surround a selected text in double-quotes. First, a string of text is selected and the key q
is pressed, followed by a register key to associate the macro with, like d
. The line recording @d
will appear in the footer line, indicating that the recording is on. It is assumed that some text is already selected, so the first command is x
to remove (and automatically copy) the selected text. The key i
is pressed to insert two double quotes at the current position, then Esc returns to normal mode. The last command is P
, to re-insert the deleted selection just before the last double-quote. Pressing q
again will end the recording. Now, a macro consisting of key sequence x
, i
, ""
, Esc and P
will execute every time keys @d
are pressed in normal mode, where d
is the register key associated with the macro.
A makró azonban csak az aktuális munkamenet alatt lesz elérhető. Ahhoz, hogy a makrók tartósak legyenek, a konfigurációs fájlban kell tárolni őket. Mivel a legtöbb modern disztribúció a vim-et használja vi kompatibilis szerkesztőként, a felhasználó konfigurációs fájlja a ~/.vimrc
. A ~/.vimrc
állományon belül a let @d = 'xi""^[P'
a d
regisztert az idézőjelek között lévő billentyűsorozatra állítja. Ugyanaz a korábban egy makróhoz rendelt regiszter használható a billentyűsorozat beillesztésére.
Colon Commands
A normál mód a vi
parancsok egy másik csoportját is támogatja: a kettőspont-parancsokat (colon commands). A kettőspont-parancsok, mint a neve is mutatja, a normál módban a : kettőspont billentyű lenyomása után kerülnek végrehajtásra. A kettőspont-parancsok lehetővé teszik a felhasználó számára a keresést, a mentést, a kilépést, a shell parancsok futtatását, a vi
beállítások módosítását stb. A normál üzemmódba való visszatéréshez a :visual
parancsot kell végrehajtani, vagy az Enter billentyűt kell megnyomni minden parancs nélkül. A leggyakoribb kettőspont-parancsok közül néhányat itt jelölünk (a kezdőbetű nem része a parancsnak):
:s/REGEX/TEXT/g
-
A
REGEX
reguláris kifejezés összes előfordulását helyettesíti aTEXT
kifejezéssel az aktuális sorban. Elfogadja ased
parancs szintaxisát, beleértve a címeket is. :!
-
A következő shell parancs futtatása.
:quit
or:q
-
Kilépés a programból.
:quit!
or:q!
-
Kilépés a programoból mentés nélkül.
:wq
-
Mentés és kilépés.
:exit
or:x
or:e
-
Mentés és kilépés, ha szükséges.
:visual
-
Vissza navigációs módba.
A szabványos vi
program alkalmas a legtöbb szövegszerkesztési feladat elvégzésére, de bármilyen más, nem grafikus szerkesztőprogram is használható a szöveges fájlok szerkesztésére a shellben.
Tip
|
A kezdő felhasználóknak nehézséget okozhat a |
Alternatív szerkesztők
A vi
-t nem ismerő felhasználóknak nehézséget okozhat az alkalmazkodás, mivel működése nem intuitív. Egyszerűbb alternatíva a GNU nano
, egy kis szövegszerkesztő, amely minden alapvető szövegszerkesztési funkciót kínál, mint például visszavonás/ismétlés (undo/redo), szintaxisszínezés, interaktív keresés és helyettesítés, automatikus behúzás, sorszámozás, szótömörítés, fájlzár, biztonsági mentés és nemzetköziesítés támogatás. A vi
-al ellentétben minden billentyűleütés csak beillesztésre kerül a szerkesztett dokumentumba. A nano
-ban a parancsokat a Ctrl billentyűvel vagy a Meta billentyűvel adhatjuk meg (rendszertől függően a Meta a Alt vagy a ⌘).
Ctrl-6
vagyMeta-A
-
Új kijelölés indítása. Kijelölés létrehozására a Shift billentyű lenyomásával és a kurzor mozgatásával is lehetőség van.
Meta-6
-
Az aktuális kijelölés másolása.
Ctrl-K
-
Az aktuális kijelölés kivágása.
Ctrl-U
-
A kimásolt tartalom beillesztése.
Meta-U
-
Visszavonás (undo).
Meta-E
-
Ismétlés (redo).
Ctrl-\
-
Szöveg kicserélése a kijelölésnél.
Ctrl-T
-
A dokumentum vagy az aktuális kijelölés helyesírás-ellenőrzési munkamenetének elindítása.
Az Emacs egy másik nagyon népszerű szövegszerkesztő a shellhez. Míg a szöveg beillesztése a nano
programhoz hasonlóan csak gépeléssel történik, addig a dokumentumban való navigációt billentyűparancsok segítik, mint a vi
programban. Az Emacs számos olyan funkciót tartalmaz, amely többé teszi, mint egy egyszerű szövegszerkesztőt. Ez egy IDE (integrated development environment (integrált fejlesztőkörnyezet)) is, amely képes programok fordítására, futtatására és tesztelésére. Az Emacs beállítható e-mail, hír- vagy RSS-kliensként is, így valódi produktivitási csomaggá válik.
Maga a shell minden alkalommal, amikor szükséges, lefuttat egy alapértelmezett szövegszerkesztőt, általában a vi
-t. Ez a helyzet például akkor, amikor a crontab -e
parancsot hajtjuk végre a cronjobs szerkesztésére. A Bash a VISUAL
vagy EDITOR
munkamenetváltozókat használja a shell alapértelmezett szövegszerkesztőjének kiderítésére. Például a export EDITOR=nano
parancs a nano
-t határozza meg alapértelmezett szövegszerkesztőként az aktuális shell munkamenetben. Ahhoz, hogy ez a módosítás a munkamenetek között tartós legyen, a parancsot a ~/.bash_profile
állományba kell felvenni.
Gyakorló feladatok
-
A
vi
-t leginkább konfigurációs fájlok és forráskódok szerkesztőjeként használják, ahol a behúzás segít a szövegrészek azonosításában. Egy kijelölés a<
megnyomásával balra, a>
megnyomásával pedig jobbra behúzható. Milyen billentyűket kell megnyomni normál módban ahhoz, hogy az aktuális kijelölést három lépéssel balra behúzza? -
Egy teljes sor kiválasztható a
V
gomb megnyomásával avi
normál üzemmódjában. Azonban a befejező újsor karakter is szerepel a kijelölésben. Milyen billentyűket kell megnyomni normál üzemmódban a kezdő karaktertől az újsor karakterig, de nem beleértve az újsor karaktert? -
Hogyan kell a
vi
-t a parancssorban meghívni, hogy megnyíljon a~/.bash_profile
és egyenesen az utolsó sorba ugorjon? -
Milyen billentyűket kell megnyomni a
vi
normál módjában, hogy a kurzor aktuális pozíciójától a következő pont karakterig töröljük a karaktereket?
Gondolkodtató feladatok
-
A
vim
lehetővé teszi tetszőleges szélességű szövegblokkok kijelölését, nem csak egész sorokat tartalmazó szakaszokét. Normál módban a Ctrl+V billentyűkombináció megnyomásával a kurzor felfelé, lefelé, balra és jobbra mozgatásával történik a kijelölés. Ezzel a módszerrel hogyan lehetne törölni az aktuális sor első karakterétől kezdődő, a következő nyolc oszlopot és öt sornyi szöveget tartalmazó blokkot? -
Egy
vi
munkamenet megszakadt egy váratlan áramkimaradás miatt. A fájl újbóli megnyitásakor avi
megkérdezi a felhasználót, hogy vissza akarja-e állítani a swap fájlt (avi
által készített automatikus másolatot). Mit tegyen a felhasználó a swap-fájl elvetéséhez? -
Egy
vim
munkamenetben egy sor korábban azl
regiszterbe lett másolva. Milyen billentyűkombinációval rögzítenénk egy makrót aza
regiszterben, hogy azl
regiszterben lévő sort közvetlenül az aktuális sor elé illesszük be?
Összefoglalás
Ez a lecke a Linux shell környezet standard szövegszerkesztőjével foglalkozott: a vi
szerkesztővel. Bár a vi
az ismeretlen felhasználó számára félelmetes, olyan tulajdonságokkal rendelkezik, amelyek jó választássá teszik a technikai és nem technikai jellegű szövegszerkesztéshez. A lecke a következő lépéseken ment keresztül:
-
vi
alapvető használat és hasznos funkciók. -
Mi a
vim
— a továbbfejlesztettvi
— és más alternatív szerkesztők. -
Hogyan határozzuk meg a shell környezet alapértelmezett szövegszerkesztőjét.
A tárgyalt parancsok és eljárások a következők voltak:
-
A
vi
szerkesztő és annak továbbfejlesztett változata avim
. -
Alapvető szövegszerkesztés a
vi
-ban. -
Alternatív szerkesztők
emacs
ésnano
.
Válaszok a gyakorló feladatokra
-
A
vi
-t leginkább konfigurációs fájlok és forráskódok szerkesztőjeként használják, ahol a behúzás segít a szövegrészek azonosításában. Egy kijelölés a<
megnyomásával balra, a>
megnyomásával pedig jobbra behúzható. Milyen billentyűket kell megnyomni normál módban ahhoz, hogy az aktuális kijelölést három lépéssel balra behúzza?A
3<
billentyűk jelentik a 3 lépés balra behúzását. -
Egy teljes sor kiválasztható a
V
gomb megnyomásával avi
normál üzemmódjában. Azonban a befejező újsor karakter is szerepel a kijelölésben. Milyen billentyűket kell megnyomni normál üzemmódban a kezdő karaktertől az újsor karakterig, de nem beleértve az újsor karaktert?A
0v$h
billentyűk, ahol a0
(“sor elejére ugrás”),v
(“karakterkijelölés kezdete”),$
(“sor végére ugrás”) ésh
(“egy pozíció vissza”). -
Hogyan kell a
vi
-t a parancssorban meghívni, hogy megnyíljon a~/.bash_profile
és egyenesen az utolsó sorba ugorjon?A
vi + ~/.bash_profile
parancs meg fogja nyitni a fájlt és a kurzort az utolsó sorba helyezi. -
Milyen billentyűket kell megnyomni a
vi
normál módjában, hogy a kurzor aktuális pozíciójától a következő pont karakterig töröljük a karaktereket?A
dt.
billentyűket, ahol ad
(“törlés kezdése”),t
(“következő karakterre ugrás”) és.
(időszakos karakter).
Válaszok a gondolkodtató feladatokra
-
A
vim
lehetővé teszi tetszőleges szélességű szövegblokkok kijelölését, nem csak egész sorokat tartalmazó szakaszokét. Normál módban a Ctrl+V billentyűkombináció megnyomásával a kurzor felfelé, lefelé, balra és jobbra mozgatásával történik a kijelölés. Ezzel a módszerrel hogyan lehetne törölni az aktuális sor első karakterétől kezdődő, a következő nyolc oszlopot és öt sornyi szöveget tartalmazó blokkot?A
0
, aCtrl-V
és a8l5jd
kijelöli és törli a megfelelő blokkot. -
Egy
vi
munkamenet megszakadt egy váratlan áramkimaradás miatt. A fájl újbóli megnyitásakor avi
megkérdezi a felhasználót, hogy vissza akarja-e állítani a swap fájlt (avi
által készített automatikus másolatot). Mit tegyen a felhasználó a swap-fájl elvetéséhez?Nyomjuk meg a
d
billentyűt, amikor avi
kéri. -
Egy
vim
munkamenetben egy sor korábban azl
regiszterbe lett másolva. Milyen billentyűkombinációval rögzítenénk egy makrót aza
regiszterben, hogy azl
regiszterben lévő sort közvetlenül az aktuális sor elé illesszük be?A
qa"lPq
kombinációval, ahol aq
(“makrórögzítés elkezdése”),a
("` aza
regiszter hozzárendelése a makróhoz`"),"l
("`l
regiszterben lévő szöveg kijelölése"), `P
(“aktuális sor elé történő beillesztés”) ésq
(“makrórögzítés vége”).