Niniejszy samouczek przedstawia sposób obsługi znakomitego edytora jakim jest vi. Użytkownik może nauczyć się z niego w jaki sposób poruszać się po tekście, wprowadzać zmiany, korzystać z trybu edycji, kopiować oraz wklejać, a także korzystać z udoskonaleń wprowadzonych w vimie, jak na przykład tryb wizualny czy korzystanie z wielu okien. Wykorzystana metoda ściągawki znacznie ułatwi naukę, a nie wymaga dużej ilości czasu.
Użytkownicy, którzy do tej pory nie czuli się pewnie korzystając z vi, mogą dzięki niniejszemu przewodnikowi udoskonalić swoje umiejętności używania najpopularniejszego i najpotężniejszego programu do wizualnej edycji tekstu dla Linuksa i UNIX-a.
Duża ilość poleceń stanowi główny czynnik utrudniający naukę vi. Aby używać go efektywnie, wystarczy jednakże zapamiętać tylko część. Niemniej jednak, może to zająć nieco czasu, a jednym z celów tego tekstu jest jak największe jego skrócenie. Zatem już na wstępie mamy pierwszy problem - w jaki sposób w krótkim czasie zapamiętać sporo poleceń?
Postanowiliśmy to rozwiązać za pomocą ściągawki, którą zamierzamy stopniowo kompletować. Umieścimy na niej wszystkie istotne polecenia vi. Po ukończeniu samouczka, wciąż będzie można się nią podpierać. W miarę upływu czasu i przyswajania kolejnych poleceń zacznie się stawać coraz mniej przydatna. Z pewnością umożliwi ona naukę szybszą niż kiedykolwiek do tej pory!
W przewodniku zamierzam wykorzystać kilka technik, które pomogą w nauce. Po pierwsze, tak jak oczekują tego użytkownicy, opiszę jak działa poszczególne polecenie. Następnie zachęcę do wypróbowania go w praktyce oraz dopisania do ściągawki (na przyszłość). Dokładne wykonywanie przedstawionych kroków jest bardzo istotne jeśli chcemy, aby nauka nie trwała długo. Wypróbowywanie i zapisywanie poleceń pomaga szybciej je zapamiętać.
Istnieje wiele wersji vi. My zamierzamy zaprezentować odmianę o nazwie vim. Cieszy się ona sporą popularnością i zawiera wiele udoskonaleń w stosunku do zwykłego vi (za każdym razem kiedy zademonstrujemy polecenie dostępne jedynie w vimie, wyraźnie to zaznaczymy). Program można pobrać ze strony www.vim.org. W dodatku do udoskonalonej wersji konsolowej, vim posiada również wersję graficzną, korzystającą z biblioteki GTK+, o nazwie gvim. Oto prezentujący ją zrzut ekranu:
Ilustracja 1.1: Zrzut ekranu z VIM |
![]() |
Początkującym użytkownikom vi korzystanie z graficznego interfejsu użytkownika może nieco ułatwić jego naukę.
Zanim nauczymy się edytować pliki, najpierw powinniśmy się nauczyć po nich poruszać. vi posiada wiele służących do tego poleceń, a my zamierzamy przyjrzeć się wielu z nim. Zaczniemy od wybrania niezbyt ważnego pliku tekstowego i załadowania go w vi wpisując w konsoli:
Listing 2.1: Ładowanie pliku w vi |
$ vi plik.txt
|
Użytkownicy, którzy zainstalowali vima, powinni wpisać vim plik.txt. Z kolei ci, którzy preferują gvima, mogą go uruchomić poleceniem gvim plik.txt (oczywiście należy zmienić plik.txt na nazwę pliku tekstowego do edycji).
Po uruchomieniu vi naszym oczom powinna się ukazać część załadowanego pliku tekstowego. Gratulacje - oto vi! W przeciwieństwie do wielu edytorów, vi zaraz po uruchomieniu aktywuje tryb poleceń (ang. insert mode). Oznacza to, że na przykład po wciśnięciu klawisza l, zamiast dopisania go do tekstu, kursor poruszy się o jeden znak w prawo. W trybie poleceń klawisze używane są w celu wysyłania poleceń do vi, nie do wpisywania tekstu. Polecenia służące do poruszania się należą do najistotniejszych; rzućmy na nie okiem.
W trybie poleceń do poruszania kursorem w lewo, dół, górę oraz w prawo można skorzystać odpowiednio z klawiszy h, j, k oraz l. W nowoczesnych wersjach vi służą do tego także klawisze kursora. h, j, k i l są jednak wygodniejsze, ponieważ po przyzwyczajeniu się do nich, aby poruszać się po dokumencie nie trzeba przesuwać całej ręki. Spróbuj skorzystać z obu metod i przejść na początek linii klawiszem h. vi nie pozwala automatycznie przejść do poprzedniej linii za pomocą h kiedy kursor dotrze do pierwszego znaku. Analogicznie, nie pozwala przejść do następnej za pomocą l kiedy kursor dojdzie do końca bieżącej.
vi udostępnia specjalne skróty do szybkiego przemieszczania się. Do przesunięcia kursora na początek linii służy klawisz 0 (zero), natomiast do przesunięcia go na jej koniec, klawisz $. Wypróbuj je. Liczne poręczne polecenia do przesuwania kursora powodują, że vi świetnie nadaje się na tzw. "pager" (taki jak programy less oraz more). Wykorzystanie go w tym celu pomoże ci szybciej zapamiętać polecenia.
Do poruszania się w przód i w tył o długość strony służą odpowiednio kombinacje <CTR>F oraz <CTR>B. Nowoczesne odmiany vi (jak na przykład vim) pozwalają również korzystać w tym celu z klawiszy PGUP oraz PGDOWN.
Poruszanie się pomiędzy słowami, część 1
vi udostępnia także wygodne skróty do przeskakiwania kursorem pomiędzy słowami. Aby przenieść się do pierwszego znaku kolejnego słowa, wciśnij w. Aby się przenieść do ostatniego znaku kolejnego słowa, wciśnij e. Aby się przenieść do pierwszego znaku poprzedniego słowa, wciśnij b. Spróbuj.
Poruszanie się pomiędzy słowami, część 2
Ponieważ vi dzieli słowa w miejscach spacji oraz znaków interpunkcji, słowa takie jak foo-bar-oni traktuje jako pięć osobnych. foo-bar-oni jest zatem dzielone na foo, -, bar, - oraz oni.
Nie zawsze jest to działanie pożądane. Na szczęście vi posiada także pojęcie "dużego słowa", dzielonego jedynie w miejscach spacji oraz znaków nowej linii. Wtedy foo-bar-oni jest traktowane jako jedno duże słowo.
Poruszanie się pomiędzy słowami, część 3
Aby przeskoczyć do następnego lub poprzedniego dużego słowa, wystarczy skorzystać z pisanych wielką literą odpowiedników poleceń dla normalnych słów. A zatem, żeby przenieść się do pierwszego znaku kolejnego dużego słowa, wciśnij W. Z kolei żeby przenieść się do ostatniego znaku kolejnego dużego słowa, wciśnij E. Żeby przenieść się do pierwszego znaku poprzedniego dużego słowa, wciśnij B. Spróbuj i porównaj te polecenia z odpowiednimi dla normalnych słów, żeby lepiej zrozumieć różnicę.
Przemieszczanie się na większe odległości
Zanim umieścimy wszystko na ściągawce, musimy omówić jeszcze kilka poleceń. ( oraz ) służą do przemieszczania się odpowiednio na początek poprzedniego i kolejnego zdania. Za pomocą { oraz } możesz natomiast przenieść się na początek bieżącego oraz następnego paragrafu. Wypróbuj je.
Istnieje jeszcze jedna grupa poleceń, które musisz poznać. Wpisanie :q zamknie vi. Jeśli nie działa, prawdopodobnie zmodyfikowałeś w jakiś sposób otwarty plik. Aby wyjść z vi i pominąć wszystkie modyfikacje, wpisz :q!.
W vi, dowolne polecenie zaczynające się dwukropkiem, to tak zwane polecenie trybu ex. ex to wbudowany w vi niewizualny edytor. Można z niego korzystać podobnie jak z seda to edycji pojedynczych linii. Ponadto, jak właśnie zobaczyliśmy, można z niego korzystać do zamykania vi. Wciśnięcie w trybie poleceń klawisza Q przenosi do trybu ex. Jeśli to zrobisz, powinieneś zobaczyć : jako znak zachęty. Naciśnięcie entera spowoduje przewinięcie ekranu o jedną linię. Żeby powrócić do vi, wystarczy wpisać vi i wcisnąć enter.
Przedstawiliśmy już wiele poleceń. Nadszedł czas zapisać je na naszej ściągawce. Wszystko powinno się zmieścić na jednej kartce papieru rozmiaru US letter lub A4. Oto zdjęcie mojej własnej ściągawki po zapisaniu tego co omówiliśmy do tej pory. Postaraj się zrobić swoją podobnie, żeby na nic nie zabrakło miejsca.
Ilustracja 5.1: Ściągawka |
![]() |
Kontynuujmy. W trybie poleceń, za pomocą G można przenieść kursor do dowolnej linii. Na przykład, aby przeskoczyć do pierwszej, należy wpisać 1G (G pisane wielką literą).
Aby przeskoczyć do kolejnego wystąpienia określonego tekstu należy wpisać /<regexp> i nacisnąć enter. Zastąp <regexp> poszukiwanym wyrażeniem regularnym. Jeśli nie znasz się na wyrażeniach regularnych to nic straconego - wpisanie /foo tak jak to oczekiwane wyszuka następne wystąpienie słowa foo. Jedyną rzeczą, o której należy pamiętać to znaki specjalne: ^, ., $ oraz \. Trzeba je poprzedzić znakiem \. Na przykład, aby odnaleźć "foo.gif", wystarczy wpisać /foo\.gif.
Aby powtórzyć wyszukiwanie w przód, wciśnij n lub //. Aby je powtórzyć wstecz, wciśnij N. Jak zwykle wypróbuj te polecenia samodzielnie.
Omówiliśmy już jedno polecenie trybu ex: :q, służące do zamykania. Aby przed wyjściem zapisać zmiany, wpisz :w. Jeśli chcesz je zapisać do innego pliku, na przykład plik.txt, wpisz :w plik.txt. Aby jednym poleceniem zapisać zmiany i wyjść, wpisz :x lub :wq.
W vimie (oraz innych zaawansowanych klonach vi, jak elvis), można edytować jednocześnie wiele plików. Żeby otworzyć plik w nowym, podzielonym oknie, wpisz :sp plik.txt. Aby przełączyć się pomiędzy oknami, wciśnij <CTR>w<CTR>w (dwukrotnie control-w). Każde z poleceń: :q, :q!, :w i :x odnosi się jedynie do aktywnego okna.
Czas nauczyć się prostych poleceń służących do edycji. Mówimy o nich proste, ponieważ pozostawiają vi w trybie poleceń. Bardziej złożone automatycznie aktywują tryb edycji -- tryb umożliwiający bezpośrednie wpisywanie tekstu z klawiatury. Im również poświęcimy nieco czasu.
Spróbuj wcisnąć kilka razy x. Polecenie to usuwa znak aktualnie wskazywany kursorem. Następnie przesuń kursor do środka paragrafu i wciśnij J (wielką literą). Połączysz w ten sposób następną linię z końcem bieżącej. Zaznaczając jakiś znak kursorem i wciskając r oraz dowolny inny znak, zamienisz go na podany. W końcu spróbuj polecenia dd - usunie ono całą bieżącą linię.
Za pomocą klawisza . można powtórzyć dowolne polecenie edycji. Wpisanie dd... spowoduje usunięcie czterech linii, a J...... połączenie sześciu.
Aby usunąć tekst, można połączyć polecenie d z dowolnym poleceniem ruchu. Na przykład dw usunie wszystko od kursora do początku kolejnego słowa; d) usunie wszystko do końca kolejnego zdania, a d} wszystko do końca paragrafu. Wypróbuj podobnych połączeń samemu, aby się do nich przyzwyczaić.
Skoro już eksperymentujemy z usuwaniem, to najwyższa pora żeby nauczyć się cofać zmiany. Oryginalna wersja vi pozwalała na cofnięcie jedynie ostatniego polecenia, za pomocą u. Na szczęście nowocześniejsze edycje, jak vim pozwalają cofać większą ilość zmian. Spróbuj na przemian poleceń d oraz u.
Czas zaktualizować naszą ściągawkę! Po dodaniu wszystkich poleceń, które do tej pory omówiliśmy, powinna wyglądać jak na rysunku:
Ilustracja 6.1: Ściągawka z dopisanymi poleceniami edycji |
![]() |
Jak dotąd omówiliśmy poruszanie się po vi, obsługę plików oraz podstawowe polecenia edycji. Wciąż jednak nie pokazaliśmy w jaki sposób po prostu wprowadzać tekst! Było to zamierzone, ponieważ tryb edycji vi jest nieco skomplikowany. Kiedy się go nauczysz, złożoność okaże się jednakże jego zaletą.
W trybie edycji można bezpośrednio wprowadzać tekst, podobnie jak w innych wizualnych edytorach. Aktywuje się go poleceniami i oraz a. Jeśli użyjesz pierwszego, tekst zostanie wstawiony przed kursorem, a jeśli wybierzesz następne, zostanie za nim dopisany. Aby powrócić do trybu poleceń, wystarczy wcisnąć <ESC>.
Nie zwlekaj i spróbuj obu poleceń: a oraz i. Wprowadź trochę tekstu i wciśnij escape aby wrócić do trybu poleceń. Zobacz co się stanie jeśli naciśniesz <ENTER>, klawisze kursora, <DEL>. Klawisze te pozwalają na wprowadzanie sporych zmian bez ciągłego przełączania się pomiędzy trybami edycji oraz poleceń.
Oto kilka innych użytecznych sposobów aktywowania trybu edycji. Wciśnięcie A spowoduje umieszczenie kursora na końcu bieżącej linii, niezależnie od jego aktualnej pozycji. I natomiast przeniesie go na początek linii. Wciśnięcie o utworzy nową pustą linię pod bieżącą, a O powyżej bieżącej. Aby zastąpić całą aktualną linię, wciśnij cc. Żeby zastąpić wszystko od kursora do końca linii, wciśnij c$. Aby zastąpić wszystko od kursora do początku linii, wpisz c0.
Oprócz przeprowadzenia specyficznej operacji, każde z powyższych poleceń aktywuje tryb edycji. Po zakończeniu wpisywania tekstu należy wcisnąć <ESC> żeby powrócić do trybu poleceń.
Z poleceniem c (od ang. change - zmiana) spotkaliśmy się już omawiając cc, c0 oraz c$. cc to specjalna forma polecenia c, podobna do dd. Natomiast 0 oraz c$ są przykładani połączenia polecenia zmiany z poleceniami ruchu. Pod tym względem c zachowuje się podobnie do d, z tym wyjątkiem, że pozostawia edytor w trybie edycji abyś mógł od razu nadpisać zastępowany tekst. Spróbuj połączyć c z różnymi poleceniami ruchu, na przykład wpisując cW, ce czy c(.
vi jest naprawdę potężny dzięki złożonym poleceniom, jak D{ czy cw. Pozwala między innymi na łączenie liczb z dowolnymi poleceniami ruchu. Wpisanie 3w spowoduje przesunięcie kursora o trzy słowa w prawo. Oto dwa inne przykłady złożonych poleceń: 12b, 4j.
W dodatku do połączeń (liczba)(polecenie ruchu), vi pozwala na dodawanie do nich d oraz c. Zatem d3w usunie trzy słowa za kursorem, a d2j bieżącą oraz dwie następne linie. Spróbuj sam żeby przekonać się jak potężny oraz zwięzły jest vi. Kiedy się przyzwyczaisz, będziesz mógł edytować pliki znacznie szybciej.
Czas ponownie zaktualizować ściągawkę. Oto jak teraz powinna wyglądać:
Ilustracja 8.1: Ściągawka z poleceniami złożonymi |
![]() |
Funkcje pozwalające zwiększyć efektywność
Omówiliśmy już jak się poruszać, zapisywać, wychodzić, edytować, usuwać oraz korzystać z trybu edycji. Możesz już używać vi do dowolnych zadań.
Vi posiada znacznie więcej użytecznych poleceń. W tej części pokażemy jak wycinać, kopiować i wklejać, wyszukiwać i zastępować oraz korzystać z autoindent.
Najlepszą metodą wycinania oraz wklejania tekstu jest korzystanie z trybu wizualnego, specjalnego trybu dodanego do nowocześniejszych wersji vi, jak vim oraz elvis. Należy traktować go po prostu jako tryb "zaznaczania tekstu". Kiedy tekst zostanie zaznaczony, możesz go kopiować lub usuwać, a następnie wklejać. W gvim można zaznaczać za pomocą lewego przycisku myszy:
Ilustracja 8.2: VIM z zaznaczonym tekstem |
![]() |
Ponadto, tryb wizualny można aktywować wciskając v (jeśli używasz vi w konsoli, jest to jedyna możliwość). Następnie przesuwając kursor, będziesz jednocześnie zaznaczał fragmenty tekstu. Kiedy skończysz, będziesz mógł go wycinać oraz kopiować.
Aby skopiować zaznaczony tekst, wciśnij y (od ang. yank). Aby go wyciąć, wciśnij d. Zostaniesz z powrotem przeniesiony do trybu poleceń. Następnie przesuń kursor do miejsca gdzie chcesz wstawić tekst i wciśnij P (żeby go wkleić przed kursorem) lub p (żeby go wkleić za kursorem). Gotowe! Zanim przejdziesz do kolejnej sekcji, spróbuj sam.
Aby zastąpić wzorce tekstu, skorzystamy z trybu ex. Jeśli chciałbyś zastąpić pierwsze wystąpienie podanego wyrażenia regularnego w bieżącej linii, wpisz :s/<regexp>/<zamiennik>/ i wciśnij <ENTER>. <regexp> zastąp poszukiwanym wyrażeniem regularnym, a <zamiennik> tekstem, którym chcesz go zastąpić. Żeby podmienić wszystkie wystąpienia w bieżącej linii, wpisz :s/<regexp>/<zamiennik>/g. Jeśli chcesz zastąpić wszystkie wystąpienia w pliku, wpisz :%s/<regexp>/<zamiennik>/g. Aby zastąpić wszystkie wystąpienia, ale każdą zamianę osobno potwierdzać, wpisz :%s/<regexp>/<zamiennik>/gc (c od ang. confirm) i wciśnij <ENTER>.
vi obsługuje automatyczne dodawanie wcięć w czasie edycji kodu źródłowego, tzw. autoindent. Większość nowoczesnych wersji (jak vim) domyślnie aktywuje tryb autoindent po otworzeniu pliku z kodem (na przykład .c). Kiedy jest on włączony, możesz przenieść się o jeden poziom wcięcia w lewo za pomocą <CTR>d (control-d) oraz w prawo za pomocą <CTR>t (control-t). Jeśli autoindent nie został włączony automatycznie, możesz to zrobić ręcznie poleceniem trybu ex: :set autoindent. Możesz ponadto ustawić rozmiar wcięcia za pomocą :set tabstop. Dosyć popularne jest :set tabstop=4.
Samouczek vi dobiegł końca! Po dopisaniu wszystkich zaawansowanych poleceń do ściągawki, powinna wyglądać podobnie do tej na rysunku:
Ilustracja 8.3: Ostateczna wersja ściągawki |
![]() |
Możesz już zacząć używać vi do edycji plików oraz pisania listów. Trzymaj swoją ściągawkę pod ręką i w razie czego do niej zaglądaj. W ciągu tygodnia powinieneś zapamiętać większość poleceń, a twoja efektywność wkrótce bardzo cię zaskoczy!
Jeśli chcesz ustawić vi jako domyślny edytor, wpisz w /etc/rc.conf:
Listing 8.1: Ustawienie vi jako domyślnego edytora |
(Zmienna EDITOR powinna wskazywać na preferowany edytor.)
#EDITOR="/bin/nano"
EDITOR="/usr/bin/vim"
#EDITOR="/usr/bin/emacs"
|
Oto kilka stron, które mogą się okazać przydatne w dalszej nauce vi:
Oryginalna wersja tego artykułu została po raz pierwszy opublikowana w serwisie IBM developerWorks i jest własnością Westtech Information Services. Niniejszy dokument stanowi zaktualizowaną wersję oryginału i zawiera rozmaite poprawki wprowadzone przez zespół dokumentacji Gentoo Linux.