Pozicionáló parancsok
Szavak, mondatok és egyéb szövegelemek
A pozicionáló parancsok előtt ismerkedjünk meg néhány alapvető vi szövegobjektummal, nevezetesen a szóval, mondattal, bekezdéssel és a szekcióval. Ezek egyfelől abban segítenek bennünket, hogy nagyobb lépésekkel tudjunk mozogni a fájlban, másrészt ezekkel tudunk nagyobb összefüggő elemeket kijelölni szerkesztendő állományunkban.
A szóra a vi két definíciót alkalmaz. A szűkebb értelmezés szerint szó a kizárólag alfanumerikus karaktereket és '-' karaktert tartalmazó karaktersorozat. Az ilyen értelmezés szerinti szavak között ugrálhatunk a b és w parancsokkal, b mindig a baloldali, w pedig a jobboldali legközelebbi szókezdetet jelöli.
Tágabb értelmezés szerint a vi a szó részének értelmezi az összes, nem szóköz és sorvége karaktereket. E definíció szerint tehát a központozó karakterek is a szó részét képezik. Az eszerint definiált szavak közt a nagybetűs B és W parancsokkal mozoghatunk.
A mondat a vi definíciója szerint szavak olyan sorozata, melyet szóköz vagy soremelés előz meg, és vagy soremelés és üres sor, vagy egy központozó karaktert követő legalább két szóköz zár le. A mondat elejére és végére a '(' és ')' karakterekkel mehetünk.
A bekezdés (paragrafus) az üres sorokkal határolt sorok összessége. Bekezdés elejére illetve végére a '{' és '}' karakterekkel léphetünk.
A pozicionáló parancsoknak nem csak a fájlban való mozgáskor van szerepük, legalább ilyen fontos, hogy segítségükkel jelölhetjük ki egy-egy vi parancs hatókörét. Ennek megértéséhez röviden tekintsük át a vi parancsok általános felépítését.
Minden vi parancsot egy betű jelöl, melyet megelőzhetnek és követhetnek opcionális argumentumok is. Egy vi parancs általános felépítése a következő:
argumentum parancs szövegobjektum
Az argumentumokkal leggyakrabban azt adjuk meg, hogy a szóban forgó parancsot hányszor ismételjük meg, de a későbbiekben látni fogjuk, hogy például a puffer- és markerjelölés is itt történik. A parancs után szereplő szövegobjektum pedig arra utal, hogy mekkora szövegterületre terjed majd ki a szóban forgó vi parancs hatálya. Mindez valóban száraznak tűnhet, jöjjön hát néhány példa, az egyszerűbbektől a bonyolultabbakig.
Legegyszerűbb megoldásként egyes parancsokat megadhatunk önmagukban is, például az x parancs törli azt a karaktert, amelyen a kurzor áll. E parancsokat megelőzhetjük sokszorozó argumentummal: a 3x parancs a kurzortól számított 3 karaktert töröl le, hasonlóképpen, az l parancs egy karakterrel jobbra mozgatja a kurzort a sorban, míg 10l hatására tíz karakternyit mozdulhatunk jobbra. E sokszorozó argumentum hatására tehát az adott parancs ismétlődik n-szer.
Más parancsok nem állnak meg önmagukban, paraméterek nélkül. Ilyen például a törlést végző d parancs. A vi konvenciói szerint, ha egy ilyen parancs karakterét megduplázzuk, a parancs a teljes aktuális sorra fog vonatkozni. Esetünkben tehát a dd törli a kurrens sort. Ha viszont a parancs betűje után egy normál pozícionáló vi parancsot adunk meg, a törlési parancs hatálya a pillanatnyi kurzorpozíciótól addig a pontig terjed a fájlban, ameddig a pozicionáló paranccsal jutottunk volna. Így dw a pillanatnyi pozíciótól a következő szó elejéig töröl, d$ a sor végéig, d) a mondat végéig, d23G a huszonharmadik sorig, és így tovább. Természetesen a pozicionáló parancsoknál is szerepelhetnek sokszorozó argumentumok, ahogy 3w azt jelenti, hogy három szót mozdulunk jobbra a kurzortól, úgy d3w azt jelzi, hogy három szót törlünk a kurzortól kezdve. Utóbbival viszont egyenértékű lesz a 3dw megadás, ami azt jelenti, hogy háromszor hajtunk végre szótörlést.
h, <BACKSPACE> |
A kurzort egy karakterrel balra mozgatja. |
l, <SPACE>. |
A kurzort egy karakterrel jobbra mozgatja |
$ |
A kurzort a sor utolsó karakterére állítja. |
0, |
A kurzort a sor első karakterére állítja. |
n |
A kurzort a sor n-edik oszlopára állítja. |
^ |
A kurzort a sor első nem blank karakterére állítja. |
f x |
A kurzort jobbra mozgatja az első x karakterre. |
F x |
A kurzort balra mozgatja az első x karakterre. |
t x |
A kurzort jobbra mozgatja, az első x karakter elé. |
T x |
A kurzort balra mozgatja, az első x karakter mögé. |
; |
A megelőző f, F, t, T parancsok által keresett karakter következő előfordulását keresi. |
, |
Az f, F, t, T parancsok által előzőleg keresett karakter újabb előfordulását keresi visszafelé. |
Az összes itt felsorolt parancs a kurrens sorban működik, beleértve a t és f parancsokat is.
J |
A kurzort egy sorral lejjebb mozgatja. |
K |
A kurzort egy sorral feljebb mozgatja. |
+, <CR> |
A kurzort lefele mozgatja, a következő sor elejére. |
- |
A kurzort felfele mozgatja, a felette lévő sor elejére. |
w, W |
A kurzort a következő szó első karakterére mozgatja. |
B, B |
A kurzort a megelőző szó első karakterére viszi. |
( |
A kurzort a mondat elejére viszi. |
) |
A kurzort a következő mondat elejére viszi. |
{ |
A kurzort a bekezdés elejére viszi. |
} |
A kurzort a következő bekezdés elejére viszi. |
nH |
A kurzort a képernyő első (illetve n-edik) sorára viszi. |
M |
A kurzort a képernyő közepső sorára viszi. |
nL |
A kurzort a képernyő utolsó (illetve alulról az n-edik) sorára viszi. |
^f |
Teljes képernyőnyit előre görget. |
^d |
Félképernyőnyit előre görget. |
^b |
Teljes képernyőnyit hátrafele görget. |
^u |
Félképernyőnyit hátrafele görget. |
^g |
Az alsó sorban kiírja a kurrens állomány státuszinformációit (név, módosították-e) és a kurzorpozíciót (sorszám/teljes sorok száma, százalékos pozíció az állományon belül). |
G |
A kurzort a buffer utolsó sorának elejére állítja. |
NG |
A kurzort a buffer n-edik sorának elejére állítja. |
A / illetve a ? karakter leütése után a kurzor a képernyő utolsó sorába, az u.n. parancssorba kerül, a mintát ide kell folyamatosan gépelni. Természetesen amit itt írunk, az nem kerül a javítandó szövegbe.
/pattern |
A pattern minta következő előfordulását keresi a bufferben. A kurzor pattern első karakterére áll. Ugyanazon minta ismételt előfordulását a / karakter minta nélkül történő megadásával kereshetjük. |
? pattern |
Visszafele keresi pattern következő előfordulását. A kurzort pattern első karakterére állítja. Ugyanazon minta ismételt előfordulását a ? karakter minta nélkül történő megadásával kereshetjük. |
N |
Megismétli az utolsó mintakereső utasítást. |
N |
Megismétli az utolsó mintakereső utasítást, de az azzal ellentétes irányba. |