Edytor Vi

Vi to edytor modalny, popularny w systemach Unix. Napisał go Bill Joy urodzony w 1955 roku amerykański programista jeden z twórców Sun Microsystems (Sun OS Solaris Java ). Nazwa wzięła się od słowa visual.
Dziś rzadko używa się czystego vi w codziennej praktyce, został on wyparty przez swoje klony, takie jak Vim, nvi lub elvis, które oferują znacznie bogatsze możliwości. Nadal jednak pozostaje jednym z cenniejszych narzędzi administratora ze względu na powszechność występowania i jednolitość implementacji.
Edytor vi jest edytorem ekranowym, co oznacza, że użytkownik widzi na ekranie fragment pliku i może się po nim swobodnie poruszać za pomocą kursorów, dokonywać zmian w tekście i dopisywać nowy tekst. Edytor vi można uruchomić z argumentem będącym nazwą pliku. Jeżeli taki plik nie istnieje, to zostanie utworzony nowy. Edytor vi w przeciwieństwie do prawie wszystkich innych edytorów jest modalny – w każdej chwili znajduje się w jednym z dwu trybów pracy, trybie wstawiania lub trybie poleceń.

Bezpośrednio po uruchomieniu vi znajduje się w trybie poleceń. Przejście do trybu wstawiania odbywać się może m. in. przez wydanie polecenia i (insert) lub a (append). Polecenia vi nie wymagają potwierdzenia klawiszem Enter, wykonywane są natychmiast. Przejście z trybu wstawiania do trybu poleceń odbywa się przez naciśnięcie klawisza Esc. W istocie vi jest edytorem ex działającym w trybie wizualnym, dlatego wszystkie polecenia edytora ex dostępne są także w vi. Polecenia ex wydawane w trybie poleceń poprzedzane są dwukropkiem : i wymagają potwierdzenia klawiszem Enter.

Polecenia:

Polecenia edytora vi składają się z kilku grup.

Polecenia edycyjne:

a - wpisywanie tekstu za kursorem
A - wpisywanie tekstu na końcu aktualnej linii
i - wstawianie tekstu przed kursorem
I - wstawianie tekstu na początku aktualnej linii
o - utworzenie nowej linii poniżej aktualnej
O - utworzenie nowej linii powyżej aktualnej
R - zastępowanie tekstu
s - zastąpienie znaku wskazanego przez kursor
S - zastąpienie aktualnej linii
c - zmiana zaznaczonego tekstu
C - zmiana do końca linii

Polecenia zmieniające tekst:

x - skasowanie znaku wskazywanego przez kursor
X - skasowanie znaku przed kursorem
d - skasowanie wskazanego tekstu
dd - skasowanie aktualnej linii
D - skasowanie tekstu od aktualnej pozycji aż do końca linii
y - skopiowanie wskazanego tekstu do bufora pomocniczego
Y - skopiowanie linii tekstu do bufora pomocniczego
p - wstawienie tekstu za kursorem
P - wstawienie tekstu przed kursorem
J - połączenie linii
> - przesunięcie tekstu w prawo
< - przesunięcie tekstu w lewo
! - przetworzenie tekstu przez polecenie systemowe i zastąpienie tego tekstu przez wyjście tego polecenia
r - zastąpienie znaku wskazywanego przez kursor
m - zaznaczenie linii tekstu
u - anulowanie ostatniej zmiany (ponowne wciśnięcie powoduje ponowne zastosowanie ostatniej zmiany)

Polecenia sterujące kursorem:

0 - przeniesienie kursora na początek linii
^ - przeniesienie kursora na początek linii
$ - przeniesienie kursora na koniec linii
h - przeniesienie kursora w lewo
j - przeniesienie kursora w dół
k - przeniesienie kursora w góre
l - przeniesienie kursora w prawo
^H - skasowanie znaku przed kursorem (klawisz backspace)
f - przeniesienie do przodu do podanego znaku
F - przeniesienie do tyłu do podanego znaku
t - przeniesienie do przodu przed wskazany znak
T - przeniesienie do tyłu przed wskazany znak
; - powtórzenie ostatniego polecenia
f, F, t, T, - odwrócenie działania ostatniego polecenia
f, F, t, T | - ustawienie kursora w podanej kolumnie
% - odnalezienie pary dla wskazanego nawiasu
B - ustawienie kursora na początku poprzedniego słowa (słowo = ciąg znaków bez znaków białych)
W - ustawienie kursora na początku następnego słowa (słowo = ciąg znaków bez znaków białych)
H - przeniesienie kursora na górę ekranu
L - przeniesienie kursora na dół ekranu spacja - przeniesienie kursora w prawo

Polecenia sterujące ekranem:

^F - przesunięcie okna ekranowego o jeden ekran do przodu
^B - przesunięcie okna ekranowego o jeden ekran do tyłu
G - przesunięcie okna ekranowego do podanej linii
/ - wyszukanie podanego wzorca w przód (po dojściu na koniec pliku kontynuowanie szukania od początku)
? - wyszukanie podanego wzorca w tył (po dojściu na początek pliku kontynuowanie szukania od końca)
^L - wyczyszczenie i przerysowanie ekranu
^R - przerysowanie ekranu

Wybrane polecenia Vi:

:q - wyjście z edytora pod warunkiem braku zmian od ostatniego zapisu
:q! - wyjście z edytora bez zapisania pliku
:w - zapisanie pliku :w nazwa - zapisanie pliku pod nową nazwą
:w! - zapisanie pliku (z wymuszonym zapisaniem plików tylko do odczytu)
:wq - wyjście z edytora z zapisaniem pliku
:x - wyjście z edytora z zapisaniem pliku (bez zapisania przy braku zmian)
:x! - wyjście z edytora z zapisaniem pliku (bez zapisania przy braku zmian, z wymuszonym zapisaniem plików tylko do odczytu)
ZZ - wyjście z edytora z zapisaniem pliku
:e nazwa - otworzenie pliku do edycji
:help - wyświetlenie pomocy

Zalety Vi:

Edytor vi pomimo pozornego anachronizmu nadal jest wykorzystywany chętnie przez administratorów i programistów.

Do nich zaliczymy:

  • dostępność praktycznie w każdym systemie uniksowym bez konieczności doinstalowywania pakietów czy bibliotek,
  • możliwość pracy w bardzo ubogim środowisku terminalowym - bez grafiki i przy ograniczonym zestawie znaków,
  • możliwość pełnoekranowej edycji plików nawet przy bardzo wolnym łączu - przez sieć dla każdej edycji przesyłane jest tylko tyle znaków, ile zostało wpisane, a odświeżany jest tylko niewielki fragment tekstu, którego dotyczy edycja.