Edytor VI
Edytor VI cieszy się wśród wielu użytkowników niezasłużoną sławą edytora trudnego, nieporęcznego w użyciu i dysponującego małym zestawem możliwości operowania na tekście. A jednak pomimo tego VI nadal pozostaje standardem w systemie UNIX. Dlaczego ? Składa się na to kilka przyczyn:
VI jest edytorem, który może pracować na każdym typie terminala; nawet na terminalach, które nie umożliwiają realizacji edycji pełnoekranowej - w takim przypadku VI pracuje jako edytor liniowy
VI jest dostarczane wraz z systemem operacyjnym UNIX (LINUX); oznacza to, że na jakimkolwiek sprzęcie UNIX'owym byśmy nie pracowali VI jest zawsze dostępne
w niektórych shell'ach UNIX'a , jak np. w Korn Shell'u (ksh) polecenia VI w trybie liniowym można wykorzystywać do edycji linii poleceń.
niezależność edytora VI od klawiszy funkcyjnych powoduje, że użytkownik nie napotyka na żadne kłopoty jeżeli kiedyś zmuszony będzie korzystać z jakiejś "egzotycznej" klawiatury
wielu użytkowników ceni VI za rozbudowany system wyszukiwania wyrażeń regularnych , makr klawiszowych i buforów tekstu
Organizacja edycji
Edycja tekstu za pomocą edytora VI odbywa się na dwóch płaszczyznach. Płaszczyzna wyższa zwana płaszczyzną komend to ten poziom edycji , na którym znajdujemy się zaraz po uruchomieniu edytora. Na płaszczyźnie tej klawisze literowe mają swoje znaczenia funkcyjne, a nie są po prostu literami. Aby przejść do płaszczyzny niższej zwanej płaszczyzną wprowadzania należy wcisnąć na poziomie komend jedna z liter powodujących przejście do wprowadzania. Klawisze te to a,i,o,O, a ich znaczenie zostanie omówione za moment. Powrót z płaszczyzny wprowadzania na płaszczyznę edycji następuje poprzez wciśnięcie klawisza ESC.
******************** a - append (dopisuje tekst za kursorem)
* * i - insert (dopisuje tekst przed kursorem)
* * o - open (dopisuje tekst w nowej linii
* PŁASZCZYZNA * utworzonej poniżej (O-powyżej) kursora)
* KOMEND * ********************
* * ------> * *
* * * *
******************** <------ * PŁASZCZYZNA *
ESC * WPROWADZANIA *
* *
* *
********************
Dobrym sposobem przetestowania na której płaszczyźnie jesteśmy jest wciśnięcie klawisza ESC. W przypadku gdybyśmy znajdowali się na płaszczyźnie komend rozlegnie się brzęczyk.
Za pomocą VI można edytować jednocześnie wiele plików. Jednakże jednorazowo na ekranie przetwarzany jest tylko jeden. Aby po wywołaniu "VI file1 file2 file3" przejść z edycji pliku file1 do edycji pliku file2 należy z płaszczyzny komend użyć polecenia :n . W przypadku gdy chcemy dołączyć do listy przetwarzanych plików nowy plik używamy komendy :e . Informacje o tym jakie pliki są aktualnie edytowane uzyskamy poprzez komendę :args.
Przenoszenie tekstu pomiędzy plikami odbywa się poprzez bufory robocze (może ich być do 26-ciu).
Szybkie poruszanie się po tekście umożliwiają znaczniki tekstu (w jednym pliku do 20 znaczników).
Często używaną sekwencje klawiszy możemy zdefiniować jako makro klawiszowe. Sekwencji takich w VI może być dowolna ilość.
Podział pliku na zdania, ustępy i sekcje pozwala na bardzo efektywne przetwarzania tekstu.
Przegląd podstawowych poleceń VI dla początkującego użytkownika
WYWOŁANIE VI : VI (ENTER)
OPUSZCZENIE VI:
Z zapamiętaniem zmian ZZ
Bez zapamiętania zmian :q! (ENTER)
ZAPAMIĘTANIE ZMIAN W TRAKCIE EDYCJI: :w (ENTER)
WYKONANIE KOMENDY SHELLA: :!
STRONICOWE PRZEGLĄDANIE EKRANU:
do przodu d
do tyłu u
PORUSZANIE SIĘ PO PLIKU:
w lewo h
w prawo j
do góry k
na doł l
na początek linii 0,^
na koniec linii $
do linii o numerze # #G (np 1G 20G 25G itd..)
DOPISYWANIE TEKSTU:
na prawo od kursora a
na lewo od kursora i
poniżej linii z kursorem o
powyżej linii z kursorem O
KASOWANIE TEKSTU:
pojedynczego znaku x
pojedynczego słowa dw
całej linii dd
do końca linii d$
do początku linii d0
POPRAWIANIE TEKSTU:
pojedynczego znaku r
pojedynczego słowa cw
całej linii cc
ODWOŁYWANIE ZMIAN (UNDO):
odwołanie ostatniego polecenia u
wszystkich poleceń :e!
SZUKANIE ŁAŃCUCHA ZNAKÓW:
do przodu / (ENTER)
do tylu ? (ENTER)
ZNACZNIKI TEKSTU:
postaw znacznik # na bieżącej m# (# = a..m np ma,mb itd.)
pozycji kursora
ustaw kursor na znaczniku # '# (# = a..m np 'a,'b itd.)
ZAPAMIĘTYWANIE TEKSTU DO OBSZARU POMOCNICZEGO (YANK):
pojedynczego słowa yw
całej linii yy
do końca linii y$
DOPISYWANIE TEKSTU Z OBSZARU POMOCNICZEGO (PUT):
po kursorze p
przed kursorem P
WŁĄCZENIE NUMERACJI LINII: :set number
WYŁĄCZENIE NUMERACJI LINII: :set nonumber
WYSZUKANIE I ZAMIANA TEKSTU:
wszystkich wystąpień w linii :s/stary_ciag/nowy_ciag/g
pierwszego wystąpienia w linii :s/stary_ciag/nowy_ciag
wszystkich wystąpień od linii 2 do 9 :2,9s/stary_ciag/nowy_ciag/g
wszystkich wystąpień w pliku :1,$s/stary_ciag/nowy_ciag/g
Składnia komend edytora VI
Składnia ogólna poleceń edytora VI wygląda następująco:
(bufor) (licznik) (operator) obiekt
obiekty:
początek linii 0,^(jeżeli używamy liczników)
koniec linii $
słowo w
linia (nie ma oznaczenia; powtarza się operator)
znacznik # '#
ruchy kursora h,j,k,l
Wywołanie samego obiektu powoduje przestawienie się kursora na ten obiekt, np.: 'a powoduje przesuniecie się kursora na znacznik a, a $ powoduje przejście kursora na koniec bieżącej linii
operatory:
d - kasuj
c - zmień
y - zapamiętaj (yank)
> - przesuń w prawo
< - przesuń w lewo
Dopuszczalne są komendy typu operator / obiekt np.:
d'a - skasuj wszystko od bieżącej pozycji kursora do
znacznika a
yw - zapamiętaj słowo
yy - zapamiętaj aktualna linie
>'a - przesuwa linie od bieżącej pozycji kursora do
znacznika a o znacznika a o jedna tabulacje w prawo
(wielkość tabulacji ustalamy poprzez ":set shiftwidth")
wykorzystanie liczników: W celu wielokrotnego wykonania komendy używa się przed jej oznaczeniem licznika: jak np. w komendach typu licznik / operator / obiekt:
4dw - skasuj 4 słowa
7yy - zapamiętaj 7 linii począwszy od aktualnej
lub w komendach typu licznik / operator:
7h - przesuń kursor o 7 pozycji w lewo
wykorzystanie buforów roboczych: Wyniki niektórych komend można strumieniować do lub pobierać z buforów roboczych. Bufory robocze oznaczane są literami od a do z, a ich wykorzystanie sygnalizuje się znakiem cudzysłowu (").
Na przykład komenda:
"f17yy
powoduje skopiowanie 17 linii do bufora roboczego f, bez ich kasowania, a komenda:
"h6dw
kopiuje do bufora h 6 słów, kasując je z pliku.
Do odtworzenia zawartości tych buforów roboczych w innym miejscu piku, bądź w innym pliku należy użyć odpowiednio:
"fp i "hp ( lub "fP oraz "hP )
Makra klawiszowe
W celu przyspieszenia pisania programów można używać w VI makr klawiszowych. Definiuje się je instrukcją :map.
Składnia instrukcji :map wygląda następująco:
:map
Nazwa makra składa się z maksymalnie 10 znaków. Jeżeli użytkownik wpisze (także na płaszczyźnie wprowadzania !) nazwę makra zostanie ono zastąpione ciągiem komend. Przykład:
W celu przyspieszenia pisania programów w języku C tworzymy makra:
:map! ii if();
:map! ff for(;;);
:map! ww while();
Po wciśnięciu sekwencji ii do pliku zostania zapisany ciąg "if();". UWAGA: Jeżeli ustawimy opcje :set timeout, to nazwę makra musimy wpisać w przeciągu 1 sekundy. W przeciwnym wypadku będzie ona potraktowana jak zwykły napis. Opcja odwrotna jest :set notimeout.
Możemy wszystkie własne makra umieścić w kartotece HOME w pliku .exrc . Wtedy będą one automatycznie rozumiane przez VI zaraz po jego uruchomieniu. Dzięki temu można samemu skonfigurować sobie np. klawisze funkcyjne ( o ile istnieją na klawiaturze ) np.:
:map #2 :w
przypisuje klawiszowi F2 funkcje zapisywania pliku.
4