W tym tutorialu staram się podać najbardziej podstawowe polecenia używane w VIM'ie, w nagłówkach każdej sekcji w nawiasie podam w jakim trybie trzeba
je wpisywać. Tryby te to: NORMAL, INSERT, VISUAL. Z trybu NORMAL do trybu INSERT przełączamy się poprzez 'i' lub inne z wymienionych klawiszy w sekcji
'Edycja tekstu' -> 'Dodawanie tekstu'.Z trybu NORMAL do trybu VISUAL przełączamy się (oraz wyłączamy tryb VISUAL) poprzez klawisz 'v'. Z trybu INSERT/VISUAL do trybu NORMAL przełączamy się za pomocą klawisza ESC.
ZAŁOŻENIA:
Wiesz co to tryby VIM'a. Jeśli nie, to odsyłam Cię do Wikipedii, albo man vim :)
Wszystkie polecenia zaczynające się od : zakończone są naciśnięciem klawisza ENTER!
W nawiasach < > wpisane są nazwy przycisków klawiatury! (np. <ENTER>, <HOME>, itd.)
Wszystkie te polecenia (oraz dużo dużo więcej) możesz znaleść w dokumentacji, poprostu zebrałem je w jedną całość, w razie gdyby ktoś zapomniał i nie chciało mu się specjalnie szukać :)
Wchodzenie do VIM'a (przez konsole):
vim - Otwiera VIM'a (bez skojarzonego pliku). Podczas zapisu trzeba będzie podać nazwę pliku, patrz :w nazwa poniżej.
vim nazwa.txt - Otwiera VIM'a wraz ze skojarzonym plikiem (użyteczne podczas pisania kodu np w C, php, html, itp., gdy wpiszmy odrazu nazwe pliku i rozszerzenie (np 1.c) oraz gdy opcja kolorowania składni będzie włączona, VIM automatycznie będzie kolorował składnie dla danego typu plików), podczas zapisu wystarczy :w.
vim plik1 plik2 - Otwieranie z powłoki systemowej dwóch plików: plik1, plik2.
vim *.c - Otwieranie z powłoki systemowej wszystkich plików z rozszerzeniem .c.
Wychodzenie z VIM'a (-- NORMAL --):
:q - Zamyka plik pod warunkiem, że nie był zmodyfikowany, jeśli był, patrz niżej.
:q! - Zamyka plik bez zapisywania zmian.
:w - Zapisuje zmiany.
:w nazwa - Zapisuje zmiany do pliku o nazwie 'nazwa'.
:wq - Zapisuje zmiany i zamyka plik.
Gdy edytujemy jeden plik, możemy zapisać i zakończyć używając polecenia :wq i włączyć drugi plik do edycji za pomocą vim plik2, gdzie plik2 to nazwa drugiego pliku. VIM oferuje inne, wygodniejsze rozwiązanie.
:vi plik2, gdzie plik2 to nazwa drugiego pliku. Włączamy to z poziomu vima, edytując plik pierwszy. Jeśli nie zapiszemy zmiań w pliku pierwszym, VIM nas o tym poinformuje.
:vi! plik2, gdzie plik2 to nazwa drugiego pliku. Plik, który aktualnie edytujemy zostanie zamknięty, bez zapisywania ostatnio dokonanych zmian. Oraz zostanie włączony plik2 do edycji.
:e plik2 Działa dokładnie tam samo, jak powyższe polecenie :vi plik2
:view plik2 Działa prawie tak samo jak polecenia wyżej (:vi plik2, :e plik2) z tym, że plik2 zostanie otwarty tylko do odczytu.
Poruszanie się (-- NORMAL --):
h / strzalka w lewo (również -- INSERT --) - lewo
l / strzalka w prawo (również -- INSERT --) - prawo
j / strzalka w dół (również -- INSERT --) - dół
k / strzałka do góry (również -- INSERT --) - góra
0 / <HOME> - Przesuwa kursor na początek
$ / <END> - Przesuwa kursor na koniec
<^> - Przesuwa kursor na pierwszy nie-biały znak, np w zdaniu " Ala ma kota", kursor zostanie ustawiony na literę 'A'
w - Przesuwa kursor na początek następnego wyrazu
e - Przesuwa kursor na koniec następnego wyrazu
b - Przesuwa kursor na początek poprzedniego wyrazu
ge - Przesuwa kursor na koniec poprzedniego wyrazu
gg - Przesuwa kursor do pierwszego wiersza w pliku
G - Przesuwa kursor do ostatniego wiersza w pliku
:n - Przesuwa kursor do wiersza n - tego (:12 - Przesuwa kursor do wiersza 12).
nG - gdzie n to numer wiersza. Działanie takie samo jak :n (np 30G - przeniesie do 30 wiersza)
:$ - To samo co G.
CTRL-G - Pokazuje położenie w pliku i status pliku
CTRL-U - Przesuwa ekran o połowę tekstu do góry.
CTRL-D - Przesuwa ekran o połowę tekstu w dół.
:next - Przechodzi do następnego pliku, pod warunkiem, że plik aktualny nie był zmodyfikowany, jeśli był, VIM pokaże ostrzeżenie.
:previous - Analogicznie do polecenia wyżej, tylko, że przechodzi do poprzedniego pliku.
:wnext - Przechodzi do następnego pliku, oraz zapisuje aktualnie edytowany plik.
:wprevious - Analogicznie do polecenie wyżej, tylko, że przechodzi do poprzedniego pliku.
:next! - Przechodzi do następnego pliku, nie zapisując zmian jakie zostały zrobione w aktualnym pliku.
:previous! - Analogicznie do polecenia wyżej, tylko, że przechodzi do poprzedniego pliku.
:2next - Przesuwa się nie na następny a jeden dalej plik. Analogicznie istnieją opcję w tył, w przód z/bez zapisu.
:args - Pokazuje otwarte pliki, oraz w nawiasach kwadratowych, aktualnie edytowany plik, np. plik1.txt [plik2.txt] plik3.txt
:rewind - Przenosi do pierwszego otwartego pliku (zakladamy, że mamy otwartych kilka plików) nie ważne, który aktualnie plik edytujemy.
:first - To samo co wyżej.
:last - Przenosi do ostatniego otwartego pliku (zakładamym, że mamy otwartych kilka plików) nie ważne, który aktualnie plik edytujemy.
Mnożniki dla ruchu (-- NORMAL --):
Można zastosować mnożnik ruchu, który pozwoli przesunąć kursor o większą ilość wyrazów, np.
2w - Przesuwa kursor na początek 2 wyrazu w prawo (licząc od pozycji kursora).
2e - Przesuwa kursor na koniec 2 wyrazu w prawo (licząc od pozycji kursora).
2b - Przesuwa kursor na początek 2 wyrazu w lewo (licząc od pozycji kursora).
2ge - Przesuwa kursor na koniec 2 wyrazu w lewo (licząc od pozycji kursora). itp, itd.
9k - Przesuwa kursor o 9 pozycji w górę (równoważne z: kkkkkkkkk)
3j - Przesuwa kursor o 3 pozycje w dół (równoważne z: jjj)
5l - Przesuwa kursor o 5 pozycji w prawo (równoważne z: lllll)
2h - Przesuwa kursor o 2 pozycje w lewo (równoważne z: hh)
Edycja tekstu (-- NORMAL --):
Dodawanie tekstu:(-- NORMAL --)
i - Wstawianie tekstu przed kursorem.
a - Wstawianie tekstu za kursorem.
A - Wstawianie tekstu na końcu linii.
o - Wstawianie tekstu do nowej (następnej) linii.
O - Wstawianie tekstu do nowej (poprzedniej) linii.
Mnożniki używane podczas wstawiania tekstu są bardzo użyteczne. Np, jeśli chciałbyś wstawić 10 liter 'A' obok siebie, lub każda w nowym wierszu, oczywiście możesz to wpisywać ręcznie, ale VIM udostępnia mnożniki, tak więc, aby wpisać 10 liter 'A' szybciej, przejdź do trybu NORMAL oraz:
10iA<ESC> - Wstawienie 10 liter 'A' za kursorem
10oFraza<ESC> - Wstawienie 10 wyrazów 'Fraza', każdy w nowej linii. Zauważ, że po naciśnięciu '10o' VIM przechodzi w tryb INSERT, co za tym idzie, wszystko co wpiszesz, po naciśnięciu ESC zostanie skopiowane tyle razy ile podałeś w poleceniu (tutaj 10 razy).
Kopiowanie i wklejanie tekstu (-- NORMAL -- / -- VISUAL --):
y - Operator kopiowania, używać go można w trybie wizualnym (opisany na dole), lub z operatorami ruchu.
yw - Kopiuje jeden wyraz
y3w - Kopiuje 3 wyrazy
:ny - Gdzie n to numer wiersza, np. :30y - Skopiuje wiersz 30.
p - Operator wklejania.
np - Gdzie n to wielokrotność kopiowanego tekstu, np. 10p - Wkleji 10 razy, to co zostało skopiowane.
Łączenie linii (-- NORMAL --):
J - Łaczy 2 linie (kursor trzeba ustawić na najwyższej). Pomiędzy liniami dodaje spacje
5J - Łaczy 5 linii, między każdą dodaje spacje.
Usuwanie tekstu (-- NORMAL --):
x / del - Usuwa znak pod kursorem.
dw - Usunięcie jednego wyrazu do pierwszego znaku nowego wyrazu (innymi słowami: usuwa wyraz i spacje przed następnym wyrazem).
de - Usunięcie jednego wyrazu do ostatniego znaku usuwanego wyrazu (innymi słowami: usuwa tylko wyraz a spacja przed następnym wyrazem zostaje).
d$ - Usunięcie tekstu od kursora do końca linii.
dd - Usunięcie całego wiersza niezależnie od położenia kursora.
Mnożniki: (-- NORMAL --)
Mnożniki dla edycji tekstu działają właściwie tak samo, jak mnożniki ruchu.
d2e - Usunięcie 2 wyrazów.
d2w - Usunięcie 2 wyrazów (różnice pomiędzy de i dw zostały opisane wyżej).
d3d - Usunięcie 3 linii, itp. itd.
Oznaczenie (Mark) (-- NORMAL --):
ma - 'm' to operator zaznaczenia, 'a' to tak jakby miejsce zaznaczenia. Można wybrać zamiast 'a' litery od a do z. Operator zaznaczenia przydaje się np do usuwania znaczniej ilości bloków tekstu.
'a - Po tym jak zaznaczymy pewne miejsce przez operator 'm', to odwołujemy się do niego poprzez 'a (apostrof a, jak wyżej wspomniano, zamiast a, może być inna litera alfabetu).
d'a - Dzięki takiej konstrukcji, VIM usuwa wszystko od miejsca zaznaczenia (ma) do miejsca, w którym znajduje się kursor
y'a - Dzięki takiej konstrukcji, VIM kopiuje wszystko od miejsca zaznaczenia (ma) do miejsca, w którym znajduje się kursor
:marks - Pokazuje listę wszystkich zaznaczeń.
:marks args - Zamiast 'args' możesz wpisać konretne zaznaczenie, np. a, b, itp., które chcesz zobaczyć. Lub wpisać to polecenie tak jak jest, razem z args.
Cofanie (-- NORMAL --):
u - Cofa skutki ostatniego polecenia
U - Cofa skutki dla całej linii
CTRL-R - Cofa cofnięcia, innymi słowy: Cofnij/Do przodu.
Wstawianie (-- NORMAL --):
p - Wstawia ostatnio usunięte / skopiowane znaki.
Zamienianie (-- NORMAL --):
r - Po naciśnięciu tego klawisza VIM czeka, aż podasz znak, na który ma zamienić wskazywany przez kursor znak.
5ra - Zamienia 5 znaków na prawo od aktualnej pozycji kursora na literę 'a'.
R - Zamienia więcej niż jeden znak, działa na takiej samej zasadzie, jakbyś pisał z wciśniętym insertem (przycisk na klawiaturze, nie tryb pracy VIM'a).
ce - Usuwa wyraz od miejsca wskazywanego przez kursor do końca wyrazu, przechodzi w tryb INSERT i czeka na wprowadzenie wyrazu.
cw - Prawie to samo co ce, różnica jest taka sama jak pomiędzy de i dw.
c$ - Usuwa linie od miejsca wskazywanego przez kursor do końca linii, przechodzi w tryb INSERT i czeka na wprowadzenie wyrazu.
Mnożniki również tu występują. Zasada jest analogiczna: cnw, gdzie n to liczba całkowita (1, 2, ..., n), zamiast w, może być e, $, itp.
c2e - Usuwa 2 wyrazy od miejsca wskazywanego przez kursor do końca 2 wyrazu i przechodzi w tryb INSERT, czeka na wprowadzenie nowych wyrazów.
~ - (tylda) Zamienia znak nad którym znajduje się kursor z dużego na mały i odwrotnie.
10~ - Zmienia wielkość 10 znaków na prawo od miejsca, w który znajduje się kursor.
xp - Przydatne w sytuacji, gdy popełnisz literówkę, np. 'teh' zamiast 'the', ustaw kursor w słowie 'teh' na 'e' i wydaje to polecenie.
Szukaj (-- NORMAL --):
/nazwa_blad<ENTER> - VIM szuka od początku pliku frazy: nazwa_blad
?nazwa_blad<ENTER> - VIM szuka od tyłu pliku frazy: nazwa_blad
/<ENTER> - Znajduje kolejne wystąpienie słowa szukanego, w tym przypadku będzie to nazwa_blad
/^word<ENTER> - Znajduje wyraz 'word' jeśli on zaczyna linię.
/word$<ENTER> - Znajduje wyraz 'word' jeśli on kończy linię.
/c.m<ENTER> - Znajduje słowo zaczynające się na c, drugi znak dowolny a trzeci znak to m.
/xxx\c<ENTER> - Wyszukuje frazę 'xxx' bez uwzględnienia wielkości liter (przełącznik \c).
n - VIM szuka kolejnych wystąpień szukanej frazy od początku do końca.
10n - Szuka dziesiątego wystąpienia szukanej frazy w przód.
N - VIM szuka kolejnych wystąpień szukanej frazy od końca do początku.
10N - Szuka dziesiątego wystąpienia szukanej frazy w tył
/<UP> - <UP> - Strzałka do góry. Przeszukuje historie szukania.
/<DOWN> - <DOWN> - Strzałka w dół. Przeszukuje historie szukania.
CTRL-O - Przenosi kursor w poprzednie wystąpienie szukanej frazy (tam, gdzie byłeś)
CTRL-I - Przenosi kursor w następne wystąpienie szukanej frazy (tam, gdzie byłeś)
fx - Szuka znaku 'x' na prawo od kursora. Ustawia kursor na pierwszym znalezionym znaku 'x'.
5fa - Przeszukiwanie oraz ustawienie kursora na piątej literze 'a' występującej na prawo od miejsca kursora
10f(spacja) - Przesukiwanie oraz ustawienie kursora na 10 spacji występującej na prawo od miejsca kursora
Fi - Szuka znaku 'i' na lewo od kursora. Ustawia kursor na pierwszym znalezionym znaku 'i'
2Fo - Przeszukiwanie oraz ustawianie kursora na drugiej literze 'o' występującej na lewo od miejsca kursora
to - Szuka znaku 'o' na prawo od kursora. Ustawia kursor na znaku poprzedzającym znak 'o'.
To - Szuka znaku 'o' na lewo od kursora. Ustawia kursor na znaku poprzedzającym znak 'o'.
% - Szuka brakującego nawiasu, przenosi do miejsca, w którym występuje zamykający/otwierający brakujący nawias.
Substitute (znajdź i zamień)(-- NORMAL --):
:s/xxx/yyy - Zamienia frazę 'xxx' na 'yyy' w linii, gdzie znajduje się kursor. Zauważ, że polecenie to zamieni tylko jedno wystąpienie frazy 'xxx', co jeśli chcemy zamienić wszystkie wystąpienia tejże frazy w tej linii? odpowiedź niżej.
:s/xxx/yyy/g - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w linii, w której znajduje się kursor.
:s/xxx/yyy/gc - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w lini, w której znajduje się kursor, prosząc za każdym razem o potwierdzenie.
:10s/xxx/yyy - Zamienia frazę 'xxx' na 'yyy' w linii nr. 10 (kursor nie musi być ustawiony w tej linii, polecenie to jest bardziej precyzyjne)
:10s/xxx/yyy/g - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w linii nr. 10
:10s/xxx/yyy/gc - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w linii nr. 10, za każdym razem prosząć o potwierdzenie akcjii.
:%s/xxx/yyy/g - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w całym pliku
:%s/xxx/yyy/gc - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w całym pliku, lecz za każdym razem prosząc o potwierdzenie.
:#,#s/xxx/yyy/g - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' zawierającej się pomiędzy wierszami #, #.
:#,#s/xxx/yyy/gc - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' zawierającej się pomiędzy wierszami #,# za każdym razem prosząc o potwierdzenie
Polecenie zewnętrzne (-- NORMAL --):
:!nazwa_polecenia - powłoka wykona polecenie 'nazwa_polecenia' (np. :!ls -l pokaże listę plików katalogu, w którym jesteśmy).
Wybranie tekstu do zapisu (-- VISUAL --):
v - Przełącza do trybu wizualnego. Możesz używać strzałek do zaznaczenia tekstu i jak już pewnie zobaczyłeś tekst jest podświetlony, ale również możesz używać operatorów ruchu: w (słowo), e (słowo), $ (cała linia od kursora). Wciśnij :, a na dole pojawi się coś takiego: :'<,'>. Wpisz za tym 'w nazwa' (oczywiście bez ''), gdzie nazwa to nieistniejącego pliku. Mniej więcej powinno wyglądać to tak: :'<,'>w nazwa. Teraz, aby sprawdzić, czy zaznaczony tekst zapisał się do nowego pliku wystarczy wpisać :!cat nazwa
Filtrowanie (-- NORMAL --):
!20Gsort<ENTER> - Jeśli ustawimy 20 wierszy, w każdym będzie jakaś liczba, to po wydaniu tego polecenia, VIM posortuje je rosnąco.
!Gsort<ENTER> - Posortuje wiersze od miejsca, w którym znajduje się kursor do końca pliku.
!!ls -l - Wstawi listę znajdujących się plików w katalogu. Dla użytkowników MS Windows: !!dir
!!date - Wstawi date systemową.
Wstawienie i łączenie plików (-- NORMAL --):
:r nazwa - Gdzie nazwa to nazwa pliku wstawianego. Można również wstawić zawartość polecenia zewnętrznego, tj. :r !ls -l
Ustawianie opcji (-- NORMAL --):
:set ic - ic (Ignore Case) po ustawieniu tej opcji, wyrazy będą przeszukiwane bez względu na wielkość ich liter.
:set incsearch - Włącza częściowe dopasowanie tekstu podczas szukania.
:set noxxx - Wyłącza opcję xxx
:set autowrite - Włącza opcje autozapisywania.
:set noautowrite - Wyłącza opcję autozapisywania.
Używanie tabulacji (-- NORMAL --)
<< - (nawias trójkątny) Przesuwa linię w lewo, w której znajduje się kursor o wartość tabulacji.
>> - Przesuwa linię w prawo, w której znajduje się kursor o wartość tabulacji.
#,#> - #,# - Numery wierszy. Przesuwa w prawo o wartość tabulacji wiersze podane jako argumenty.
#,#<< - #,# - Numery wierszy. Przesuwa w lewo o 2 wartości tabulacji wiersze podane jako argumenty.
Używanie Makr (-- NORMAL --)
Posiadasz taką o to listę:
stdio.h
stdlib.h
sys/types.h
sys/stat.h
unistd.h
fcntl.h
errno.h
I chcesz, żeby wyglądała ona tak (za pomocą jednego polecenia):
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
Wykonuj pokolei wypunktowane poniżej polecenia, ale zanim to zrobisz przenieś kursor do pierwszego znaku w pierwszej linii:
qa - Zaczyna nagrywać makro, przypisując je literze a. Litera musi być z przedziału <a,z>
^ - Przenosi na początek linii
i#include <<ESC> - Wstawia napis #include < na początku linii. (pamiętaj, że to <ESC> to jest przycisk na klawiaturze!)
$ - Przechodzi na koniec linii
a><ESC> - Dodaje znak: > na końcu linii.
j - Przechodzi do następnej linii
q - Kończy nagrywanie makra
Teraz, żeby się odwołać do tego makra, przenieś kursor na pierwszy znak w pierwszej linii i w trybie normal wydaj polecenie: @a. Żeby to zrobić dla wszystkich naraz wpisz: 7@a.
Dwuznaki (Digraphs) (-- NORMAL -- / -- INSERT --):
:digraphs - Wyświetla listę dostępnych znaków
CTRL-Kxy - (Tryb INSERT), x, y - oznaczają znaki, które można odczytać z :digraphs. Dajmy na to przykład, żeby otrzymać znak: Ц (C= Ц 1062, Informacja z :digraphs) musimy nacisnąć CTRL-K i wpisać C= (dwa znaki: C, =)
CTRL-KD% - Analogicznie da inny znak, w tym wypadku ten znak to: Ђ. (Informacje z digraphs: D% Ђ 1026)
Okna (-- NORMAL --)
:split - Polecenie to dzieli okno VIMa na 2 okna, w których edytuje ten sam plik.
CTRL-Ww / CTRL-W CTRL-W - Przełącza okna
CTRL-Wj - Przełącza z górnego okienka do dolnego
CTRL-Wk - Przełącza z dolnego okienka do górnego
ZZ / :q / CTRL-Wc - Zamyka jedno okienko
:split plik2.txt - Otwiera w drugim okienki plik: plik2.txt
:15 split plik2.txt - Otwiera plik2.txt w drugim oknie o rozmiarze 15 wierszy
:new - Prawie to samo co split, tylko, że otwiera nowy plik, w oknie.
:10 new - Otwiera nowy plik w oknie o rozmiarze 10 wierszy.
:sview plik2.txt - Otwiera plik2.txt w nowym oknie, tylko do odczytu.
10 sview plik2.txt - Otwiera plik2.txt w nowym oknie o rozmiarze 10 wierszy, tylko do odczytu.
10CTRL-W+ - Powiększa okno o 10 wierszy.
10CTRL-W- - Pomniejsza okno o 10 wierszy.
12CTRL-W_ - Ustawia rozmiar okna na 12 wierszy.
CTRL-W_ - Ustawia okno na nawiększą możliwość
CTRL-W= - Ustawia okna na takie same rozmiary (albo bardzo zbliżone)
VIM Tutorial, ver. 0.2.
Materiał udostępniany na licencji COPYLEFT
W razie jakichkolwiek modyfikacji, prosiłbym o przesłanie zmodyfikowanej wersji na adres apyszczuk@gmail.com
Wersja tekstowa do pobrania dostępna jest tutaj
Zapraszam na stronę http://www.arturpyszczuk.pl