Od redakcji: Tomasz Wendlandt obiecał nam kiedyś napisanie tekstów zachęcających Emacsowców do przestawienia się na jakiś ciekawszy edytor. Dziś w swojej skrzynce ujrzałem pierwsze jego dzieło (wersja przed htmlowaniem, które mogło wprowadzić jakiś błąd, dostępna jest tutaj). Zapraszam do lektury…

vim (Vi IMproved) jest znanym edytorem ekranowym. Używa go spora grupa ludzi, a jeszcze większa pewnie unika. Ten artykuł ma na celu zachęcić nowych użytkowników do korzystania z vima i nauczyć ich obsługi tego edytora. Należy pamiętać, że vim to nie to samo co vi. Ten pierwszy zawiera kilka ulepszeń w stosunku do vi, są to między innymi:

  • wielopoziomowe cofanie ostatniej operacji
  • kilkakrotne powtarzanie danego polecenia
  • możliwość korzystania z kursorów w trybie wstawiania
  • podświetlanie składni

Powyżej wypisałem tylko kilka różnic pomiędzy vim, a vi, jeżeli chcesz wiedzieć więcej wpisz:

:h diff

podczas korzystania z vima w trybie poleceń. Większość kodu edytora napisał Bram Moolenaar, jednak pełną listę ludzi zaangażowanych w jego tworzenie uzyskasz po wpisaniu:

:h credits

Obecnie vi jest najczęściej dowiązaniem symbolicznym do vim.

Pracę możemy rozpocząć na kilka sposobów:

$ vi

co spowoduje, że edytor otworzy się z pustym buforem, lub edytując wybrany plik:

$ vi plik_do_edycji

Możemy też otworzyć plik z kursorem ustawionym na n-tym wierszu:

$ vi +5 plik_do_edycji

W takim przypadku edytor otworzy wybrany przez nas plik, a kursor ustawi na 5 wierszu. Istnieje również możliwość uruchomienia vima z kursorem ustawionym na pierwszym wierszu, w którym znajduje się szukany przez nas wyraz:

$ vi +/szukany_wyraz plik_do_edycji

Po otwarciu pliku możesz zauważyć pojedyńcze tyldy (~), oznaczają one nic innego jak puste linie. Do poruszania po edytorze możemy używać kursorów, klawiszy PageUp, PageDown, Home (do przejścia na początek wiersza) oraz End (do przejścia na koniec wiersza). Klawisze te posiadają swoje odpowiedniki w przypadku, gdy na naszym terminalu ich nie będzie.

                         k                   h     l                      j             

Tak jak widać wyżej: k – w górę, j – w dół, h – w lewo, l – w prawo. Poza tym istnieje kilka możliwości przewinięcia ekranu:

Ctrl-b – przewinięcie do góry o jeden ekran, tak jak PageUp
Ctrl-f – przewinięcie w dół o jeden ekran, tak jak PageDown
Ctrl-u – przewinięcie do góry o pół ekranu
Ctrl-d – przewinięcie w dół o pół ekranu
Ctrl-y – przewinięcie do góry o jeden wiersz
Ctrl-e – przewinięcie w dół o jeden wiersz

W – do przodu o jedno słowo
B – do tyłu o jedno słowo
E – na koniec słowa
( – na początek bieżącego zdania
) – na początek następnego zdania
{ – na początek bieżącego akapitu
} – na początek następnego akapitu

W tym miejscu należy wspomnieć o dwóch trybach w jakich pracuje się użyjawiąc vima. Tryb poleceń, w którym znajduje się edytor zaraz po jego uruchomieniu, oraz tryb edycji, w który musimy przełączyć edytor, jeżeli chcemy dodać nowy tekst. Jaka jest różnica pomiędzy nimi? Jak sama nazwa wskazuje tryb edycji służy do wpisywania tekstu i niczego innego. Natomiast tryb poleceń pozwala nam na zabawę z tekstem, dzięki niemu możemy wycinać i wklejać tekst, wywołać polecenie powłoki, skorzystać z edytora wierszowego ex itd. Wystarczy pamiętać, o tym że w trybie edycji po naciśnięciu jakiegoś znaku na klawiaturze pojawi się on na monitorze, a w trybie poleceń nie. Dalsze polecenia dotyczą trybu poleceń i w nim należy je wpisywać, no chyba że podano inaczej ;-). Esc pozwala powrócić z trybu edycji do trybu poleceń.

dopisywanie, nadpisywanie i – wstawia znak przed kursorem
I – wstawia znak na początku wiersza
a – dopisuje znak za kursorem
A – dopisuje znak na końcu wiersza
r – nadpisuje jeden znak w miejscu, w którym znajduje się kursor, np. rx zastępuje znak pod którym znajduje się kursor znakiem x
R – nadpisuje tekst w całym wierszu począwszy od miejsca, w którym znajduje się kursor
o – wstawia nowy wiersz poniżej obecnego
O – wstawia nowy wiersz powyżej obecnego
s – usuwa znak, pod którym znajduje się kursor i rozpoczyna dopisywanie przed nim
S – usuwa zawartość obecnego wiersza i na jego początku rozpoczyna dopisywanie
C – usuwa zawartość wiersza od miejsca, w którym znajduje się kursor, do jego końca i rozpoczyna dopisywanie

usuwanie, kopiowanie, łączenie
x – usuwa znak pod którym znajduje się kursor
X – usuwa znak na lewo od pozycji kursora
J – łączy obency wiersz z następującym po nim
gqq – formatuje aktualną linię
gqj – formatuje obecny i następny wers, przydatne przy odpisywaniu na listy
gqap – formatuje paragraf
dd – usuwa obecny wiersz
D – usuwa tekst od miejsca, w którym znajduje się kursor do końca wiersza
Y lub yy – kopiuje bieżący wiersz do bufora
Ctrl-v – pozwala zaznaczyć dowolny blok tekstu, który później można usunąć lub skopiować

Usunięty tekst za pomocą D, dd lub x można łatwo przywrócić, ponieważ znajduje się on w buforze. Dlatego skopiowanie (yy,Y) lub usunięcie tekstu (dd,D,x) możemy później wstawić:
p – wstawia tekst z bufora za kursorem lub poniżej obecnego wiersza
P – wstawia tekst z bufora przed kursorem lub powyżej obecnego wiersza

Jeżeli usunęliśmy wiersz wówczas zostanie on wstawiony powyżej lub poniżej obecnego wiersza (w zależności czy ujrzyjemy p lub P). Natomiast usunięcie znaku, słowa lub kilku słów powoduje, że zostaną one wstawione przed lub za kursorem (znów w zależności czy ujrzyjemy p lub P).

szukanie
/foo [enter] – szuka łańcucha foo za kursorem i gdy go znajdzie podświetla
?foo [enter] – szuka łańcucha foo przed kursorem i gdy go znajdzie podświetla
n – powtarza szukanie ostatniego łańcucha do przodu
N – powtarza szukanie ostatniego łańcucha do tyłu
% – szuka pary dla obecnego nawiasu (może być zwykły, kwadratowy lub klamrowy)
/foo/+2 – przejście do 2-go wiersza po foo
?foo?-2 – przejście do 2-go wiersza przed foo

Podczas szukania można skorzystać z wyrażen regularnych, oto kilka z nich:
^ – początek wersu
$ – koniec wersu
< – początek słowa
> – koniec słowa
[a-z] – dowolny znak z tego zakresu
[^a-z] – dowolny znak spoza tego zakresu
. – dowolny znak

przykłady:
/^foo – szuka wersów zaczynających się literami foo
/<foo – szuka słów zaczynających się literami foo
/[^foo]$ – szuka wersów nie kończących się literami foo

zaznaczanie, numerowanie
m – oznaczenie bieżącej pozycji np. mx oznaczenie bierzącej pozycji znakiem x
`x – przejście kursora do znacznika x
'x – przejście kursora do początku wiersza ze znacznikiem x
Ctrl-g – wyświetlenie numeru bieżącego wiersza oraz kolumny
gg – przejście do pierwszego wersu w pliku
G – przejście do ostatniego wersu w pliku
5G – przejście do 5-tego wersu w pliku
ga – podaje wartość znaku pod, którym znajduje się kursor w systemie dziesiętnym szesnastkowym i ósemkowym

cofanie, powtarzanie, zapisywanie i kończenie pracy
u – cofa ostatnią operację
Ctrl-r – przywraca cofniętą operację
. – powtarza ostatnią operację
3dd – usunięcie trzech wierszy
ZZ – opuszcza edytor z zapisaniem zmian
ZQ – opuszcza edytor bez zapisania zmian

ex
Ex jest edytorem wierszowym, można wywołać go z linii poleceń lub wewnątrz vi. Używając edytora ex z poziomu vi musimy poprzedzić wydawane polecenia dwukropkiem a następnie zatwierdzić je klawiszem Enter. Można również w łatwy sposób przejść z vi do ex za pomocą Q. Powrót do vi następuje po wpisaniu visual.

:!polecenie – wykonanie polecenia w powłoce np: :!ls wyświetla zawartość obecnego katalogu
:q – zakończenie pracy
:q! – zakończenie pracy bez zapisania dokonanych zmian
:w – zapisanie do aktualnego
pliku
:w 2 – zapisanie do pliku o nazwie 2
:w >>2 – dopisanie do pliku o nazwie 2
:wq – zapisanie i zakończenie pracy
:e 2 – rozpoczęcie edycji pliku o nazwie 2
:r 2 – skopiowanie zawartości pliku o nazwie 2 do edytowanego pliku
:sh – utworzenie nowej powłoki, po zakończeniu pracy z powłoką następuje przejście do wcześniej edytowanego pliku

.vimrc
set tabstop=4 – szerokość tabulacji na 4 kolumny
set tw=76 – łamanie wersu za 76 kolumną, równoważne set textwidth=76
set showmode – w trybie edycji wyświetla — INSERT –, w dole ekranu
set hlsearch – podświetla wyszukany łancuch

map <f1> G?> =-- =$<cr>d/^[^>]<cr>

Dodanie tego do .vimrc powoduje, że podczas edycji listu możemy przy pomocy klawisza F1 wycinać sygnaturki.

Czasami bywa tak, że edytujemy dwa pliki podczas jednej sesji

$ vi plik1 plik2

wtedy warto dodać:
map <f2> :previous<cr>
map <f3> :next<cr>

Dzięki F2 i F3 możemy w łatwy sposób przechodzić między edytowanymi plikami. Możemy też stosować skróty na przykład dodanie lini:

ab SIGNAT Tomasz Wendlandt <juggler@poznan.linux.org.pl>

do .vimrc spowoduje, że tekst SIGNAT zostanie zamieniony na Tomasz Wendlandt <juggler@poznan.linux.org.pl>, w trybie edycji. Wszystkie makra i ustawienia można wpisać w vimie wystarczy dodać : przed poleceniem np:

:map <f2> :previous
:ab SIGNAT Tomasz Wendlandt <juggler@poznan.linux.org.pl>
:set showmode

Możemy też wylistować je wszystkie:
:map
:ab
:set

lub też usunąć:

:unmap <f2>
:unab SIGNAT
:set noshowmode

zamiana wyszukanego łancucha znaków
:s/szukany/zmiana – zamieni pierwszy napotkany łańcuch szukany na zmiana w danym wersie
:%s/szukany/zmiana – zamieni każdy pierwszy w wersie łańcuch szukany na zmiana w całym pliku
:s/szukany/zmiana/g – zamieni wszystkie łańcuchy szukany na zmiana w danym wersie
:s/szukany/zmiana/gc – to samo co wyżej plus pytanie o potwierdzenie zamiany
:%s/szukany/zmiana/g – zamieni wszystkie łańcuchy szukany na zmiana w całym pliku
:%s/szukany/zmiana/gc – to samo co wyżej plus pytanie o potwierdzenie zamiany

Można też stosować wyrażenia . $ oraz znaczniki:

:.,+5s/szukany/zamiana/g – zamienia łańcuch szukany, łańcuchem zamiana od obecnego wersa, aż do 5 kolejnych po nim
:.,’xs/szukany/zamiana/g – zamienia łańcuch szukany, łańcuchem zamiana od obecnego wersa, aż do oznaczonego znacznikiem x

na koniec
Edytor vim posiada spore możliwości, w tym dokumencie opisane zostasły tylko najważniejsze. Warto też pamiętać o gvim’ie, graficznej wersji vim’a. Więcej o edytorze można dowiedzięc się z:

  $ man vim  $ vimtutor  /usr/share/vim  :help  

Poza tym polecam te adresy:

http://www.vim.org – strona domowa projektu
http://vim.sourceforge.net – strona z wieloma przydatnymi tipsami i skryptami
http://www.moolenaar.net – strona twórcy vima
Archiwalny news dodany przez użytkownika: juggler.
Kliknij tutaj by zobaczyć archiwalne komentarze.

Oznaczone jako → 
Share →