Ze zdziwieniem patrzyłem co się dzieje na ekranie, kiedy pierwszy raz uruchomiłem edytor vi. Było to jeszcze na starym dobrym SCO Unix-ie. Trochę trwało zanim przekonałem się do tego edytora, a teraz "łapię" się na tym, że pracując w innych edytorach chcę zakończyć pracę wciskając sekwencję klawiszy :wq.
Vi i jego następca vim jest edytorem o bardzo dużych możliwościach. Postaram się objaśnić zasady pracy z edytorem vim do którego we współczesnych dystrybucjach przeważnie prowadzi dowiązanie symboliczne vi.
Tryby pracy
Tryb poleceń
W tym trybie vi pracuje zaraz po uruchomieniu. Wydawane tutaj różne skróty klawiaturowe pozwalają przejść do innego trybu, kasować tekst, kopiować tekst lub go przenosić.
Aby wrócić do trybu poleceń naciskamy klawisz [Esc] - jeśli nie jesteś pewien, czy znajdujesz się w trybie poleceń naciśnij kilka razy klawisz [Esc].
Tryb wprowadzania
Aby przejść do tego trybu naciskamy klawisz [i] od tej pory możesz pisać tekst tak jak w każdym innym edytorze. Aby zakończyć edycję musisz nacisnąć klawisz [Esc].
Oto spis podstawowych skrótów klawiaturowych pozwalających wejść do trybu edycji (wprowadzania):
[i] (insert) rozpoczniesz wprowadzanie tekstu w miejscu gdzie znajduje się kursor
[a] (append) wstawianie tekstu zaraz za kursorem
[I] czyli [Shift]+[i] wstawianie tekstu, ale kursor wcześniej zostanie przeniesiony na początek wiersza
[A] czyli [Shift]+[a] kursor zostanie przeniesiony na koniec wiersza i wejdziemy do trybu wprowadzania bezpośrednio na końcu wiersza
[o] otwieramy nowy wiersz pod kursorem przechodząc jednocześnie do trybu edycji
[O] czyli [Shift]+[o] otwieramy nowy wiersz nad kursorem i przechodzimy do trybu edycji
Tryb komend
Będąc w trybie poleceń możemy wydać komendę, aby wytłumaczyć ten tryb wydamy dwie komendy, jedną - zapis pliku, drugą - wyszukanie ciągu znaków w tekście.
Aby zapisać zmienioną treść tekstu musimy być w trybie poleceń ([Esc]), wciskamy klawisz [:] dwukropka a następnie klawisz [w]. W tym czasie na dole edytora zostanie napisany ciąg znaków :w. Po zatwierdzeniu [Enter] zbiór zostanie zapisany.
Aby zapisać i jednocześnie wyjść z edytora sekwencję klawiszy [:][w] musielibyśmy zastąpić sekwencją [:][w][q].
Na przykładzie widać, że znak dwukropka powoduje uruchomienie trybu komend (command line mode).
A teraz wyszukamy w tekście słowa foo, musimy być jak poprzednio w trybie poleceń [Esc], teraz przechodzimy do trybu komend (już nie znakiem [:]) wciskając klawisz slash [/]. Zaraz po klawiszu [/] podajemy szukany ciąg znaków otrzymując w dole ekranu coś takiego: /foo. Zatwierdzamy wszystko [Enter] i jeśli szukane słowo znajduje się w tekście to kursor ustawi się pod nim.
Chcąc wyszukać następne wystąpienie tego słowa naciskamy klawisz [n].
Tryb zaznaczania
W tym trybie będziemy mogli zaznaczać bloki tekstu (słowa, znaki, wiersze, kolumny) a następnie je usuwać lub kopiować.
Znowu rozpoczynamy pracę od trybu poleceń [Esc] (zauważ, że wszystkie czynności rozpoczynamy od tego trybu), następnie wciskamy klawisz [v]. Teraz przesuwając kursory strzałek zaznaczmy blok tekstu.
Gdybyśmy ten zaznaczony tekst chcieli skopiować to: zakończymy zaznaczenie wciskając klawisz [y], który spowoduje skopiowanie zaznaczenia i jednoczesne wyjście z trybu zaznaczenia.
Następnie ustawiamy kursor w miejscu gdzie chcemy wkleić tekst i naciskamy klawisz [p]. Blok tekstu zostanie skopiowany.
Rozpoczynanie pracy
Edytor vi możemy uruchomić z kilkoma parametrami oto kilka przykładów:
vi przyklad.txtotwarcie w edytorze pliku przyklad.txt. Jeśli taki plik istnieje to zostanie otwarty do edycji, jeśli nie - to zostanie utworzony zbiór o podanej nazwie.
vi +5 przyklad.txtedytor otworzy zbiór i ustawi kursor w piątym wierszu.
vi +/szukany_wyraz przyklad.txtedytor otworzy zbiór i ustawi kursor w pierwszym wierszu gdzie występuje szukany przez nas wyraz
Usuwanie
Klawisze [Del] i [Backspace] działają tylko w vim-ie (nie w czystym vi) i działają w trybie edycji.
Wszystkie pozostałe operacje będziemy przeprowadzać będąc w trybie poleceń.
Aby usunąć jeden znak znajdujący się pod kursorem wciskamy klawisz [x], natomiast aby usunąć znak znajdujący się przed kursorem wciskamy [X] czyli [Shift]+[x].
Gdybyśmy chcieli usunąć więcej niż jeden znak najpierw podajemy liczbę a następnie wybieramy klawisz usunięcia, np. [6][x] usunie sześć znaków do miejsca gdzie znajduje się kursor. Analogicznie z sekwencją [6][X] usuniemy sześć znaków z przed kursora.
Uwaga !!! nie naciskamy jednocześnie [6] i [x] tylko najpierw wybieramy cyfrę [6] a potem cyfrę [x]
Aby usunąć słowo ustawiamy kursor na pierwszą literę wyrazu i wciskamy sekwencję klawiszy [d][w], aby usunąć więcej niż jedno słowo podajemy liczbę słów które chcemy usunąć a następnie klawisz [w], np. [1][0][d][w] usunie 10 słów.
Uwaga !!! jak wyżej naciskamy najpierw [1] potem [0] a następnie [d] i na koniec [w], czyli 10dw
A gdybyśmy chcieli zastąpić jedno słowo innym wybierzemy sekwencję klawiszy [c][w], która spowoduje usunięcie słowa i przejście od razu do trybu edycji aby wpisać nowy wyraz.
Usunięcie wiersza to wybranie kombinacji klawiszy [d][d], usunięcie 4 wierszy to kombinacja [4][d][d].
A oto opisane podstawowe sekwencje usuwania:
[d][w] usunięcie słowa
[5][d][w] usunięcie 5 wyrazów
[d][d] usunięcie lini
[5][d][d] 5 usunięcie lini
[$][d] lub [D] usunięcie tekstu od kursora do końca linii
[d][G] usunięcie tekstu od linii w której znajduje się kursor do końca zbioru
[d][g][g] usunięcie tekstu od linii w której znajduje się kursor do początku zbioru
Kopiowanie - wklejanie
Warto zaznaczyć, że każda wartość poprzednio usunięta jest przechowywana w "schowku" i może być wklejana tak długo, dopóki nowa wartość nie zostanie wprowadzona do "schowka".
Aby skopiować wiersz naciskamy sekwencję klawiszy [y][y], które spowodują skopiowanie bieżącego wiersza do schowka, teraz wystarczy przesunąć kursor w miejsce gdzie chcemy skopiowany wiersz wstawić i nacisnąć klawisz [p]. A gdybyśmy chcieli ten wiersz wkleić 7 razy ?
Zanim wciśniemy [p] podamy liczbę [7], czyli [7][p].
Powoli wszystko staje się jasne, najpierw podajemy liczbę operacji (domyślnie 1) a następnie to co chcemy zrobić.
Skopiowanie 4 kolejnych słów okazuje się już bardzo proste: [w] oznacza słowo, [y] kopiowanie:
[4][y][w], podobnie ze skopiowanie 10 wierszy - [1][0][y][y].
Gdybyśmy chcieli blok tekstu zaznaczyć? Wybieramy klawisz [v] i teraz możemy poruszać się po ekranie kursorem strzałek i zaznaczać tekst. Po zaznaczeniu tekstu wybieramy klawisz [y], a potem wklejamy [p].
A co gdybyśmy chcieli zaznaczyć całą kolumnę tekstu (np. jakiś słupek liczb) jednocześnie naciskamy klawisze [Ctrl]+[v], znowu kursorami strzałek zaznaczamy blok tekstu i kopiujemy [y] a następnie wklejmy [p].
Wyszukaj - zamień
Przypominam, że działamy w trybie poleceń.
Przeszukanie tekstu w poszukiwaniu słowa foo rozpoczniemy od wciśnięcia klawisza [/] slash i podaniu szukanego tekstu. W naszym przypadku będzie to wyglądało tak:
/fooAby wyszukać każde następne wystąpienie tego tekstu wybieramy przycisk [n] lub [*] (aby szukać do przodu) lub [#] aby szukać wstecz.
Podanie komendy wyszukiwania:
?foospowoduje szukania słowa foo wstecz.
Gdybym chciał znaleziony tekst zamienić na inny wydaje polecenie (komendę):
:s/foo/gooco sprawi, że pierwsze wystąpienie szukanego foo zostanie zamienione na goo.
Aby wszystkie występowanie słowa foo zostało zamienione na goo wydamy polecenie:
:%s/foo/goo/gPomyliłem się, chcę cofnąć
W przypadku pomyłki wystarczy nacisnąć klawisz [u] a nasza pomyłka zostanie cofnięta.
W edytorze jest wielopoziomowe cofanie operacji, co oznacza, że możemy wiele operacji anulować.
Zakończenie pracy
Zakończenie pracy z zapisem naszej pracy załatwi za nas polecenie
:wqgdybyśmy jednak chcieli zamknąć edytor bez zapisywania zmian musimy wydać komendę:
:q!Dodatkowe komendy
Podczas pracy z edytorem możemy wydać kilka komend, które ułatwią nam pracę lub zapisać te komendy w zbiorze konfiguracyjnym edytora. Pod linuxem w kartotece domowej musisz stworzyć zbiór .vimrc i w kolejnych wierszach podać komendy:
"Cudzysłów oznacza komentarz
"włączenie podświetlenia składni:
syntax on
"wyłączenie podświetlania składni
" syntax off
"pokazuj numery wierszy
set number
"nie pokazuj numerów wierszy
"set nonumber
"automatyczne wcięcia
set autoindent
"lub wyłączenie wcięć
"set noautoindent
Zakończenie
To nie koniec właściwości tego edytora, posiada on wiele schowków (ja tutaj tylko jeden opisywałem) istnieje możliwość sprawdzania pisowni w edytorze, wyszukiwania zamykających nawiasów, podpinania różnorakich makr usprawniających vi.
Zapraszam na stronę edytora http://vim.org gdzie znajdziecie pełną dokumentację i co najważniejsze możliwość pobrania VIM-a pod chyba każdy system operacyjny.





Odpowiedzi
wt., 26/06/2007 - 17:44
Dobry art, przyda sie !
czw., 12/07/2007 - 12:40
Super art, wszystko jasno wytlumaczone, i fajna oprawa graficzna. Pozdrawiam, TP
wt., 18/03/2008 - 16:39
Fajny art!
pon., 29/09/2008 - 21:18
Bardzo fajny artykuł, coraz bardziej podoba mi się ten edytor.
pon., 13/10/2008 - 19:43
Praca w tym edytorze to KATORGA i RWANIE WŁOSÓW z GŁOWY.
..... na początku, ale teraz po pewnym czasie doceniam jego prostotę jak i zawiłości. To naprawdę super narzędzie.
wt., 18/10/2011 - 09:27
Chyba nie ma potężniejszego a jednocześnie tak spójnego i logicznego edytora od Vima. Korzystam z niego od kilku lat we wszystkim co robię (a jestem zawodowym programistą, żaden Eclipse czy Visual Studio nigdy mu nie dorównają). Ostatnio również co nieco napisałem o Vimie na swoim blogu. Zapraszam!
Dodaj nową odpowiedź