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:
- Wiesz co to tryby VIM’a. Jeśli nie, to odsyłam Cię do Wikipedii, albo man vim :)
- Wszystkie polecenia zaczynające się od dwukropka (:) 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’.
- 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
- Dodawanie tekstu:(– NORMAL –)
- 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.
- 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
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <errno.h>
- 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
I chcesz, żeby wyglądała ona tak (za pomocą jednego polecenia):
Wykonuj pokolei wypunktowane poniżej polecenia, ale zanim to zrobisz przenieś kursor do pierwszego znaku w pierwszej linii:
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)
Wpisujac w konsoli man vim