Fájlműveletek és külső shell parancsok

Az alábbiakban azokkal a parancsokkal ismerkedünk meg, amelyek fájlműveletek végzését és külső parancsok végrehajtását teszik lehetővé a vi alól.

Külső parancs végrehajtása vi alól

Gyakran szükségünk lehet egy-egy Unix parancs kiadására a vi alól, s ilyenkor kényelmetlen kilépni, majd újraindítani az editort. A

:!unix_parancs

formátumú utasítás hatására végrehajtódik unix_parancs, eredménye a képernyőnkre íródik, innen egy újsor karakter leütésére kerülünk vissza előző képernyőnkre. Ebben az esetben semmiféle kapcsolat nincs a vi által editált fájlunk és a cmd parancs között, így arra sincs lehetőségünk, hogy adatokat cseréljünk a futtatott paranccsal. Az alábbi parancs hatására azt nézzük meg, hogy melyik katalógisban tartózkodunk éppen:

:!pwd

Fájlok írása-olvasása

A vi lehetőséget nyújt arra, hogy a szerkesztett állomány tetszőleges pontjára beszúrjuk egy másik fájl tartalmát, illetve a szerkesztett fájl egy részét másik fájlba írjuk.

:[sorcím]r file

Hatására a kurzor mögé, illetve címmegadás esetén az adott sorba beszúródik file tartalma.

:[címtartomány]w file

Hatására a szerkesztett fájl címtartomány által definiált része (címmegadás hiányában a teljes fájl) beíródik a file állományba.

címtartomány illetve sorcím az ed és sed editoroknál már tárgyalt módon adható meg, akár abszolút, akár relatív sorszámok, akár reguláris kifejezéssel megadott minták formájában. Néhány példa:

:23r text

A szerkesztett fálj 23. sora után beszúrja text állományt.

:1,.-1w rovid.txt

A szerkesztett fájl elejét (az aktuális előtti sorral bezárólag) kimenti rovid.txt néven.

:1,/^_end/w t1.doc

A fájl elejétől a sor eleji _end mintát tartalmazó sorig kimenti a t1.doc fájlba a szerkesztett állományt.

Pufferműveletek

Még érdekesebb és hasznosabb lehet, ha Unix parancsok eredményét tudjuk valahogyan beépíteni fájlunkba, netán a fájl egyes részeit Unix parancsokkal, szűrőkkel tudnánk manipulálni. Erre is megvan a lehetőség, s ez teszi igazán rugalmassá és sokoldalúvá a vi-t. Számos vi parancsnál (pontosabban az ex üzemmódú parancsoknál) lehetőség van a vi belső puffereinek felhasználására fájlműveletek során; ilyenkor a '!' karakter jelzi a vi számára, hogy külső parancsot kell végrehajtani, mely értelemszerűen ír vagy olvas a belső pufferből.

:[sorcím]r ! parancs

Hatására a megadott sor után beszúródik parancs eredménye.

! szövegobjektum parancs

Hatására az aktuális fájl szövegobjektum által kijelölt részén végrehajtódik parancs, s ennek eredményével helyettesítődik az eredeti szövegobjektum. A c,d és más szövegmódosító vi parancsoknál megszokott módon, ha a parancskaraktert (esetünkben a felkiáltójelet) megduplázzuk, az a kurrens sorra fog vonatkozni, azaz vi az aktuális sort fogja helyettesíteni parancs eredményével. (Az első próbálkozásokkor kicsit zavaró lehet, hogy amikor a kezdő felkiáltójelet begépeljük, semmi sem történik, a következő karakterek begépelésekor megjelenik ugyan, de cserébe a szövegobjektum megadására vonatkozó karaktereket láthatatlanul kell begépelni.)

Néhány példa a pufferműveletek alkalmazására:

:r !date

A kurrens sor mögé beszúrja az aktuális dátumot. Figyeljünk a következőnél a különbségre:

!!date

a kurrens sort lecseréli az aktuális dátumra.

A következő parancs ekvivalens a :r /etc/hosts paranccsal, a kurzor mögé beszúrja a /etc/hosts fájl tartalmát:

:r !cat /etc/hosts

Alábbi példánk akkor lehet hasznos, ha például ékezetes szöveget szerkesztettünk, s emailben szeretnénk elküldeni egy olyan levelezőprogrammal, amelyik nem konvertálja automatikusan küldhető formátumra az ékezetes szöveget:

:1,G !uuencode txt.uu

A fenti parancs a teljes fájlt helyettesíti az uuencode paranccsal kódolt változatára.

Az alábbi parancs a kurrens bekezdést a fold paranccsal maximum 72 karakter hosszúságú sorokra tördeli:

!}fold -w 72

 

Tartalomjegyzék