Reklama

Wprowadzenie do edytora Vi (Vim)

Erewhon, pt., 19/01/2007 - 11:17
Kategorie:

vim_editor.gifZe 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.txt

otwarcie 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.txt

edytor otworzy zbiór i ustawi kursor w piątym wierszu.

vi +/szukany_wyraz przyklad.txt

edytor 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:

/foo

Aby wyszukać każde następne wystąpienie tego tekstu wybieramy przycisk [n] lub [*] (aby szukać do przodu) lub [#] aby szukać wstecz.

Podanie komendy wyszukiwania:

?foo

spowoduje szukania słowa foo wstecz.

Gdybym chciał znaleziony tekst zamienić na inny wydaje polecenie (komendę):

:s/foo/goo

co 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/g

Pomylił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

:wq

gdybyś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.

Średnia: 5 (6 głosy(ów))

Odpowiedzi

emm (niezweryfikowany) komentuje:
wt., 26/06/2007 - 17:44

Dobry art, przyda sie !

Ciaho (niezweryfikowany) komentuje:
czw., 12/07/2007 - 12:40

Super art, wszystko jasno wytlumaczone, i fajna oprawa graficzna. Pozdrawiam, TP

Mateusz (niezweryfikowany) komentuje:
wt., 18/03/2008 - 16:39

Fajny art!

Piotr (niezweryfikowany) komentuje:
pon., 29/09/2008 - 21:18

Bardzo fajny artykuł, coraz bardziej podoba mi się ten edytor.

Anonim (niezweryfikowany) komentuje:
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.

Karol Samborski (niezweryfikowany) komentuje:
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ź

Zawartość pola nie będzie udostępniana publicznie.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <pre> <blockquote>
  • Znaki końca linii i akapitu dodawane są automatycznie.
CAPTCHA
To pytanie sprawdza czy jesteś człowiekiem, a aby zapobiec przed spamem.
Image CAPTCHA
Enter the characters shown in the image.