poniedziałek, 5 lipca 2010

Edytor VI



VIM TUTORIAL

%s/xxx/yyy/g - zmień wszystko w pliku
np.
/mrtg i potem wcisnij "n" - szukaj następne
:set number - numerowanie lini
DG - przeskocz do konca pliku
dG - usun wszystko

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

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 / - Przesuwa kursor na początek
* $ / - 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 --)
o i - Wstawianie tekstu przed kursorem.
o a - Wstawianie tekstu za kursorem.
o A - Wstawianie tekstu na końcu linii.
o o - Wstawianie tekstu do nowej (następnej) linii.
o 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:
o 10iA - Wstawienie 10 liter 'A' za kursorem
o 10oFraza - 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 --):
o y - Operator kopiowania, używać go można w trybie wizualnym (opisany na dole), lub z operatorami ruchu.
o yw - Kopiuje jeden wyraz
o y3w - Kopiuje 3 wyrazy
o :ny - Gdzie n to numer wiersza, np. :30y - Skopiuje wiersz 30.
o p - Operator wklejania.
o np - Gdzie n to wielokrotność kopiowanego tekstu, np. 10p - Wkleji 10 razy, to co zostało skopiowane.
* Łączenie linii (-- NORMAL --):
o J - Łaczy 2 linie (kursor trzeba ustawić na najwyższej). Pomiędzy liniami dodaje spacje
o 5J - Łaczy 5 linii, między każdą dodaje spacje.
* Usuwanie tekstu (-- NORMAL --):
o x / del - Usuwa znak pod kursorem.
o dw - Usunięcie jednego wyrazu do pierwszego znaku nowego wyrazu (innymi słowami: usuwa wyraz i spacje przed następnym wyrazem).
o de - Usunięcie jednego wyrazu do ostatniego znaku usuwanego wyrazu (innymi słowami: usuwa tylko wyraz a spacja przed następnym wyrazem zostaje).
o d$ - Usunięcie tekstu od kursora do końca linii.
o dd - Usunięcie całego wiersza niezależnie od położenia kursora.
* Mnożniki: (-- NORMAL --)
o Mnożniki dla edycji tekstu działają właściwie tak samo, jak mnożniki ruchu.
o d2e - Usunięcie 2 wyrazów.
o d2w - Usunięcie 2 wyrazów (różnice pomiędzy de i dw zostały opisane wyżej).
o d3d - Usunięcie 3 linii, itp. itd.
* Oznaczenie (Mark) (-- NORMAL --):
o 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.
o '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).
o d'a - Dzięki takiej konstrukcji, VIM usuwa wszystko od miejsca zaznaczenia (ma) do miejsca, w którym znajduje się kursor
o y'a - Dzięki takiej konstrukcji, VIM kopiuje wszystko od miejsca zaznaczenia (ma) do miejsca, w którym znajduje się kursor
o :marks - Pokazuje listę wszystkich zaznaczeń.
o :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 --):
o u - Cofa skutki ostatniego polecenia
o U - Cofa skutki dla całej linii
o CTRL-R - Cofa cofnięcia, innymi słowy: Cofnij/Do przodu.
* Wstawianie (-- NORMAL --):
o p - Wstawia ostatnio usunięte / skopiowane znaki.
* Zamienianie (-- NORMAL --):
o r - Po naciśnięciu tego klawisza VIM czeka, aż podasz znak, na który ma zamienić wskazywany przez kursor znak.
o 5ra - Zamienia 5 znaków na prawo od aktualnej pozycji kursora na literę 'a'.
o 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).
o ce - Usuwa wyraz od miejsca wskazywanego przez kursor do końca wyrazu, przechodzi w tryb INSERT i czeka na wprowadzenie wyrazu.
o cw - Prawie to samo co ce, różnica jest taka sama jak pomiędzy de i dw.
o c$ - Usuwa linie od miejsca wskazywanego przez kursor do końca linii, przechodzi w tryb INSERT i czeka na wprowadzenie wyrazu.
o 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.
o 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.
o ~ - (tylda) Zamienia znak nad którym znajduje się kursor z dużego na mały i odwrotnie.
o 10~ - Zmienia wielkość 10 znaków na prawo od miejsca, w który znajduje się kursor.
o 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 --):
o /nazwa_blad - VIM szuka od początku pliku frazy: nazwa_blad
o ?nazwa_blad - VIM szuka od tyłu pliku frazy: nazwa_blad
o / - Znajduje kolejne wystąpienie słowa szukanego, w tym przypadku będzie to nazwa_blad
o /^word - Znajduje wyraz 'word' jeśli on zaczyna linię.
o /word$ - Znajduje wyraz 'word' jeśli on kończy linię.
o /c.m - Znajduje słowo zaczynające się na c, drugi znak dowolny a trzeci znak to m.
o /xxx\c - Wyszukuje frazę 'xxx' bez uwzględnienia wielkości liter (przełącznik \c).
o n - VIM szuka kolejnych wystąpień szukanej frazy od początku do końca.
o 10n - Szuka dziesiątego wystąpienia szukanej frazy w przód.
o N - VIM szuka kolejnych wystąpień szukanej frazy od końca do początku.
o 10N - Szuka dziesiątego wystąpienia szukanej frazy w tył
o / - - Strzałka do góry. Przeszukuje historie szukania.
o / - - Strzałka w dół. Przeszukuje historie szukania.
o CTRL-O - Przenosi kursor w poprzednie wystąpienie szukanej frazy (tam, gdzie byłeś)
o CTRL-I - Przenosi kursor w następne wystąpienie szukanej frazy (tam, gdzie byłeś)
o fx - Szuka znaku 'x' na prawo od kursora. Ustawia kursor na pierwszym znalezionym znaku 'x'.
o 5fa - Przeszukiwanie oraz ustawienie kursora na piątej literze 'a' występującej na prawo od miejsca kursora
o 10f(spacja) - Przesukiwanie oraz ustawienie kursora na 10 spacji występującej na prawo od miejsca kursora
o Fi - Szuka znaku 'i' na lewo od kursora. Ustawia kursor na pierwszym znalezionym znaku 'i'
o 2Fo - Przeszukiwanie oraz ustawianie kursora na drugiej literze 'o' występującej na lewo od miejsca kursora
o to - Szuka znaku 'o' na prawo od kursora. Ustawia kursor na znaku poprzedzającym znak 'o'.
o To - Szuka znaku 'o' na lewo od kursora. Ustawia kursor na znaku poprzedzającym znak 'o'.
* Szukanie brakujących nawiasów ( (, ), [, ], {, } )(-- NORMAL --):
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 --):
o :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.
o :s/xxx/yyy/g - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w linii, w której znajduje się kursor.
o :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.
o :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)
o :10s/xxx/yyy/g - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w linii nr. 10
o :10s/xxx/yyy/gc - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w linii nr. 10, za każdym razem prosząć o potwierdzenie akcjii.
o :%s/xxx/yyy/g - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' w całym pliku
o :%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.
o :#,#s/xxx/yyy/g - Zamienia wszystkie wystąpienia frazy 'xxx' na 'yyy' zawierającej się pomiędzy wierszami #, #.
o :#,#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 --):
o :!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 --):
o 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 --):
o !20Gsort - Jeśli ustawimy 20 wierszy, w każdym będzie jakaś liczba, to po wydaniu tego polecenia, VIM posortuje je rosnąco.
o !Gsort - Posortuje wiersze od miejsca, w którym znajduje się kursor do końca pliku.
o !!ls -l - Wstawi listę znajdujących się plików w katalogu. Dla użytkowników MS Windows: !!dir
o !!date - Wstawi date systemową.
* Wstawienie i łączenie plików (-- NORMAL --):
o :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
* #include
* #include
* #include
* #include
* #include
* #include
* 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
* ^ - Przenosi na początek linii
* i#include < - Wstawia napis #include < na początku linii. (pamiętaj, że to to jest przycisk na klawiaturze!)
* $ - Przechodzi na koniec linii
* a> - 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)

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

--------------------------------------------------------------------------------------------------



Od redakcji: Tomasz Wendlandt obiecał nam kiedyś napisanie tekstów zachęcających Emacsowców do przestawienia się na jakiś ciekawszy edytor. Dziś w swojej skrzynce ujrzałem pierwsze jego dzieło (wersja przed htmlowaniem, które mogło wprowadzić jakiś błąd, dostępna jest tutaj). Zapraszam do lektury...

vim (Vi IMproved) jest znanym edytorem ekranowym. Używa go spora grupa ludzi, a jeszcze większa pewnie unika. Ten artykuł ma na celu zachęcić nowych użytkowników do korzystania z vima i nauczyć ich obsługi tego edytora. Należy pamiętać, że vim to nie to samo co vi. Ten pierwszy zawiera kilka ulepszeń w stosunku do vi, są to między innymi:

* wielopoziomowe cofanie ostatniej operacji
* kilkakrotne powtarzanie danego polecenia
* możliwość korzystania z kursorów w trybie wstawiania
* podświetlanie składni

Powyżej wypisałem tylko kilka różnic pomiędzy vim, a vi, jeżeli chcesz wiedzieć więcej wpisz:

:h diff

podczas korzystania z vima w trybie poleceń. Większość kodu edytora napisał Bram Moolenaar, jednak pełną listę ludzi zaangażowanych w jego tworzenie uzyskasz po wpisaniu:

:h credits

Obecnie vi jest najczęściej dowiązaniem symbolicznym do vim.

Pracę możemy rozpocząć na kilka sposobów:

$ vi

co spowoduje, że edytor otworzy się z pustym buforem, lub edytując wybrany plik:

$ vi plik_do_edycji

Możemy też otworzyć plik z kursorem ustawionym na n-tym wierszu:

$ vi +5 plik_do_edycji

W takim przypadku edytor otworzy wybrany przez nas plik, a kursor ustawi na 5 wierszu. Istnieje również możliwość uruchomienia vima z kursorem ustawionym na pierwszym wierszu, w którym znajduje się szukany przez nas wyraz:

$ vi +/szukany_wyraz plik_do_edycji

Po otwarciu pliku możesz zauważyć pojedyńcze tyldy (~), oznaczają one nic innego jak puste linie. Do poruszania po edytorze możemy używać kursorów, klawiszy PageUp, PageDown, Home (do przejścia na początek wiersza) oraz End (do przejścia na koniec wiersza). Klawisze te posiadają swoje odpowiedniki w przypadku, gdy na naszym terminalu ich nie będzie.


k
h l
j


Tak jak widać wyżej: k - w górę, j - w dół, h - w lewo, l - w prawo. Poza tym istnieje kilka możliwości przewinięcia ekranu:

Ctrl-b - przewinięcie do góry o jeden ekran, tak jak PageUp
Ctrl-f - przewinięcie w dół o jeden ekran, tak jak PageDown
Ctrl-u - przewinięcie do góry o pół ekranu
Ctrl-d - przewinięcie w dół o pół ekranu
Ctrl-y - przewinięcie do góry o jeden wiersz
Ctrl-e - przewinięcie w dół o jeden wiersz

W - do przodu o jedno słowo
B - do tyłu o jedno słowo
E - na koniec słowa
( - na początek bieżącego zdania
) - na początek następnego zdania
{ - na początek bieżącego akapitu
} - na początek następnego akapitu

W tym miejscu należy wspomnieć o dwóch trybach w jakich pracuje się użyjawiąc vima. Tryb poleceń, w którym znajduje się edytor zaraz po jego uruchomieniu, oraz tryb edycji, w który musimy przełączyć edytor, jeżeli chcemy dodać nowy tekst. Jaka jest różnica pomiędzy nimi? Jak sama nazwa wskazuje tryb edycji służy do wpisywania tekstu i niczego innego. Natomiast tryb poleceń pozwala nam na zabawę z tekstem, dzięki niemu możemy wycinać i wklejać tekst, wywołać polecenie powłoki, skorzystać z edytora wierszowego ex itd. Wystarczy pamiętać, o tym że w trybie edycji po naciśnięciu jakiegoś znaku na klawiaturze pojawi się on na monitorze, a w trybie poleceń nie. Dalsze polecenia dotyczą trybu poleceń i w nim należy je wpisywać, no chyba że podano inaczej ;-). Esc pozwala powrócić z trybu edycji do trybu poleceń.

dopisywanie, nadpisywanie i - wstawia znak przed kursorem
I - wstawia znak na początku wiersza
a - dopisuje znak za kursorem
A - dopisuje znak na końcu wiersza
r - nadpisuje jeden znak w miejscu, w którym znajduje się kursor, np. rx zastępuje znak pod którym znajduje się kursor znakiem x
R - nadpisuje tekst w całym wierszu począwszy od miejsca, w którym znajduje się kursor
o - wstawia nowy wiersz poniżej obecnego
O - wstawia nowy wiersz powyżej obecnego
s - usuwa znak, pod którym znajduje się kursor i rozpoczyna dopisywanie przed nim
S - usuwa zawartość obecnego wiersza i na jego początku rozpoczyna dopisywanie
C - usuwa zawartość wiersza od miejsca, w którym znajduje się kursor, do jego końca i rozpoczyna dopisywanie

usuwanie, kopiowanie, łączenie
x - usuwa znak pod którym znajduje się kursor
X - usuwa znak na lewo od pozycji kursora
J - łączy obency wiersz z następującym po nim
gqq - formatuje aktualną linię
gqj - formatuje obecny i następny wers, przydatne przy odpisywaniu na listy
gqap - formatuje paragraf
dd - usuwa obecny wiersz
D - usuwa tekst od miejsca, w którym znajduje się kursor do końca wiersza
Y lub yy - kopiuje bieżący wiersz do bufora
Ctrl-v - pozwala zaznaczyć dowolny blok tekstu, który później można usunąć lub skopiować

Usunięty tekst za pomocą D, dd lub x można łatwo przywrócić, ponieważ znajduje się on w buforze. Dlatego skopiowanie (yy,Y) lub usunięcie tekstu (dd,D,x) możemy później wstawić:
p - wstawia tekst z bufora za kursorem lub poniżej obecnego wiersza
P - wstawia tekst z bufora przed kursorem lub powyżej obecnego wiersza

Jeżeli usunęliśmy wiersz wówczas zostanie on wstawiony powyżej lub poniżej obecnego wiersza (w zależności czy ujrzyjemy p lub P). Natomiast usunięcie znaku, słowa lub kilku słów powoduje, że zostaną one wstawione przed lub za kursorem (znów w zależności czy ujrzyjemy p lub P).

szukanie
/foo [enter] - szuka łańcucha foo za kursorem i gdy go znajdzie podświetla
?foo [enter] - szuka łańcucha foo przed kursorem i gdy go znajdzie podświetla
n - powtarza szukanie ostatniego łańcucha do przodu
N - powtarza szukanie ostatniego łańcucha do tyłu
% - szuka pary dla obecnego nawiasu (może być zwykły, kwadratowy lub klamrowy)
/foo/+2 - przejście do 2-go wiersza po foo
?foo?-2 - przejście do 2-go wiersza przed foo

Podczas szukania można skorzystać z wyrażen regularnych, oto kilka z nich:
^ - początek wersu
$ - koniec wersu
\< - początek słowa
\> - koniec słowa
[a-z] - dowolny znak z tego zakresu
[^a-z] - dowolny znak spoza tego zakresu
. - dowolny znak

przykłady:
/^foo - szuka wersów zaczynających się literami foo
/\
/[^foo]$ - szuka wersów nie kończących się literami foo

zaznaczanie, numerowanie
m - oznaczenie bieżącej pozycji np. mx oznaczenie bierzącej pozycji znakiem x
`x - przejście kursora do znacznika x
'x - przejście kursora do początku wiersza ze znacznikiem x
Ctrl-g - wyświetlenie numeru bieżącego wiersza oraz kolumny
gg - przejście do pierwszego wersu w pliku
G - przejście do ostatniego wersu w pliku
5G - przejście do 5-tego wersu w pliku
ga - podaje wartość znaku pod, którym znajduje się kursor w systemie dziesiętnym szesnastkowym i ósemkowym

cofanie, powtarzanie, zapisywanie i kończenie pracy
u - cofa ostatnią operację
Ctrl-r - przywraca cofniętą operację
. - powtarza ostatnią operację
3dd - usunięcie trzech wierszy
ZZ - opuszcza edytor z zapisaniem zmian
ZQ - opuszcza edytor bez zapisania zmian

ex
Ex jest edytorem wierszowym, można wywołać go z linii poleceń lub wewnątrz vi. Używając edytora ex z poziomu vi musimy poprzedzić wydawane polecenia dwukropkiem a następnie zatwierdzić je klawiszem Enter. Można również w łatwy sposób przejść z vi do ex za pomocą Q. Powrót do vi następuje po wpisaniu visual.
:!polecenie - wykonanie polecenia w powłoce np: :!ls wyświetla zawartość obecnego katalogu
:q - zakończenie pracy
:q! - zakończenie pracy bez zapisania dokonanych zmian
:w - zapisanie do aktualnego pliku
:w 2 - zapisanie do pliku o nazwie 2
:w >>2 - dopisanie do pliku o nazwie 2
:wq - zapisanie i zakończenie pracy
:e 2 - rozpoczęcie edycji pliku o nazwie 2
:r 2 - skopiowanie zawartości pliku o nazwie 2 do edytowanego pliku
:sh - utworzenie nowej powłoki, po zakończeniu pracy z powłoką następuje przejście do wcześniej edytowanego pliku

.vimrc
set tabstop=4 - szerokość tabulacji na 4 kolumny
set tw=76 - łamanie wersu za 76 kolumną, równoważne set textwidth=76
set showmode - w trybie edycji wyświetla -- INSERT --, w dole ekranu
set hlsearch - podświetla wyszukany łancuch

map G?>\ \=--\ \=$d/^[^>]

Dodanie tego do .vimrc powoduje, że podczas edycji listu możemy przy pomocy klawisza F1 wycinać sygnaturki.

Czasami bywa tak, że edytujemy dwa pliki podczas jednej sesji

$ vi plik1 plik2

wtedy warto dodać:
map :previous
map :next


Dzięki F2 i F3 możemy w łatwy sposób przechodzić między edytowanymi plikami. Możemy też stosować skróty na przykład dodanie lini:

ab SIGNAT Tomasz Wendlandt

do .vimrc spowoduje, że tekst SIGNAT zostanie zamieniony na Tomasz Wendlandt , w trybie edycji. Wszystkie makra i ustawienia można wpisać w vimie wystarczy dodać : przed poleceniem np:

:map :previous
:ab SIGNAT Tomasz Wendlandt
:set showmode

Możemy też wylistować je wszystkie:
:map
:ab
:set


lub też usunąć:

:unmap
:unab SIGNAT
:set noshowmode


zamiana wyszukanego łancucha znaków
:s/szukany/zmiana - zamieni pierwszy napotkany łańcuch szukany na zmiana w danym wersie
:%s/szukany/zmiana - zamieni każdy pierwszy w wersie łańcuch szukany na zmiana w całym pliku
:s/szukany/zmiana/g - zamieni wszystkie łańcuchy szukany na zmiana w danym wersie
:s/szukany/zmiana/gc - to samo co wyżej plus pytanie o potwierdzenie zamiany
:%s/szukany/zmiana/g - zamieni wszystkie łańcuchy szukany na zmiana w całym pliku
:%s/szukany/zmiana/gc - to samo co wyżej plus pytanie o potwierdzenie zamiany

Można też stosować wyrażenia . $ oraz znaczniki:

:.,+5s/szukany/zamiana/g - zamienia łańcuch szukany, łańcuchem zamiana od obecnego wersa, aż do 5 kolejnych po nim
:.,'xs/szukany/zamiana/g - zamienia łańcuch szukany, łańcuchem zamiana od obecnego wersa, aż do oznaczonego znacznikiem x


na koniec
Edytor vim posiada spore możliwości, w tym dokumencie opisane zostasły tylko najważniejsze. Warto też pamiętać o gvim'ie, graficznej wersji vim'a. Więcej o edytorze można dowiedzięc się z:


$ man vim
$ vimtutor
/usr/share/vim
:help


Poza tym polecam te adresy:

http://www.vim.org - strona domowa projektu
http://vim.sourceforge.net - strona z wieloma przydatnymi tipsami i skryptami
http://www.moolenaar.net - strona twórcy vima

Brak komentarzy:

Prześlij komentarz