background image

Dla początkujących

Vim – konkurent prawie doskonały!

16

styczeń 2009

Dla początkujących

Vim – konkurent prawie doskonały!

17

www.lpmagazine.org

   

 lin

ux

@

so

ftw

ar

e.

co

m

.p

l

Vim – konkurent 

prawie doskonały!

W poprzednim numerze poruszyliśmy temat jednego z dwóch najdoskonalszych edytorów tekstu – 
Emacsa. W tym artykule zajmiemy się największym konkurentem Emacsa, którym niezaprzeczalnie jest 
Vim. Od wielu lat trwa spór pomiędzy użytkownikami wspomnianych edytorów o doskonałość i przewagę 
jednego nad drugim. 

Łukasz Ciesielski

T

rudno  jednak  w  sposób  jednoznaczny  okre-
ślić, który z nich jest bardziej funkcjonalny, czy 
wszechstronny. Oczywistością jest, że zarówno 
Emacs jak i Vim, poza niewątpliwymi zaletami 

posiadają także pewne niedoskonałości. Skupmy się jednak 
na bohaterze tytułowym. Drugie posiedzenie sądu w sprawie 
o wieloplatformowość, użyteczność i otwartość rozbudowa-
nego kodu źródłowego – wymierzone przeciwko oskarżone-
mu Vim – czas zacząć!

Powiew przeszłości

Przede wszystkim historię tego programu należy rozpo-
cząć od pewnego faktu. Otóż Vim nie jest pomysłem no-
watorskim,  czy  raczej  przełomem.  Dlaczego?  Ponie-
waż  tak  naprawdę  edytor  taki  już  istniał  w  momencie 
powstawania  Vima.  Zapewne  zastanawiacie  się  jak  to 
możliwe  lub  jaka  intencja  przyświecała  autorowi  kiedy 
tworzył to co już zostało stworzone? Aby poznać kom-
pletną  anatomię  drzewa  nie  wolno  zapominać  o  korze-
niach.  Podobnie  przedstawia  się  sprawa  interesującego 
nas edytora. Czym więc jest Vim? Już sama nazwa wie-
le  tłumaczy,  ponieważ  w  rzeczywistości  składa  się  ona 

z nazwy poprzednika stanowiącego swoisty fundament, 
czyli Vi oraz angielskiego słowa improved oznaczające-
go rozbudowany

Pierwowzór Vima został napisany przez Billa Joya, 

natomiast jego nazwa swój rodowód zaczerpnęła od sło-
wa  visual.  To  właśnie  na  podwalinach  tego  programu 
holenderski  programista  –  Bram  Moolenaar  –  postano-
wił napisać jeden z najlepszych edytorów tekstu. W ten 
sposób  Vim  stał  się  rozbudowanym  i  wieloplatformo-
wym  oprogramowaniem.  Pierwsza  wersja  ujrzała  świa-
tło  dzienne  w  1991  roku.  Ciekawostką  jest  specyficzna 
licencja, na podstawie której autor zdecydował się podzie-
lić swoim dziełem z innymi użytkownikami, czyli chari-
tyware
. Podstawową cechą licencji jest kompatybilność 
z  licencją  GPL.  Odmienność  jednak  najwidoczniejsza 
jest  w  samych  założeniach  twórcy  Vima.  W  praktyce 
oznacza  to  możliwość  nieodpłatnego  korzystania  z  do-
skonałego edytora tekstu. Autor zachęca jednak do prze-
kazywania  darowizn  na  cele  charytatywne,  np.  pomoc 
ofiarom AIDS w Ugandzie.

Aktualna wersja Vima (7.2) jest rozwijana przez wie-

lu  doskonałych  programistów.  Dbają  oni,  aby  wprowa-

background image

Dla początkujących

Vim – konkurent prawie doskonały!

16

styczeń 2009

Dla początkujących

Vim – konkurent prawie doskonały!

17

www.lpmagazine.org

dzać  jak  najwięcej  poprawek  ułatwiających 
korzystanie  z  programu,  pilnując  jednocze-
śnie,  aby  nie  zostały  zatracone  pozytywne 
jego strony. Zanim przejdziemy do szczegó-
łowego  omawiania  Vima,  chciałbym  wspo-
mnieć  o  zaletach  tego  edytora.  Pierwszą 
i  najważniejszą  jest  oczywiście  bardzo  wy-
soka  konfigurowalność.  Wszystko  zostało 
jednak  zorganizowane  w  taki  sposób,  aby 
nawet  początkujący  użytkownik  mógł  z  ła-
twością  przebrnąć  przez  proces  dostrajania 
edytora do własnych potrzeb. Ponadto, Vim 
został wyposażony w szereg dodatków, któ-
re  w  znacznym  stopniu  ułatwiają  nie  tylko 
edycje dokumentów, ale pracę w ogóle. Za-
gadnieniem tym zajmiemy się jednak w dal-
szej  części  artykułu.  Bardzo  ważnym  za-
gadnieniem  jest  intuicyjność.  Choć  jest  to 
pojęcie czysto abstrakcyjne, odgrywa czoło-
wą  rolę  podczas  użytkowania  danego  opro-
gramowania. W  grę  wchodzą  tu  wszelkiego 
rodzaju  skróty  klawiaturowe,  umiejscowie-
nie  najczęściej  używanych  elementów,  na-
zewnictwo  dodatkowych  funkcji,  np.  szyb-
ciej  użytkownik  zapamięta  nazwę  save  niż 
save-this-text-now.  Choć  podany  przykład 
nie  jest  skomplikowany,  zdarzają  się  jed-
nak  nazwy,  z  którymi  prawdopodobnie  nie 
mają  problemów  jedynie  ich  twórcy.  Nie 
wolno  również  zapominać  o  dokumantacji. 
Mało kto podczas wyboru edytora tekstu za-
stanawia  się  nad  tym  zagadnieniem.  Jest  to 
niewybaczalny  błąd,  ponieważ  słaba  doku-
mentacja lub jej całkowity brak w przyszłości 
zaowocują tym, że użytkownik będzie zmu-
szony poświęcić długie godziny na przeszuki-
wanie Internetu w celu uzyskania odpowiedzi 
na nurtujące go pytania związane np. z kon-
figuracją. W przypadku Vima, podobnie jak 
w przypadku Emacsa dokumentacja jest bar-
dzo rozbudowana. Co jest bardzo ważne, do-
stępna jest polska wersja dokumentacji, cho-
ciażby po wpisaniu w konsoli man vim.

Zatrybiły skróty

Każdy  edytor  tekstu  oferuje  własne  zesta-
wienia  skrótów  klawiaturowych.  Ich  zna-
jomość  stanowi  podstawę  obsługi  i  spraw-
nego  poruszania  się  po  tekście.  Również 
funkcje posiadają najczęściej przypisane so-
bie  układy  klawiszy.  Zanim  jednak  przej-
dziemy  do  poznawania  poszczególnych 
zestawów,  musimy  poznać  schemat  działa-
nia Vima. Przede wszystkim nie wolno za-
pomnieć,  że  jest  to  edytor  modularny,  co 
oznacza,  że  potrafi  pracować  w  kilku  try-
bach.  Pewnie  zapytasz,  czym  są  te  tryby? 
Trudno  to  wyjaśnić  w  sposób  przejrzysty. 
Określając to w sposób najprostszy z możli-

wych, można powiedzieć, że dany tryb wa-
runkuje to, co użytkownik może w nim wy-
konać,  np.  jeden  będzie  służył  do  wpisy-
wania  tekstu,  natomiast  w  innym  wpisuje-
my polecenia, które mają zostać wykonane 
przez program. Twórca programu wyróżnia 
aż sześć podstawowych trybów pracy Vima 
oraz pięć dodatkowych. W praktyce jednak 
korzysta  się  najczęściej  z  trzech:  Normal
Insert i Command Line lub Ex. Pierwszy ze 
wspomnianych  jest  podstawowym  trybem, 
który  uruchamia  się  wraz  z  programem. 
Można  w  nim  wykonać  wszystkie  podsta-
wowe  polecenia  edytora.  Drugi  tryb  –  In-
sert
 mode – pozwala na wpisywanie tekstu 
z  klawiatury  do  bufora.  To  właśnie  w  tym 
trybie użytkownik może tworzyć tekst i do-
wolnie nim manipulować. Nazwa tego trybu 
nie  jest  przypadkowa,  ponieważ  przełącza-
my się do niego wciskając właśnie klawisz 
[Insert]. Aby opuścić tryb Insert korzystamy 
z  klawisza  [Esc].  Trzeci  wspomniany  już 
tryb,  Command  Line,  służy  do  wydawania 
programowi  poleceń,  podobnie  jak  w  kon-
soli  systemowej.  Uogólniając,  tryby  moż-
na podzielić na wstawiania i poleceń. Tryb 
wstawiania  został  jednak  rozdzielony  na 

dwa rodzaje. Jednym z nich jest wspomnia-
ny już Insert mode, natomiast drugi to tzw. 
Replace mode. Na czym polega różnica? Za-
sadniczo funkcja jaką spełniają oraz skróty 
klawiaturowe  są  identyczne.  Różnice  moż-
na  jednak  dostrzec  podczas  wprowadzania 
tekstu,  w  momencie  ,kiedy  kursor  znajdu-
je się wewnątrz danej linii. W trybie Insert 
tekst  będzie  dodawany  do  już  istniejące-
go, powodując jego przesunięcie, natomiast 
w trybie Replace stary tekst będzie podmie-
niany przez nowy, czyli istniejące znaki zo-
staną  podmienione  na  wprowadzane.  Aby 
przejść do Replace wystarczy użyć klawisza 
R  w  trybie  poleceń.  Powrót  do  Insert  mo-
de
 jest możliwy za pośrednictwem klawisza 
[Insert]. Jak przejść do trybu poleceń? Moż-
na skorzystać z dwóch skrótów klawiaturo-
wych. Pierwszy to klawisz [Esc], natomiast 
drugu to [Ctrl+c]. Pewnym problemem mo-
że  być  kompatybilność  Vima  z  Vi.  Jeżeli 
w pliku konfiguracyjnym jest włączona taka 
opcja, edytor nie będzie oferował możliwo-
ści poruszania się kursorem po tekście. Wy-
nika to z tego, że pierwowzór Vima nie da-
wał  takiej  możliwości.  Problem  ten  można 
w prosty sposób rozwiązać. Wystarczy edy-

Listing 1. 

Parametry przypisujące skrót klawiaturowy oraz kompilator do określonego typu plików – tu *.pas.

autocmd BufEnter *.pas imap <F6> <C-O>:!fpc 

<CR>;

autocmd BufEnter *.pas  map <F6> :!fpc 

<CR>.

Listing 2. 

Ustawienia pozwalające na sprawdzanie pisowni z uwzględnieniem języka polskiego.

set spelllang=pl;
map <silent><F7> :setlocal spell!<CR>; 

imap <silent><F7> <ESC>:setlocal spell!<CR>i<right>.

Rysunek 1. 

Ekran powitalny programu Vim w pełnej okazałości

background image

18

Dla początkujących

Vim – konkurent prawie doskonały!

styczeń 2009

19

Dla początkujących

Vim – konkurent prawie doskonały!

www.lpmagazine.org

tować  plik  ~/.vimrc  i  wpisać  set  nocompa-
tible
  lub  set  nocp.  Po  ponownym  urucho-
mieniu  edytora  zostaną  wczytane  nowe 
parametry. Konfiguracja taka pozwoli na po-
ruszanie się po tekście za pomocą strzałek, 
a  także  klawiszy  [Home]  i  [End].  Drugim 
trybem jest oczywiście tryb, w którym użyt-
kownik  wydaje  polecenia.  Po  przełączeniu 
się  do  niego  można  korzystać  ze  wszyst-
kich  poleceń  służących  do  zarządzania  nie 
tylko tekstem, ale także całym plikiem. Aby 
wprowadzić  program  w  tryb  poleceń  nale-
ży  posłużyć  się  klawiszem  [Esc].  Czasami 
zdarza się, że niezbędne będzie kilkukrotne 
przyciśnięcie tego klawisza. Ma to związek 
z  trybami  zagnieżdżonymi  i  program  musi 
opuścić każdy z nich po kolei.

Poznaliśmy  już  tryby,  czas  więc  przejść 

do obsługi samego programu. Ponieważ są to 
prymarne  informacje,  najsensowniej  będzie 
rozpocząć naukę od poruszania się po tekście. 
Myślisz, że to proste? Nic bardziej mylnego. 
Oczywiście, korzystając z Gvima można po-

sługiwać  się  myszą  komputerową.  Jaki  jed-
nak sens miałoby uczenie się tego, co jest dla 
wszystkich jasne i zrozumiałe? Nie miałoby 
żadnego sensu. Skupimy się więc na obsłudze 
Vima  w  konsoli.  Po  uruchomieniu  edytora 
bez środowiska graficznego okaże się, że nie 
można korzystać z myszy. Niezbędna będzie 
znajomość  skrótów  klawiaturowych.  Wspo-
mnieliśmy już o pewnej drobnej modyfikacji 
pliku konfiguracyjnego, która umożliwia ko-
rzystanie  ze  strzałek  umieszczonych  na  kla-
wiaturze oraz klawiszy [Home] i [End]. Obec-
nie  każdy  system  zapewnia  już  możliwość 
korzystania z tych klawiszy. Dawniej jednak 
użytkownicy  musieli  posługiwać  się  kombi-
nacjami składającymi się z określonych liter 
lub cyfr i klawiszy [Ctrl] oraz [Alt] (dawniej 
[Meta]). Aby artykuł był kompletny, a cieka-
wość  Czytelnika  zaspokojona,  przyjrzymy 
się tym skrótom bliżej. Czasem taki powiew 
historii ma swój urok i duża część użytkow-
ników  korzysta  właśnie  z  tradycyjnych  ze-
stawień,  które  już  po  kilku  próbach  wydają 

się być o wiele wygodniejsze. Do poruszania 
się po tekście w pionie służą klawisze J (dół) 
i  K  (góra),  natomiast  aby  przemieszczać  się 
kursorem w linii, czyli w poziomie używamy 
H  (lewo)  i  L  (prawo).  Jeżeli  przyjrzymy  się 
ich ułożeniu na klawiaturze, spostrzeżemy, że 
układ taki jest przemyślany i sensowny. Waż-
ną rzeczą, o której należy pamiętać jest wyj-
ście z trybu wprowadzania tekstu przed sto-
sowaniem tych klawiszy do poruszania się po 
tekście  (klawisz  [Esc]).  Czasami  jednak  po-
ruszanie  się  po  długim  pliku  znak  po  znaku 
jest uciążliwe, zwłaszcza jeśli np. musimy się 
dostać do n-tego wyrazu, aby go zamienić na 
inny.  Znacznie  wygodniej  jest  w  takim  wy-
padku przemieszczać się słowami. Aby prze-
skakiwać słowa do przodu korzystamy z kla-
wisza  W  (ang.  word),  natomiast  w  tył  poru-
szamy  się  klawiszem  B  (ang.  back  word). 
Jest  to  bardzo  wygodny  i  przede  wszystkim 
szybki sposób na pokonywanie długich frag-
mentów  tekstu.  Może  się  jednak  okazać,  że 
w  przypadku  plików  wielostronicowych 
i  ta  metoda  jest  zbyt  wolna.  Co  wtedy  ro-
bić? Przewijać tekst całymi ekranami. Dzię-
ki tej technice będziemy mogli przeskakiwać 
naprawdę  duże  partie  tekstu.  Dzięki  skróto-
wi  [Ctrl+F]  (ang.  forward)  jesteśmy  w  sta-
nie  przełączać  kolejne  ekrany  w  przód,  na-
tomiast używając skrótu [Ctrl+B] (ang. bac-
kward
) powracamy do wcześniejszych. A co 
z  [Home]  i  [End]?  Ich  odpowiednikami  są 
klawisze 0 oraz $ (czyli [Shift+4]). Pierwszy 
z  nich  przenosi  na  początek  tekstu  lub  aka-
pitu, natomiast drugi analogicznie na koniec. 
Istnieje  jednak  możliwość  przemieszczenia 
się na początek np. akapitu, w miejsce znaj-
dujące się za pierwszą spacją lub tabulatorem. 
Jest  to  polecenie  rzadziej  stosowane,  jednak 
nadal  funkcjonujące.  Wystarczy  użyć  skrótu 
[Shift+6]. Vim został napisany w dużej mie-
rze jako edytor programistyczny. Co za tym 
idzie,  twórcy  zadbali  aby  było  to  wygodne 
środowisko  pracy  dla  programistów.  Nawet 
takie czynności jak poruszanie się po tekście 
zostały odpowiednio wzbogacone przydatny-
mi dla nich funkcjami. Przykładem jest wy-
posażenie Vima w możliwość przeskakiwania 
do linii kodu znajdujących się pod wskazany-
mi  numerami.  Ponieważ  edytor  ten  umożli-
wia także numerowanie poszczególnych linii, 
sprawia  to,  że  programista  znając  położenia 
interesujących go fragmentów pisanego kodu, 
może w prosty sposób przemieszczać się po-
między nimi. Dzięki temu omija konieczność 
przewijania całości. Proces ten nie jest skom-
plikowany i ogranicza się jedynie do podania 
numeru  linii,  która  nas  interesuje  oraz  wci-
śnięcia kombinacji [Shift+G].

Tabela 1. 

Skróty, których znajomość jest niezbędna do swobodnej pracy z programem.

Skrót

Działanie

H (analogicznie – strzałka w lewo)

Przesuwa kursor w lewą stronę

L (analogicznie – strzałka w prawo)

Przesuwa kursor w prawą stronę

K (analogicznie – strzałka do góry)

Przesuwa kursor do wyższej linii

J (analogicznie – strzałka w dół)

Przesuwa kursor do linii poniżej

0 (odpowiednik klawisza [Home])

Ustawia na początku akapitu lub strony

$ (odpowiednik klawisza [End])

Ustawia na końcu akapitu lub strony

[Esc]

Przełącza program w tryb poleceń

W

Przeskakuje o jedno słowo do przodu

B

Przeskakuje o jedno słowo wstecz

[Ctrl+F]

Pokazuje kolejny ekran

[Ctrl+B]

Pokazuje poprzedni ekran

X (odpowiednik klawisza [Delete])

Kasuje zaznaczone znaki lub znaki znajdujące się za 
kursorem

[Shift+X] (odpowiednik klawisza [Backspace]) Kasuje znak poprzedzający kursor
DD

Kasuje cały wiersz

[D+$]

Kasuje wiersz od miejsca, w którym znajduje się kursor

[D+^]

Kasuje znaki od miejsca, w którym znajduje się kursor do 
początku linii

U

Cofa wprowadzone zmiany

[Ctrl+R]

Ponawia cofnięte zmiany

Y (odpowiednik [Ctrl+C])

Kopiuje zaznaczenie

P (odpowiednik [Ctrl+V])

Wkleja zawartość rejestru

:w

Zapisuje zmiany

!

Wymusza wykonanie polecenia

:q

Wychodzi z programu

/ fraza

Wyszukuje frazę do przodu

? fraza

Wyszukuje frazę do tyłu

N

Przechodzi do kolejnej odnalezionej frazy

[Shift+N]

Przechodzi do wcześniej odnalezionej frazy

background image

18

Dla początkujących

Vim – konkurent prawie doskonały!

styczeń 2009

19

Dla początkujących

Vim – konkurent prawie doskonały!

www.lpmagazine.org

Kolejnym  krokiem  jest  manipulowanie 

zawartością pliku oraz samym plikiem. Mam 
tu na myśli nie tylko takie operacje jak wy-
cinanie, wklejanie, czy kopiowanie fragmen-
tów tekstu, ale również otwieranie i zapisy-
wanie  plików.  Zacznijmy  jednak  od  edycji 
danego  pliku,  np.  Test.txt.  Najczęściej  wy-
gląda to w taki sposób, że w konsoli urucha-
miamy program Vim wraz ze ścieżką do od-
powiedniego pliku, który chcemy edytować. 
Istnieje jednak możliwość wczytania pliku do 
programu bez konieczności ponownego uru-
chamiania.  Umożliwia  to  funkcja  find. Aby 
przyspieszyć  wyszukiwanie  możemy  podać 
kompletną ścieżkę do istniejącego pliku (lub 
tworzonego). Jeżeli chcemy otworzyć (utwo-
rzyć) np. plik ~/Test.txt w trybie poleceń wpi-
sujemy 

:find  ~/Test.txt

. Może się jednak 

zdarzyć,  że  operacja  zakończy  się  błędem, 
a  edytor  poinformuje  o  konieczności  aktu-
alnej wersji innego, edytowanego wcześniej 
pliku. Tu mamy dwie możliwości. Pierwsza 
to zapisanie zmienionych danych i próba po-
nownego  otworzenia  pożądanego  pliku,  na-
tomiast  druga  to  tzw.  wymuszenie  na  pro-
gramie  danej  operacji.  Robimy  to  dodając 
do  polecenia  znak  wykrzyknika.  Jeżeli  roz-
każemy Vimowi wykonanie polecenia 

:find! 

~/Test.txt

  to  bez  względu  na  stan  zapisu 

otwartego aktualnie dokumentu, zostanie on 
zamknięty,  natomiast  edytor  otworzy  wska-
zany przez nas dokument. Może się zdarzyć, 
że nie będziemy chcieli zapisywać dopisane-
go fragmentu pliku, a chcielibyśmy wczytać 
ponownie  jego  zawartość,  lub  mówiąc  pro-
ściej  odświeżyć  zawartość  bez  zapisywania 
nowych  fragmentów.  Wpisujemy  w  trybie 
poleceń 

:edit

 lub 

:edit!

.

Skoro udało nam się edytować plik, zo-

baczmy co Vim potrafi zrobić z jego zawar-
tością. Poza pisaniem, wklejaniem i kopio-
waniem  tekstu,  najczęściej  wykonywaną 
operacją jest kasowanie. Oczywiście może-
my korzystać z takich klawiszy jak [Delete
i  [Backspace],  jednak  nie  są  to  standardo-
we skróty w przypadku Vima. Odpowiedni-
kiem [Delete] jest X, natomiast [Backspace
zastępuje  [Shift+X].  Na  czym  więc  polega 
różnica?  Otóż  pierwsze  ze  wspomnianych 
działają w trybie wprowadzania tekstu. Aby 
skasować  znaki  za  pomocą  standardowych 
zestawień Vima musimy najpierw przejść do 
trybu poleceń ([Esc]), ustawić kursor w od-
powiednim miejscu, a następnie skorzystać 
z odpowiadającego naszym potrzebom skró-
tu. Twórcy programu zadbali o jego funkcjo-
nalność. Jeśli chcemy usunąć większą ilość 
znaków, możemy to zrobić na kilka sposo-
bów. Dla skasowania np. 10 znaków w miej-

scu, w którym znajduje się kursor wpisuje-
my 10, a następnie korzystamy z odpowia-
dającego  nam  skrótu  (X  usunie  10  znaków 
znajdujących  się  za  kursorem,  a  [Shift+X
te które są przed kursorem). Jest to bardzo 
dobra  funkcja,  jednak  w  przypadku  pracy 
na  długich  tekstach  nieco  uciążliwa.  Trud-
no bowiem liczyć znaki, które chcielibyśmy 
usunąć. Jeśli zależy nam na kasowaniu ca-
łych wierszy, to znacznie praktyczniejszym 
poleceniem  jest  DD.  Wydane  w  trybie  po-
leceń  kasuje  cały  wiersz,  w  którym  znaj-
duje  się  kursor.  Istnieje  także  możliwość 
usuwania  kilku  wierszy  jednocześnie.  Wy-
starczy  polecenie  DD  poprzedzić  liczbą 
oznaczającą  ilość  wierszy.  To  jednak  nie 
wszystko!  Ilość  dostępnych  poleceń  ofe-
rowanych przez Vima jest tak ogromna, że 
trudno o wszystkich pamiętać. Bardzo przy-
datnym  poleceniem  jest  np.  zestawienie 
[D+$]. Efektem jego działania jest usunięcie 
tekstu od znaku, na którym znajduje się kur-
sor, aż do końca linii. Stosując [D+Shift+6], 
możemy  skasować  tekst  od  danego  znaku 
do  początku  linii.  A  co  jeżeli  się  pomyli-
my  i  chcemy  cofnąć  lub  ponowić  zmiany? 
Każdy edytor tekstu  na  wysokim  poziomie 
(a Vim do takich właśnie należy) oferuje takie 
funkcje. Aby  cofnąć  wprowadzone  zmiany 
używamy klawisza U (ang. undo), natomiast 
jeżeli chcemy je ponowić [Ctrl+R] (ang. re-
do
). Ogromnym plusem jest to, że zarówno 
cofanie,  jak  i  przywracanie  może  być  wy-
konywane wielokrotnie. Oznacza to, że mo-
żemy  cofać  nie  tylko  ostatnie  zmiany,  ale 
również te wcześniejsze. Identycznie wyglą-
da sytuacja przywracania. A co z kopiowa-
niem i wycinaniem? W przypadku Vima nie 
mamy do czynienia z dobrze znanym każde-
mu schowkiem. Tutaj dane są umieszczane 
w tzw. rejestrach, które w rzeczywistości są 
równoznaczne  ze  schowkami.  Użytkownik 
ma  do  dyspozycji  dwadzieścia  sześć  reje-
strów oznaczonych kolejno literami alfabetu 
oraz jeden domyślny. Tak naprawdę jest ich 
znacznie  więcej,  jednak  są  to  tzw.  rejestry 
specjalnego  przeznaczenia,  których  raczej 
nie  używamy.  Kopiowanie  nie  jest  już  tak 
proste  jak  opisane  wyżej  operacje.  Istnie-
je kilka metod jednak najwygodniejszą jest 
modyfikacja  pliku  konfiguracyjnego  w  ta-
ki sposób, aby możliwe było znane wszyst-
kim zaznaczanie z użyciem klawisza [Shift]. 
Na  początek  otwieramy  plik ~/.vimrc. Tam 
dopisujemy  linię 

set  keymodel=startse-

l,stopsel

. Dzięki niej będziemy mogli za-

znaczać trzymając wciśnięty klawisz [Shift
i posługując się strzałeczkami lub przedsta-
wionymi  już  w  tekście  skrótami  alfanume-

rycznymi. Podczas zaznaczania zostaniemy 
automatycznie przełączeni w tryb wizualny. 
Jest to trzeci z trybów Vima. Po zaznacze-
niu  odpowiedniego  fragmentu,  co  nie  po-
winno  już  sprawiać  problemów  wciskamy 
klawisz Y (pozostając w trybie wizualnym). 
Nasz tekst znajduje się już w schowku. Aby 
wkleić  go  w  odpowiednie  miejsce,  należy 
ustawić  kursor,  a  następnie  trybie  poleceń 
([Esc]) wcisnąć klawisz P (ang. paste). Go-
towe! Można również włączyć obsługę [Ctr-
l+C
] i [Ctrl+P], czyli alternatywną metodę 
kopiowania  i  wklejania.  Jednak  tradycyjny 
sposób Vima daje użytkownikowi znacznie 
większe możliwości, ponieważ podczas ko-
piowania  może  sam  kontrolować  do  jakie-
go rejestru i co jest kopiowane. Sprawia to, 
że tak naprawdę można skopiować dwadzie-
ścia sześć fragmentów bez konieczności na-
tychmiastowego wklejania ich w obawie, że 
kolejne kopiowania zamaże poprzednie. Je-
śli  chcemy  skopiować  tekst  do  pierwszego 
rejestru,  czyli  oznaczonego  literą  a,  wyda-
jemy polecenie 

a

 i wciskamy klawisz Y. Po-

dobnie będzie wyglądać sytuacja z każdym 
rejestrem.  Różnica  będzie  jedynie  w  poda-
wanej  nazwie.  Celowo  nie  wspominaliśmy 
jeszcze o wycinaniu fragmentów tekstu. Ist-
nieje kilka sposobów na osiągniecie tego ce-
lu. Jednym z nich jest zaznaczenie fragmen-
tu,  następnie  skopiowanie  go  i  usunięcie. 
W  ten  sposób  uzyskamy  efekt  identyczny 
jak w przypadku typowego wycinania. Jeże-
li zależy nam, aby wycinany fragment zna-
lazł się w określonym rejestrze, możemy po-
służyć się poleceniem 

aX

, gdzie 

a

 jest nazwą 

konkretnego  rejestru,  natomiast 

X

  usuwa 

tekst po uprzednim przypisaniu go do okre-
ślonego schowka. Oczywiście tekst musi zo-
stać wcześniej zaznaczony.

Kiedy skończymy pracę z plikiem najczę-

ściej chcemy zapisać jej efekty. Vim oferuje 
dwie możliwości zapisywania. Pierwszą jest 
wyjście z trybu wprowadzania do trybu pole-
ceń ([Esc]) i wydanie polecenia 

:w

. Może się 

jednak zdarzyć, że nasz edytor odmówi po-
słuszeństwa i ujrzymy komunikat o błędzie. 
Najprawdopodobniej okaże się, że pracowa-
liśmy w nowym dokumencie i np. nie podali-
śmy jego nazwy i ścieżki (

:w  ~/Test.txt

). 

Jeżeli istnieje inna przyczyna, można wymu-
sić  na  Vimie  zapisanie  dokumentu  stosując 
znak wykrzyknika. Należy jednak przed każ-
dą tego typu operacją dokładnie zastanowić 
się jaka była przyczyna wystąpienia ostrzeże-
nia. Z całą pewnością nie jest to metoda zale-
cana i bezpieczna.

W  tym  momencie  nawet  użytkownicy, 

którzy  spotkali  się  z  Vimem  pierwszy  raz 

background image

20

Dla początkujących

Vim – konkurent prawie doskonały!

styczeń 2009

21

Dla początkujących

Vim – konkurent prawie doskonały!

www.lpmagazine.org

są w stanie z niego korzystać. Wiemy czym 
są tryby, potrafimy otwierać, zamykać i mo-
dyfikować zawartość plików. W dalszej czę-
ści  artykułu  zajmiemy  się  metodami  prze-
szukiwania tekstu, a także nauczymy się jak 
sprytnie  można  podmieniać  jego  określone 
fragmenty. Jest to zagadnienie na tyle istot-
ne, że zasłużyło na umieszczenie go w od-
dzielnym akapicie.

Szukaj a znajdziesz

Trudno  wyobrazić  sobie  pracę  z  jakimkol-
wiek  tekstem  bez  możliwości  przeszukiwa-
nia treści, wyszukiwania określonych zwro-
tów  i  słów.  Mechanizm  ten  został  w  Vimie 
bardzo  skrupulatnie  przemyślany  i  zaplano-
wany.  Twórcy  zadbali  o  dopracowanie  de-
tali  związanych  między  innymi  z  wyszuki-
waniem  i  zastępowaniem  wyrażeń.  Dzięki 
temu edytor ten stał się potężnym konkuren-
tem dla dedykowanych środowisk programi-
stycznych, takich jak np. Eclipse czy Anjuta. 
Vim został wyposażony w umiejętność ope-
rowania nie tylko na zwykłych fragmentach 
tekstu, ale także na maskach, podobnych do 
tych, które są dostępne w konsoli.

Jeżeli  chcemy  wyszukać  jedynie  jakiś 

wyraz lub określone zestawienie wyrazowe, 
wystarczy  w  trybie  poleceń  wpisać  znak 

/

a następnie poszukiwany tekst. Teraz wystar-
czy  zaakceptować  klawiszem  [Enter]  i  jeśli 
Vim  odnajdzie  szukany  zestaw  zostanie  on 
odpowiednio  oznaczony  i  wskazany  kurso-
rem.  W  tym  przypadku  przeszukiwanie  do-
kumentu  odbywa  się  w  kierunku  jego  koń-
ca. Warto  jednak  wspomnieć  w  jaki  sposób 
możemy przeskakiwać do kolejnej pasującej 
wartości, bez potrzeby ponownego wydawa-

nia polecenia. Recepta jest prosta. Aby prze-
nieść się do kolejnej pozycji, poruszając się 
w kierunku końca pliku wystarczy użyć skró-
tu klawiaturowego N, natomiast w celu poru-
szania się ku początkowi [Shift+N]. Jeśli szu-
kany fragment tekstu znajduje się przed ak-
tualną pozycją kursora, zamiast 

/

 wydajemy 

polecenie 

?

,  po  czym  wpisujemy  pożądany 

tekst. Dzięki temu Vim będzie przeszukiwał 
plik wstecz. Metody te pozwalają na wygod-
ną pracę z programem. Jeżeli jednak zależy 
nam na sprecyzowanym wyszukiwaniu, nie-
zbędne  jest  podanie  dodatkowych  parame-
trów.  Są  to  tzw.  wyrażenia  regularne.  Dzię-
ki nim edytor jest w stanie odnaleźć nie tylko 
podane wyrażenia, ale również wszystkie po-
krewne, które spełniają podane warunki.

Czym jest wyrażenie regularne? Uogól-

niając, najczęściej jest to ciąg znaków okre-
ślający, że inne ciągi znaków spełniają jego 
założenia. Najprymitywniejszą formą takie-
go ciągu jest oczywiście pojedynczy wyraz, 
który  sam  w  sobie  stanowi  określony  ze-
staw. Dla słowa Linux, jedynym pasującym 
ciągiem  będzie  Linux.  W  ten  sam  sposób 
Vim  będzie  analizował  każdy  inny  wyraz, 
podany  jako  ciąg  do  wyszukania.  Można 
jednak  uściślić  parametry  przeszukiwania 
tekstu.  Najpopularniejszymi  parametrami 
są gwiazdka, znak zapytania oraz znak plus. 
Choć  wygląda  to  na  bardzo  skomplikowa-
ne, w rzeczywistości takie nie jest. Mijałoby 
się to z celem developerów, ponieważ celem 
który  im  przyświecał  było  właśnie  uprosz-
czenie pracy z tekstem. Zaczniemy od zna-
ku  gwiazdki  zestawionego  z  danym  cią-
giem. Jeśli umieścimy go np. za literą a (

a*

), 

okaże się, że Vim odnajdzie wszystkie ciągi 

rozpoczynające się tym znakiem. Będzie to 
zarówno  pojedyncza  litera  a,  jak  i  ananas
Istnieje  również  możliwość  łączenia  kilku 
parametrów w jednym poleceniu. Dla zesta-
wienia 

r*z

,  wynikiem  będą  wszystkie  lite-

ry z oraz rz danego ciągu. Znacznie prościej 
wygląda sytuacja z pytajnikiem. Dla zesta-
wienia 

mż?awka

 zostaną znalezione zarówno 

wyraz mżawka, jak i ciąg, w którym znajdu-
je się zbiór awka, np. ławka. W ten sposób 
możemy  wyszukać  określone  zbitki  zbiory 
znaków.  Czasem  jednak  jeden  parametr  to 
zbyt  mało  i  niezbędne  jest  dołączenie  ko-
lejnych.  Do  tego  właśnie  służy  trzecie  ze 
wspomnianych  wyrażeń  regularnych,  czyli 
znak plusa. Jak łatwo się domyśleć powodu-
je on połączenie minimum dwóch ciągów, w 
taki sposób, aby uściślić krąg odnalezionych 
elementów. Dla zbioru aaaabbcc aacc aab-
bcc
 warunek wyszukiwania aa+bbcc zosta-
nie spełniony jedynie dla pierwszego i ostat-
niego ciągu. A gdybyśmy chcieli znaleźć je-
den z dwóch ciągów spełniających określo-
ny warunek? Możemy posłużyć się znakiem 
| ([Shift+\]). Oznacza on, że Vim ma odna-
leźć  wyraz  stojący  przed  nim  lub  za  nim. 
Bardzo  interesujący  efekt  daje  wyszuki-
wanie z użyciem nawiasów kwadratowych. 
Określają one pewną klasę, na bazie której 
znajdowane  są  określone  znaki. W  klasach 
takich litera lub cyfra określają same siebie, 
natomiast minus oznacza zakres całej opera-
cji. Przykładem może być 

[a-d]

 oznaczają-

cy, że szukany znak musi mieścić się w ra-
mach zakresu od a do d, czyli może to być 
zarówno a jak i bc i d. Aby Emacs odnalazł 
znak minusa, należy umieścić go na począt-
ku definiowanej klasy. Dzięki zastosowaniu 
tej  metody  możemy  np.  odnaleźć  wszyst-
kie  samogłoski  w  tekście. Wystarczy  jedy-
nie prosty zapis 

[aeiouyAEIOUY]

. W podob-

ny sposób użytkownik jest w stanie wyszu-
kać niemal każde interesujące go zestawie-
nie znaków. Gdybyśmy chcieli odnaleźć ja-
kiś znak z konkretnego przedziału, do tego 
jeszcze dodać znak minusa oraz samogłoski 
A i U pisane wielką literą, możemy dokonać 
tego za pomocą jednej, nieskomplikowanej 
definicji.  Zaczynamy  oczywiście  od  znaku 
minusa,  następnie  określamy  pozostałe  za-
kresy. W gotowej postaci powinno to wyglą-
dać tak: 

[-f-nAU]

. Efektem końcowym tej 

klasy  będzie  znak  minusa  wraz  z  dowolną 
literą z przedziału od f do n i duża litera A 
lub U. Gdybyśmy jednak chcieli zanegować 
określone  znaki,  posługujemy  się  znakiem 
^, wstawiając go przed zbiór przeznaczony 
do wykluczenia. W ten oto sposób jesteśmy 
w  stanie  wyeliminować  z  wyszukiwania 

Rysunek 2. 

Vim po zastosowaniu wybranego schematu kolorów (tu: impact)

background image

20

Dla początkujących

Vim – konkurent prawie doskonały!

styczeń 2009

21

Dla początkujących

Vim – konkurent prawie doskonały!

www.lpmagazine.org

np.  wszystkie  samogłoski  (

[^aeiouyAEIO-

UY]

).  Dla  wyrażeń  skomplikowanych  bar-

dzo przydatne okazują się nawiasy okrągłe. 
Ich zadaniem jest zespolenie w jedną całość 
określonych fragmentów danego polecenia. 
Doskonale  komponują  się  z  omówionymi 
wcześniej  wyrażeniami  regularnymi  np.  +
Jeżeli napiszemy 

(abcd)+

, Emacs odnajdzie 

wszystkie ciągi abcdabcdabcd itd.

Nie  wspomnieliśmy  jeszcze  o  trzech 

godnych  uwagi  funkcjach.  Bardzo  często 
niezwykle przydatne są nawiasy klamrowe. 
Podobnie jak nawiasy kwadratowe, również 
określają zbiór. Różnica polega na tych, że 
na zewnątrz, czyli poza nawiasem występu-
je zawsze dodatkowy parametr, np. wyraże-
nie 

a{5-10}

 zaowocuje tym, że litera a zo-

stanie  odnaleziona  tylko  wtedy,  jeżeli  bę-
dzie powtórzona od 5 do 10 razy. A co, jeśli 
interesuje  nas  konkretny  znak,  ale  jedynie 
w momencie, jeśli znajduje się on na począt-
ku linii? I na to znajdzie się rada. Wystarczy, 
że przed poszukiwanym znakiem wstawimy 
znany nam już 

^

, czyli tzw. daszek. Dla wy-

rażenia 

^lucas

, zostaną odnalezione słowa 

lucas, ale tylko te, które znajdują się na po-
czątku linii. Analogicznie przeciwnym para-
metrem jest znaczek 

$

, czyli dolar.

Poznaliśmy najpopularniejsze metody wy-

szukiwania w Vimie. Oczywiście bardzo czę-
sto łączy się je w celu uzyskania lepszej efek-
tywności i precyzyjności. Dla początkujących 
użytkowników,  z  całą  pewnością  wystarczą 
przedstawione powyżej.

Wszystko po swojemu

Po zainstalowaniu Vima jest on już w pew-
nym  stopniu  skonfigurowany.  To  jednak 
żadna  przyjemność  korzystać  z  gotow-
ców,  które  nie  zawsze  rozumiemy.  Naj-
lepszą  konfiguracją  programu  jest  ta,  któ-
rą sami stworzymy, ponieważ dopasuje ona 
edytor do naszych potrzeb, np. ustawi kolo-
rowanie dla języka programowania, którego 
używamy. Najlepszym pomysłem jest stwo-
rzenie katalogu Vim w katalogu domowym. 
Dzięki  temu  zachowamy  większy  porzą-
dek,  ponieważ  wszystkie  dodatkowe  pliki 
będą umieszczone w jednym miejscu. Dla-
czego jest to takie ważne? Ponieważ dla Vi-
ma  stworzono  mnóstwo  rozmaitych  dodat-
ków,  w  które  po  pewnym  czasie  zapewne 
każdy  będzie  chciał  wyposażyć  swój  edy-
tor.  Doskonałym  przykładem  jest  cvim,  ale 
o  tym  za  chwilę.  Wróćmy  jednak  do  na-
szego  pliku  konfiguracyjnego.  Kiedy  ma-
my  już  odpowiedni  katalog,  tworzymy  no-
wy plik – vimrc. To właśnie w nim znajdują 
się  wszystkie  ustawienia  dotyczące  wyglą-

du i działania programu. Aby lepiej zrozu-
mieć w jaki sposób można samemu skonfi-
gurować Vima, omówimy przykładowy plik 
konfiguracyjny.

Na  początek  warto  wyłączyć  kompa-

tybilność  ze  starszym  edytorem  Vi.  Dzię-
ki  temu  uzyskamy  kilka  bardzo  przydat-
nych funkcji, takich jak chociażby porusza-
nie  się  po  tekście  za  pomocą  kursora. Aby 
tego  dokonać,  wystarczy  w  pliku  konfigu-
racyjnym  dopisać 

set  nocompatible

.  Te-

raz  najważniejsza  część  dla  każdego  pro-
gramisty.  Ustawimy  kolorowanie  skład-
ni  kodu  (bez  tego  trudno  mówić  o  jakim-
kolwiek komforcie podczas pisania progra-
mów) oraz skróty pozwalające na zapisywa-
nie i kompilowanie kodu za pomocą dwóch 
klawiszy. Zanim jednak przypiszemy okre-
ślony zestaw kolorów, należy włączyć opcję 
syntax  on,  dzięki  której  operacja  ta  będzie 
możliwa. Zestawienie zawierające informa-
cje  o  kolorach  zawsze  zapisane  jest  w  od-
dzielnym pliku z rozszerzeniem *.vim. Na-
szym  zadaniem  jest  jedynie  umieszczenie 
takiego  gotowca  w  katalogach  programu, 
np.  /usr/share/vim/vim71/colors.  Po  zain-
stalowaniu Vima,  w  katalogu  tym  znajduje 
się kilka ciekawych propozycji koloryzują-
cych  składnię.  Warto  poeksperymentować 
i wybrać ten, który nam najlepiej odpowia-
da i przede wszystkim najmniej męczy na-
sze oczy. Do przypisania danego tematu słu-
ży  polecenie: 

colorscheme  impact

,  gdzie 

impact

 jest przykładem gotowego motywu. 

Warto również wspomnieć o możliwości pa-
rowania  nawiasów,  czyli  podświetlania  np. 
otwierającego podczas pisania zamykające-
go.  Efekt  ten  (bardzo  pomocny)  uzyskamy 
dopisując do ~/.vimrc linię 

set showmatch

I gotowe! Od tej pory Vim jest prawie przy-
gotowany  do  programowania.  Dlaczego 
prawie?  Ponieważ  w  tym  momencie,  aby 
skompilować  program  będziemy  musie-
li wpisywać niewygodne polecenia. Można 
jednak temu zaradzić. Jeżeli chcemy kompi-
lować kod napisany w Pascalu, dopisujemy 
dwie  linie,  które  określają  typ  pliku,  kom-
pilator  oraz  skrót,  którego  będziemy  uży-
wać  (Listing.  1). Teraz  wystarczy  nacisnąć 
klawisz  [F6]  aby  Vim  uruchomił  kompila-
tor  dla  Pascala.  W  identyczny  sposób  mo-
żemy  przypisać  skróty  dla  innych  języków 
programowania. A w jaki sposób przypisać 
skrót  np.  [F2]  zapisujący  zmiany  w  pliku? 
Właściwie  jest  to  okrojona  wersja  polece-
nia, które zostało użyte w powyższym przy-
kładzie. W pliku konfiguracyjnym dopisuje-
my 

imap <F2> <C-O>:w<CR>

 oraz 

map <F2> 

:w<CR>

.  Analogicznie  do  tego  przykładu 

można  utworzyć  mnóstwo  innych  użytecz-
nych skrótów, w zależności od tego jakie są 
najczęściej wykorzystywane.

Na  zakończenie  skonfigurujemy  opcje, 

pozwalające  na  sprawdzanie  pisowni.  Zanim 
jednak  do  tego  przejdziemy  należy  zainsta-
lować  pakiet  vim-spellfiles-pl,  który  powi-
nien  znajdować  się  w  większości  dystrybu-
cji. W pliku ~/.vimrc wskazujemy język, któ-
ry  ma  zostać  uwzględniony  podczas  spraw-
dzania oraz skrót uruchamiający sprawdzają-
cy skrypt (Listing. 2).

Vim jest już gotowy do pracy. Aby wczy-

tać nowy plik konfiguracyjny, należy urucho-
mić program z opcją 

-u

, podając po niej ścież-

kę  do  nowych  ustawień.  Oczywiście  moż-
liwości  manipulacji  konfiguracją  edytora  są 
ogromne.  Setki  dodatków  znajdujących  się 
w  Internecie  (np.  http://www.vim.org/scripts/
index.php
) sprawiają, że Vim jest pretenden-
tem do zajęcia pierwszego miejsca na arenie 
najlepszych edytorów na świecie.

Wyrok

Vim  jest  doskonały  rozwiązanie  dla  osób, 
które  wymagają  od  swojego  edytora,  aby 
pracował na najwyższych obrotach nie tracąc 
przy  tym  na  funkcjonalności.  Każda  osoba 
zajmująca się programowaniem już po krót-
kim użytkowaniu zauważy zalety i olbrzymi 
potencjał tego programu. Nie jest to co praw-
da  środowisko  programistyczne,  jednak  po 
niewielkich  modyfikacjach  pliku  konfigura-
cyjnego,  doskonale  może  je  zastąpić.  Do-
datkowym atutem Vima jest jego konfiguro-
walność. To ona sprawia, że popularność te-
go edytora nieustannie rośnie. Jedynym pro-
gramem tego typu, który może zagrozić Vi-
mowi, jest Emacs. Trudno rozstrzygnąć, któ-
ry  z  nich  jest  lepszy,  czy  wygodniejszy.  Są 
to  dwa  całkowicie  odmienne  edytory,  ofe-
rujące jednak te same możliwość. Nie nale-
ży rezygnować z chęci poznawania nowego, 
na  rzecz  pamięciożernych  i  wolnych  środo-
wisk programistycznych. Nauka obsługi Vi-
ma  lub  Emacsa  z  całą  pewnością  zaowocu-
je w przyszłości. Zapoznaj się z tymi edyto-
rami – warto! 

Autor jest dziennikarzem, którego pasją sta-
ło się programowanie (C/C++, Java, Pascal, 
Qt, Gtk+) oraz systemy spod znaku pingwi-
na (Slackware, Debian). 
Kontakt z autorem: 
lucas.ciesielski@gmail.com

O autorze