Edytory tekstów

Edytory są to specjalizowane programy, przeznaczone do pisania i modyfikowania tekstów. Ponieważ pierwotnie system Unix służył do przygotowywania programów i pisania dokumentacji, przeto wbudowane edytory tekstów przeznaczone są przede wszystkim dla zawodowych programistów. Zawierają one wiele wbudowanych poleceń, ułatwiających pracę podczas produkcji oprogramowania.

Większość producentów oprogramowania dostarcza narzędzia do przygotowywania dokumentów, od prostych programów przeznaczonych do wykorzystania w sekretariatach firm aż po specjalizowane oprogramowanie, przeznaczone do prowadzenia działalności wydawniczej. Choć programy te są często znacznie wygodniejsze od edytorów wbudowanych, nie wszędzie będą zainstalowane.

Dlatego warto znać wbudowane edytory, chociażby po to, aby móc modyfikować niektóre systemowe zbiory konfiguracyjne, przystosowując działanie systemu do potrzeb użytkownika.

Z systemem Unix dostarczane są dwa rodzaje edytorów. Pierwszy rodzaj to edytor ekranowy, w którym cały ekran przeznaczony jest na wyświetlanie fragmentu pliku. Użytkownik klawiszami strzałek może poruszać się po ekranie wprowadzając niezbędne zmiany w odpowiednich miejscach. Ekran stanowi swego rodzaju okno do pliku i umożliwia przesuwanie się po pliku w dowolnym kierunku.

Drugi rodzaj to edytory wierszowe. Występuje w nich pojęcie wiersza bieżącego, do którego odnoszą się wszystkie podstawowe komendy (por. analogiczne pojęcie katalogu bieżącego). Edytory wierszowe wykorzystywane są przede wszystkim w skryptach, gdzie pracują wsadowo, tzn. pobierając ciąg komend z przygotowanego wcześniej pliku. Przydają się także, gdy obrabiany plik tekstowy zawiera zbyt długie linie.

Większość implementacji Unixa jako edytor wbudowany zawiera edytor ekranowy vi (emacsa trzeba instalować dodatkowo). Omówimy tylko ten edytor, ograniczając się do podstawowego repertuaru komend i poleceń.

Edytor ekranowy vi --- podstawowe komendy

Edytor vi możemy uruchomić aż trzema poleceniami. Jeśli chcemy tylko obejrzeć plik, nie wprowadzając w nim żadnych zmian, warto użyć polecenia view. Po jego użyciu ignorowane są wszystkie komendy modyfikacji. Edytor umożliwia wyłącznie przeglądanie pliku, reagując na wszystkie komendy nawigacyjne.

$ view zwrotka
Hejże ha! Niech Kubuś żyje!
Niechaj tyje, je i pije!
Czy przy środzie, czy przy wtorku,
On w miodowym jest humorku.
I niewiele o co dba,
Gdy na nosie miodek ma!

Więc śpiewajcie wszyscy dzisiaj
Hymn na cześć Puchatka-Misia
Który swe Conieco zje
Za godzinę lub za dwie!
~
~
~
~
"zwrotka" [Read-only]

Na oczyszczonym ekranie wyświetlone zostały kolejne linie pliku podanego argumentem. Ponieważ nie wypełniły one ekranu, linie nie przedstawiające pliku zostały zaznaczone znakiem ~ w pierwszej kolumnie, dla odróżnienia ich od pustych linii zawartych w pliku. Najniższa linia ekranu przeznaczona jest do komunikacji z użytkownikiem --- wypisywane są tam komunikaty edytora. Wykorzystywana jest także do pisania poleceń dla edytora. Pisanie takiego polecenia rozpoczynamy od naciśnięcia klawisza dwukropka :. Kolejne znaki pisanego przez nas polecenia wyświetlane są w najniższej linii.

Podstawowym środkiem komunikacji z edytorem nie są jednak polecenia, lecz komendy. Każdemu klawiszowi przypisana jest odpowiednia komenda wykonywana po jego naciśnięciu. W odróżnieniu od poleceń wykonywane komendy nie są wyświetlane, o ich wykonaniu możemy więc tylko wnioskować z efektów. Komendy zapisywać będziemy tak jak robiliśmy to dotąd dla klawiszy specjalnych i akordów, to znaczy ujmując je w nawiasy kątowe.

Najprostszy sposób poruszania się po pliku to użyć klawiszy strzałek. Na ekranie wyświetlany jest stale migający znaczek zwany kursorem. Sygnalizuje on bieżące położenie w przeglądanym tekście. Klawisze strzałek powodują przemieszczanie się kursora w odpowiednim kierunku.

Pierwsze polecenie które poznamy to opuszczenie edytora.

:q

Ekran powinien zostać oczyszczany, a u dołu pojawi się monit. Drugie polecenie wywołania edytora vi umożliwia wykorzystanie wszystkich jego możliwości.

$ vi nowy.plik
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"nowy.plik" [new file]

Edytor vi może pracować kilku trybach pracy. Trybem początkowym jest tryb komend, zwany tak dlatego, że naciśnięcie każdego klawisza (także litery czy cyfry) odpowiada wykonaniu przypisanej mu komendy. Aby rozpocząć wpisywanie tekstu należy przejść w tryb wprowadzania. Do przechodzenia w ten tryb służa następujące komendy

<a> Wprowadzanie tekstu odbywa się bezpośrednio za kursorem.
<A> Wprowadzanie tekstu odbywa się za ostatnim znakiem bieżącej linii.
<i> Wprowadzanie tekstu odbywa się bezpośrednio przed kursorem.
<I> Wprowadzanie tekstu odbywa się przed pierwszym znakiem bieżącej linii.
<o> Wprowadzanie tekstu odbywa się w nowej linii bezpośrednio za linią z kursorem.
<O> Wprowadzanie tekstu odbywa się w nowej linii bezpośrednio przed linią z kursorem.

W trybie wprowadzania naciśnięcie klawisza z jakimkolwiek znakiem powoduje umieszczenie go w pisanym tekście. Do trybu komend wracamy naciskając klawisz <Esc>.

Edycja pliku polega na modyfikowaniu kopii pliku znajdującej się buforze --- obszarze roboczym edytora. Aby wprowadzane zmiany utrwalić należy je ,,zatwierdzić'' zapisując bufor na plik. Służy do tego polecenie

:w

Zapisanie bufora można połączyć z opuszczeniem edytora jednym poleceniem

:x

Ostatnia wersja wywołania edytora przydaje się jedynie po awarii systemu, na przykład spowodowanej nagłym zanikiem zasilania. Pozwala ona odzyskać dane znajdujące się w buforze edytoraw momencie awarii.

$ vi -r pechowy.plik

Używana jest rzadko, ale warto o niej pamiętać.

Komendy nawigacji

Komendy nawigacji służą do przemieszczania się po obrabianym pliku. Najprostsze z nich to klawisze strzałek. Niektóre inne komendy nawigacji przedstawia tabelka.

<w> Przesunięcie kursora do następnego słowa.
<b> Przesunięcie kursora do poprzedniego słowa.
<^> Przesunięcie kursora na początek linii.
<$> Przesunięcie kursora na koniec linii.

Każda komenda nawigacji (a także każda inna komenda) może być poprzedzona wprowadzeniem liczby. Używamy do tego normalnych klawiszy cyfrowych. Wprowadzona liczba, zwaną licznikiem, oznacza żądanie wielokrotnego wykonania komendy. Tak więc komenda 15<w> powoduje przesunięcie kursora o piętnaście słów do przodu.

Bardzo wygodna jest komenda <f>. Wymaga ona podania argumentu którym jest następny naciśnięty znak. Kursor jest przesuwany do najbliższego wystąpienia w tekście naciśniętego znaku.

Komendy modyfikacji

Poznanie samych komend modyfikacji i sposobów ich użycia mogłoby zająć kilka lekcji. Ograniczymy się więc do najważniejszych. Zaczniemy od komend usuwania znaków z tekstu.

Komenda <x> usuwa znak wskazywany kursorem. Poprzedzając ją licznikiem można usuwać większe fragmenty tekstu.

Wygodniej jednak użyć do tego komendy <d>. Pobiera ona argument zwany modyfikatorem. Modyfikator może być komendą nawigacji. Wykonanie komendy <d> polega na usunięciu wszystkich znaków począwszy od bieżącego położenia kursora aż do miejsca wyznaczonego modyfikatorem. Przykładowo

<d><w>oznacza usunięcie słowa
<d><$> oznacza usunięcie wszystkich znaków do końca linii
<d><^> oznacza usunięcie wszystkich znaków do początku linii

Wyjątkiem jest modyfikator <d>. Komenda <d><d> (dwukrotne naciśnięcie klawisza <d>) powoduje usunięcie bieżącej linii.

Kolej na komendy zastępowania. Najprostsza z nich to komenda <r>. Zastępuje ona znak wskazywany kursorem znakiem, wprowadzonym jako jej argument. Gdy chcemy zastąpić więcej znaków, możemy poprzedzić ją licznikiem. Ograniczeniem tej komendy jest to, że każdy znak zastąpić musimy dokładnie jednym znakiem.

Ograniczenia tego nie posiadają inne komendy modyfikacji. Powodują one automatyczne przejście do trybu wprowadzania, którego opuszczenie następuje po naciśnięciu klawisza <Esc>. Tak działa komenda <s>, pozwalająca zastąpić bieżący znak dowolnym tekstem. Również tę komendę możemy poprzedzić licznikiem, co pozwala zastąpić większy ciąg znaków. Przy większych liczbach łatwo jednak o pomyłkę.

Lepiej użyć komendy <c>. Używa ona modyfikatorów tak samo jak komenda usuwania <d>. Po określeniu nimi zakresu modyfikacji następuje przejście w tryb wprowadzania. Wpisany tekst umieszczany jest zamiast tekstu wyznaczonego modyfikatorem.

Aby połączyć (skleić) linię bieżącą z następną należy wydać komendę <J>.

Działanie ostatniej wydanej komendy modyfikacji można odwrócić używając komendy <u>. Jej wykonanie przywraca stan bufora przed ostatnią modyfikacją. Gdy błędów było jednak więcej, a w pliku mamy zachowaną poprzednią wersję lepiej po prostu opuścić edytor bez zapisywania bufora. Musimy wtedy użyć specjalnego polecenia

:quit!

Nie powoduje ono zachowania zawartości bufora.

Edytor vi nie dokonuje w trakcie pracy okresowego zapisywania zawartości bufora na plik. Należy więc dla bezpieczeństwa wydać co kilkanaście minut polecenie zachowania bufora!