Artur Pyszczuk's blog...

"'less' is more, but more 'more' than 'more' is, so 'more' is less 'less', so use more 'less' if you want less 'more'"
Slackbook, Chapter 10 Handling Files and Directories
/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 |