Edytor vi lub jego ulepszona wersja vim ( vi Improved) są standardowo dostępne w systemach unixowych. Edytor uruchamiamy najczęściej poleceniem
vi
lub
vi nazwa_pliku
Uruchomiony edytor może znajdować się w danym momencie w jednym z trzech stanów:
●
stanie edycji tekstu (1)
●
stanie poleceń klawiszowych (2)
●
stanie edycji własnego wiersza poleceń (3).
Stan edycji własnego wiersza poleceń dotyczy własnego, wewnętrznego wiersza poleceń edytora (NIE powłoki itp).
●
W stanie edycji tekstu (1) wprowadzamy tekst z klawiatury.
○
[Enter] – przejście do nowego wiersza tekstu
○
[Esc] – przejście do stanu poleceń klawiszowych (2). Przejście jest jednokierunkowe (kolejne naciśnięcie
[Esc] nie spowoduje powtórnego przejścia do stanu (1)
●
Bezpośrednio po uruchomieniu edytora znajduje się on w stanie poleceń klawiszowych (2). Naciskając różne klawisze (bez wciskania [Enter]) wydajemy polecenia dotyczące ruchu kursora po ekranie, trybu edycji tekstu itp. W zależności od polecenia edytor może przejść do stanu (1) lub do stanu (3). Przejście do stanu edycji wiersza poleceń (3) następuje w szczególności po naciśnięciu dwukropka [:].
●
Do stanu edycji wiersza poleceń (3) można przejść na różne sposoby. Wiersz poleceń znajduje się na dole ekranu. Każde polecenie zaczyna się od dwukropka i składa z co najmniej jeszcze jednego znaku. Dwukropek można równocześnie traktować jako przełącznik ze stanu (2) do (3). Wprowadzanie polecenia zakańczamy przez wciśnięcie [Enter]; edytor wykonuje wówczas polecenie i przechodzi do stanu (2) lub kończy pracę.
Jednokrotne naciśnięcie [Esc] powoduje przejście do stanu (1).
○
kończenie pracy:
■
:q! - wyjście bez zapisu
■
:wq – wyjście z zapisem
Uproszczony graf stanów edytora:
Stan 1
[Esc]
(edycja)
[a] [o] [i]
WEJŚCIE
Stan 2
[Esc]
(polecenia klawiszowe))
vi [Enter]
[ : ] [/] [?]
Stan 3
[Esc]
(edycja wiersza poleceń)
WYJŚCIE
[Enter]
:q! [Enter
:wq [Enter]]
Rozróżnianie stanu w którym aktualnie znajduje się edytor:
●
jeśli w wierszu poleceń jest dwukropek, to prawdopodobnie jesteśmy w stanie 3
●
stan 1 i 2 możemy rozróżnić po naciśnięciu [Esc] – jeśli byliśmy w stanie 1, to przejdziemy do 2, a jeśli byliśmy w 2, to pozostaniemy i zostanie wygenerowany sygnał dźwiękowy Niektóre polecenia klawiszowe w stanie 2:
Manewrowanie kursorem:
W edytorze vim można wykorzystywać klawisze kursora, [PgUp], [PgDn], [Home], [End] i klawisze strzałek. Poza tym mamy następujące skróty klawiszowe pochodzące z „czystego” vi:
[spacja]
Kursor o jeden znak w prawo
[Backspace]
Kursor o jeden znak w lewo
[l]
Kursor o jeden znak w prawo
[h]
Kursor o jeden znak w lewo
[j]
Kursor o jedną linię w dół
Kursor o jedną linię w górę
[-]
Kursor na początek wiersza i jedną linię w górę
[+]
Kursor na początek wiersza i jedną linię w dół
[Enter]
Kursor na początek wiersza i jedną linię w dół
[w]
Kursor do początku kolejnego słowa
[b]
Kursor w lewo do najbliższego początku słowa
[0] (zero)
Kursor na początek linii
[$]
Kursor na koniec linii
[Ctrl] – [f]
Kursor ekran w dół
[Ctrl] – [b]
Kursor ekran w górę
[Ctrl] – [d]
Kursor pół ekranu w dół
[Ctrl] – [u]
Kursor pół ekranu w górę
Liczba [G]
Kursor na początek wiersza o numerze liczba, w szczególności: 1[G] – kursor na początek pliku
[G] – kursor na koniec pliku
[H]
Kursor na początek bieżącego ekranu
[F1]
Wywołanie opisu pomocy; powrót do edytora przez :q
Edycja tekstu:
[i]
Wstawianie przed kursorem (insert)
[I]
Wstawianie od początku wiersza
[a]
Wstawianie za kursorem (append)
[A]
Wstawianie na końcu wiersza
[x]
Usunięcie pojedynczego znaku na pozycji kursora
[X]
Usunięcie pojedynczego znaku przed kursorem
[d] [d]
Usunięcie bieżącego wiersza
[d] [0]
Usunięcie całej zawartości od początku wiersza do kursora
[d] [$]
Usunięcie całej zawartości od pozycji kursora do końca wiersza
[d] [w]
Usunięcie słowa wskazanego przez kursor
[D]
To samo co [d] [$]
[r]
Nadpisanie pojedynczego znaku na pozycji kursora (replace)
[R]
Nadpisywanie tekstu od pozycji kursora
[y] [y]
Skopiowanie bieżącego wiersza do bufora
[y] [0]
Skopiowanie do bufora tekstu od początku wiersza do pozycji kursora
[y] [$]
Skopiowanie do bufora tekstu od pozycji kursora do końca wiersza
[y] [w]
Skopiowanie do bufora słowa wskazywanego przez kursor
[c] [c]
Zmiana całego wiersza; równoważne sekwencji [d] [d] [I]
[c] [0]
Zmiana tekstu od początku wiersza do kursora; równoważne [d] [0] [i]
[c] [$]
Zmiana tekstu od pozycji kursora do końca wiersza; równoważne [d] [$] [i]
[c] [w]
Zastąpienie słowa wskazywanego przez kursor; równoważne [d] [w] [i]
[J]
Połączenie wiersza bieżącego i następnego (usunięcie znaku końca linii z pierwszego wiersza)
[o]
Wstawienie nowego wiersza poniżej bieżącego i rozpoczęcie wstawiania tekstu
[O]
Wstawienie nowego wiersza powyżej bieżącego i rozpoczęcie wstawiania tekstu
[p]
Wstawienie zawartości bufora za kursorem lub do następnego wiersza (paste)
[P]
Wstawienie zawartości bufora przed kursorem lub do poprzedniego wiersza
[u]
Cofnięcie ostatniej zmiany (undo)
['']
Odwołanie do konkretnego bufora
W edytorze vim działają ponadto niektóre „standardowe” klawisze, np. [Del].
[n]
Powtórzenie ostatniego wyszukiwania w tę samą stronę (określoną pierwotnym poleceniem wyszukiwania)
[N]
Powtórzenie ostatniego wyszukiwania w przeciwną stronę (względem pierwotnego polecenia wyszukiwania)
Liczba podana przed poleceniem klawiszowym określa, ile razy ma być ono powtórzone (np. sekwencja [1] [2] [l]
spowoduje przesunięcie kursora o 12 znaków w prawo, a [3] [y] [y] – skopiowanie trzech kolejnych wierszy do bufora.
Polecenie [d] [...] umieszcza tekst w buforze; zawartość bufora możemy później wstawić przez [p] w innym miejscu pliku (np. [3] [d] [d] [G] [p] spowoduje skasowanie trzech wierszy pliku, a następnie wstawienie ich na końcu pliku (czyli przeniesienie)).
Wybrane polecenia stanu 3 (wpisywane do wiersza poleceń):
:r plik
Wstawienie zawartości pliku plik
/ wzorzec
Wyszukiwanie łańcucha wzorzec w dół
? wzorzec
Wyszukiwanie łańcucha wzorzec w górę
:q
Zakończenie pracy z edytorem, pod warunkiem uprzedniego zapisania zmian
:w plik
Zapisanie edytowanego pliku w nowym pliku pod nazwą plik
:q!
Zakończenie pracy bez zapisywania modyfikacji
:w
Zapisanie edytowanego pliku pod aktualną nazwą
:wq
Zapisanie edytowanego pliku pod aktualną nazwą i zakończenie pracy
:x
To samo co :wq
:help
Wywołanie pomocy, wyjście przez :q
:reg
Wypisanie zawartości buforów (tylko vim)
:set number
Wyświetlanie numerów wierszy
:s/ wzorzec/ zastępnik
Znalezienie w bieżącym wierszu pierwszego łańcucha odpowiadającego wzorcowi i zastąpienie go zastępnikiem
:s/ wzorzec/ zastępnik/g
Znalezienie w bieżącym wierszu wszystkich łańcuchów odpowiadających wzorcowi i zastąpienie ich zastępnikiem
:1,$s/ wzorzec/ zastępnik/g
Znalezienie w całym pliku wszystkich łańcuchów odpowiadających wzorcowi i zastąpienie ich zastępnikiem
:nr_p,nr_k/ wzorzec/ zastępnik/g Znalezienie w wierszach między nr_p i nr_k wszystkich łańcuchów odpowiadających wzorcowi i zastąpienie ich zastępnikiem Bufory
Edytor vi ma tak naprawdę wiele buforów. Można je podzielić na dwie grupy: bufory numerowane, oznaczone liczbami od 0 do 9, i bufory nazywane, oznaczone literami a..z, A..Z. Istnieją również bufory nazywane oznaczane innymi znakami ASCII, np. %, #, : itp. Użytkownik może wskazać konkretny bufor (poleceniem [”] [nazwa_bufora]) ,co powoduje, że następne wydane polecenie (np. [d] lub [y]) umieści we wskazanym buforze skopiowany lub usunięty fragment tekstu, lub wstawi w żądane miejsce zawartość konkretnego bufora (np. [”] [a] [p] wstawi zawartość bufora o oznaczonego literą a).
Przeznaczenie poszczególnych rodzajów buforów:
●
Bufory oznaczane znakami ASCII innymi niż litery i cyfry są wykorzystywane przez program do własnych celów, więc są dostępne tylko do odczytu (polecenie [p]);
●
bufor 0 (zero) jest domyślnym buforem polecenia [y] (kopiuj do bufora)
●
bufory 1 – 9 są przeznaczone do pracy z poleceniami usuwającymi tekst (np. [d]) – w momencie kasowania usunięty tekst jest wstawiany do bufora 1, teksty skasowane wcześniej przesuwają się wówczas z bufora 1 do bufora 2, z bufora 2 do bufora 3 itd; natomiast tekst pamiętany dotąd w buforze 9 jest zapominany (zastępuje go dotychczasowa zawartość bufora 8).
●
bufory nazywane od a do z i od A do Z są przeznaczone do dowolnego wykorzystania przez użytkownika.
Odczyt bufora nie powoduje jego opróżnienia.
Zawartość wszystkich (niepustych) buforów wyświetlamy poleceniem :reg.