Artur Pyszczuk's blog...

"I'm not insane. My mother had me tested."
Sheldon Cooper @ The Big Bang Theory
/home/linux/vimtutorial/

VIM Tutorial

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:

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ć :)

  1. 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.

  2. 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.

  3. 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.

  4. 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)

  5. 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'.

    • Szukanie brakujących nawiasów ( (, ), [, ], {, } )(-- NORMAL --):
      • % - 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

  6. Ustawianie opcji (-- NORMAL --):
    • :set ic - ic (Ignore Case) po ustawieniu tej opcji, wyrazy będą przeszukiwane bez względu na wielkość ich liter.
    • :set noic - Wyłącza opcje ic.
    • :set hlsearch - Włącza podświetlenie wyszukiwanego tekstu.
    • :set nohl - Wyłącza podswietlenie wyszukiwanego tekstu.
    • :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.

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

  8. 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.

  9. 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)

  10. 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)

Wiecej informacji na temat programu vim znajdziesz w podreczniku systemowym man.
Wpisujac w konsoli man vim


Some rights reserved 2010 - 2015 Artur Pyszczuk

| Strona Główna | Kontakt |