Zgryźliwość kojarzy mi się z radością, która źle skończyła.
Część trzecia
Edycja i skład tekstu
W tej części:
u Edytory tekstu: vi i emacs
u groff
u geqn i gtbl
u TeX i LaTeX
u Drukowanie
u Linux i multimedia
E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\16.DOC 287
Edytory tekstu: vi i emacs
Rozdzia³ 16. ¨ Edytory tekstu: vi i emacs 299
Peter MacKinnon
W tym rozdziale:
u Co to jest edytor tekstu?
u Funkcje edycyjne
u Edytor vi
u Edytor emacs
Co to jest edytor tekstu?Edytor tekstu to chyba najważniejsze z narzędzi dostarczanych wraz z systemem Linux (i w zasadzie z każdym systemem operacyjnym). Używając go, można tworzyć i modyfikować pliki tekstowe, które w systemie obecne są między innymi jako:
u pliki użytkowników, takie jak na przykład .login czy .cshrc,
u pliki systemowe,
u programy powłoki,
u dokumenty,
u poczta elektroniczna.
To tylko niektóre z rozlicznych zastosowań plików tekstowych, z którymi zetkniesz się, pracując z Linuxem. Upraszczając nieco sprawę, edytor tekstu to program, który pozwala wstawiać, usuwać, przenosić tekst i przeszukiwać pliki tekstowe zawierające od kilku znaków do tysięcy wierszy.
Najpopularniejszymi edytorami tekstu używanymi w systemach linuxowych są programy vi oraz emacs. Są to edytory pełnoekranowe, tzn. wykorzystują one wszystkie wiersze i kolumny ekranu terminalu do wyświetlania zawartości pliku czy też informacji pomocniczych. Oba te edytory udostępniają ogromny zestaw poleceń edycyjnych. Podstawowy podzbiór tych poleceń można opanować w bardzo krótkim czasie, ale używanie poleceń umożliwiających wydobycie całej mocy drzemiącej w tych edytorach wymaga nieco praktyki. Mimo tego szybko stwierdzisz, że czas poświęcony na ich opanowanie nie był stracony.
Wybór edytora tekstu to w zasadzie kwestia gustu. Oba wspomniane programy są bardzo wydajne i potrafią obsłużyć plik o praktycznie dowolnych rozmiarach. Edytor emacs jest lepiej dostosowany do skomplikowanych operacji edytorskich i posiada pomoc dostępną w czasie pracy, ale w prostych przypadkach oba programy są równie dobre. Wybór jednego z nich należy do Ciebie.
Funkcje edycyjneChoć w systemie Linux dostępnych jest kilka edytorów tekstu, a każdy z nich posiada inny interfejs, wszystkie potrafią wykonać w zasadzie te same zadania. Każdy edytor tekstu powinien udostępniać co najmniej funkcje omówione poniżej.
Wstawianie i usuwanie tekstuNajbardziej podstawową funkcją edytora tekstu jest umożliwienie dopisywania i usuwania znaków wedle uznania użytkownika. Oznacza to również, że powinieneś mieć kontrolę nad ruchami kursora i jego położeniem w tekście.
Odczytywanie i zapisywanie plikówPonieważ tekst, który edytujesz, zwykle przeznaczony jest do późniejszego wykorzystania, edytor tekstu potrafi zapisać go do pliku zewnętrznego. Kiedy zachodzi potrzeba wprowadzenia zmian w jakimś pliku, możesz wczytać jego zawartość do edytora. Wszystkie edytory potrafią obsłużyć standard ASCII, co oznacza, że plik utworzony za pomocą jednego edytora (na przykład vi) może być odczytany w innym (na przykład emacs).
Wyszukiwanie tekstuSamodzielne przeglądanie tekstu wiersz po wierszu w poszukiwaniu konkretnego słowa jest co prawda świetnym ćwiczeniem koncentracji, ale nie każdy za tym przepada. Dlatego edytory tekstu posiadają zaawansowane możliwości wyszukiwania tekstu, zarówno na podstawie ściśle określonego zestawu znaków, jak i bardziej ogólnych wzorców. Wzorce te mogą na przykład zawierać symbole wieloznaczne, takie jak * i ?, które zastępują dowolny tekst.
Edytory udostępniają również funkcję wyszukaj-i-zamień, która pozwala za pomocą pojedynczego polecenia podstawić dowolny tekst w miejsce każdego wystąpienia ciągu znaków pasującego do wzorca.
Kopiowanie i przenoszenie tekstuPonieważ nigdy nie ma pewności, czy tekst, który został zapisany w pliku, jest wersją ostateczną, edytory umożliwiają kopiowanie, wycinanie i wstawianie bloków tekstu. Bloki te mogą mieć wielkość od kilku znaków do kilku stron. Różnica pomiędzy wycinaniem i kopiowaniem polega na tym, że po wycięciu tekst przeniesiony do schowka jest usuwany ze swojej pierwotnej pozycji, natomiast po skopiowaniu pozostaje nienaruszony.
Bufory edycyjneBufory edycyjne to obszary pamięci, w których przechowywany jest edytowany tekst. Kiedy tworzysz nowy plik tekstowy, jego zawartość przechowywana jest w buforze edycyjnym przynajmniej do czasu zapisania go do pliku zewnętrznego. Bufory są również używane, gdy zachodzi potrzeba tymczasowego przeniesienia bloku tekstu do pamięci (na przykład przy kopiowaniu czy przenoszeniu). Wiele edytorów potrafi równocześnie obsłużyć kilka buforów edycyjnych.
Edytory opisane poniżej udostępniają wiele poleceń, które nie zostały tu szczegółowo omówione. Z tego powodu gdy musisz przeprowadzić jakieś żmudne operacje edytorskie, powinieneś najpierw zajrzeć na strony man – może bowiem okazać się, że istnieją sposoby pozwalające łatwiej i szybciej wykonać zadanie. W miarę zdobywania doświadczenia poznasz wiele skrótów klawiaturowych i poleceń, które uproszczą codzienną pracę.
Edytor viEdytor vi jest zainstalowany praktycznie w każdym istniejącym systemie UNIX-owym. Z tego powodu jest on w systemach UNIX-owych (a więc i Linuxie) uważany za edytor domyślny. Edytor vi jest nieco trudniejszy do opanowania niż emacs, ponieważ posiada dwa tryby pracy, a polecenia edycyjne mają bardzo zwięzłą formę. Warto go jednak poznać, szczególnie jeśli edytor emacs nie jest zainstalowany w Twoim systemie.
Uruchamianie edytora viEdytor vi można uruchomić, wpisując polecenie
vi
Ekran tekstowy zostanie wyczyszczony, a pierwsza kolumna wypełni się tyldami (~). Edytujesz teraz pusty plik, nie posiadający jeszcze nawet nazwy. Wpisywany tekst jest przechowywany w buforze edycyjnym, aż do czasu zapisania go na dysk. Za pomocą tyldy na początku wiersza edytor vi informuje użytkownika, że wiersz nie zawiera żadnego tekstu.
Nazwa pliku lub lista nazw plików, które chcesz edytować, może zostać przekazana do edytora vi jako argumenty wywołania:
vi plik1 plik2 plik3 ...
Zwykle jednorazowo edytuje się tylko jeden plik. Jeśli podasz całą listę plików, które zamierzasz edytować, vi umożliwi ich edycję w takiej kolejności, w jakiej zostały one podane.
Można również uruchomić edytor vi w następujący sposób:
vi +n nazwapliku
n oznacza tu numer wiersza, w którym (po otwarciu pliku) zostanie umieszczony kursor. Możliwość taka jest szczególnie przydatna dla programistów usuwających błędy w dużych plikach źródłowych i potrzebujących szybko przejść do wiersza zawierającego błąd.
Wpiszmy polecenie
vi piosenka
i zobaczmy, co się stanie.
W lewym dolnym rogu ekranu wyświetlony zostanie tekst:
"piosenka" 0 lines 0 characters
Informacje podawane w tym wierszu (jest to tzw. wiersz statusu) mówią, co właśnie zrobił lub robi edytor vi. W powyższym przykładzie otwarty został pusty bufor edycyjny, którego zawartość zostanie zapisana (o ile wydane zostanie odpowiednie polecenie) do pliku o nazwie piosenka.
W tej chwili aktywny jest tryb wydawania poleceń. Kwestia aktywnego trybu ma zasadnicze znaczenie podczas pracy z edytorem vi. W trybie wydawania poleceń wszystko, co wpisujesz, interpretowane jest jako polecenie. W trybie edycji wciśnięcie klawisza powoduje wstawienie do edytowanego tekstu odpowiedniego znaku (i oczywiście wyświetlenie go na ekranie).
W wierszu statusu wyświetlane są cztery spośród wielu dostępnych poleceń:
/ wyszukiwanie w przód,
? wyszukiwanie wstecz,
: polecenie interpretowane przez ex (ex to osobny edytor oparty na wierszu poleceń, używany wewnątrz vi),
! wywołanie polecenia powłoki.
Polecenia te muszą zostać zatwierdzone klawiszem Enter. Pozostałe polecenia, na przykład wstawiające tekst, nie wymagają zatwierdzania.
Aby łatwiej było zorientować się, czy pracujesz w trybie wydawania poleceń, czy edycji, użyj polecenia set showmode, opisanego dokładniej w podrozdziale „Preferencje” w dalszej części tego rozdziału.
Wstawianie tekstuWstawmy teraz jakiś tekst, pamiętając o tym, że pracujemy w trybie wydawania poleceń. Dwa podstawowe polecenia edytora vi służące do tego celu to (ang. insert) – wstawiające tekst na lewo od kursora, oraz (ang. append) – wstawiające tekst na prawo od kursora. Wersje tych poleceń wywoływane za pomocą wielkich liter działają podobnie, z tym że I wstawia tekst na początek, natomiast A na koniec wiersza, bez względu na pozycję kursora.
Po wydaniu jednego z tych poleceń można rozpocząć wprowadzanie tekstu. Zostanie on wyświetlony na ekranie.
Wciśnij klawisz a następnie wpisz:
Wlazl kotek<Enter>
na plotek<Enter>
i mruga<Enter>
Ladna to<Enter>
piosenka<Enter>
niedluga.<Enter>
Tryb wstawiania tekstu opuścić można wciskając klawisz Escape. Zauważ, że polecenie nie jest wyświetlane na ekranie, nie trzeba również zatwierdzać go klawiszem Enter.
Zamykanie edytora viPo wprowadzeniu tekstu można zakończyć pracę edytora i obejrzeć utworzony plik. Polecenia zapisujące plik oraz kończące pracę edytora różnią się nieco od polecenia czy innych poleceń edycyjnych, ponieważ należy poprzedzić je dwukropkiem (:).
Zapisanie edytowanego pliku na dysk i zakończenie pracy edytora sprowadza się do wydania jednego polecenia. Wciśnij klawisz : – w lewym dolnym rogu ekranu pojawi się dwukropek. vi rozpoznał, że zamierzasz wydać polecenie interpretowane przez edytor ex, wyświetla więc wpisywane litery na ekranie. Wpisz wq i wciśnij Enter. vi poinformuje że zapisał plik, poda liczbę zapisanych wierszy i zakończy działanie. Innym sposobem na zapisanie pliku i wyjście z programu jest użycie polecenia ZZ. Jedyna różnica polega na tym, że polecenie ZZ powoduje zapisanie pliku tylko wtedy, jeśli został on zmodyfikowany od czasu ostatniego zapisu.
Jeśli do otwartego pliku nie zostały wprowadzone żadne zmiany, można opuścić vi, wydając samo polecenie :q. Polecenie to nie zadziała, jeśli plik został zmodyfikowany. Jeśli jesteś pewny, że chcesz zakończyć pracę edytora bez zapisywania wprowadzonych zmian, użyj polecenia :q!, które wymusza zakończenie programu vi.
Upewnijmy się, czy edytowany plik został prawidłowo zapisany, oglądając jego zawartość za pomocą polecenia cat:
%cat piosenka
Wlazl kotek
na plotek
i mruga
Ladna to
piosenka
niedluga.
%
Plik zawiera tekst, który wpisałeś – żadnych niespodzianek.
Przesuwanie kursoraDo poruszania kursorem podczas pracy z edytorem vi służą cztery polecenia:
h przesuwa kursor jedną pozycję w lewo,
j przesuwa kursor jeden wiersz w dół,
k przesuwa kursor jeden wiersz do góry,
l przesuwa kursor jedną pozycję w prawo.
Polecenia te działają tylko w trybie wydawania poleceń. Większość implementacji vi obsługuje również klawisze kursora.
Możliwe jest też poruszanie się po edytowanym tekście większymi skokami. Poniżej podano kilka poleceń pozwalających przesunąć kursor o więcej niż jeden wiersz:
Control+u przesuwa tekst o pół ekranu do góry,
Control+d przesuwa tekst o pół ekranu w dół,
Control+f przesuwa tekst o cały ekran w dół,
Control+b przesuwa tekst o cały ekran do góry.
Dokładna ilość wierszy, o jaką przesuwany jest kursor, zależy od ustawień terminalu.
Innym sposobem poruszania się w tekście jest przejście do wiersza o znanym numerze. Jeśli chcesz edytować piąty wiersz, wpisz w trybie wydawania poleceń :5 albo 5G. Samo polecenie G przesuwa kursor na koniec pliku. Kursor nie poruszy się, jeśli zadany numer wiersza będzie poza dostępnym zakresem, na przykład po wydaniu polecenia :10 podczas edycji pliku, który składa się z ośmiu wierszy.
...