VIM – podstawowe komendy

Ktoś może pomyśleć – „po co mi znajomość VIMa, przecież jest milion przyjaźniejszych dla użytkownika edytorów”. Zgodzę się, po części – jest wiele UNIX-owych edytorów tekstu posiadających interface dużo przyjaźniejszy jednak żaden z nich nie ma takich dużych możliwości jak stary poczciwy VIM, nie znam innego edytora, który z równie sprawnie i szybko edytuje pliki 200 megowe. Zresztą na niektórych serwerach (wierzcie mi, że są takie) VIM jest jedynym dostępnym edytorem tekstu.

Jako, że kiedyś sam szukałem prostego manuala z podstawowymi komedami VIMa to może komuś się przyda:

poruszanie się po dokumencie
+ – przejście do następnej linii
– – przejście do poprzedniej linii
0 – przejście do początku linii
^ – przejście do pierwszego znaku nie będącego znakiem białym w linii
$ – przejście na koniec linii
n| – przejście do kolumny n linii
} – przejście do następnego paragrafu
{ – przejście do poprzedniego paragrafu
% – przejście do otwarcia / zamknięcia nawiasu (),[],<>,{}
G – przejście na koniec dokumentu
nG – przejście do linii <n>

zapisywanie
:x lub :wq – zapisywanie pliku i wyjście
:q! – wyjście bez zapisania zmian
:w plik – zapisanie w nowym pliku „plik”

wyszukiwanie
/ STRING – szukanie do przodu
? STRING – szukanie do tyłu
n – przejście do następnego znalezionego elementu
SHIFT+n przejście do poprzedniego znalezionego elementu

kasowanie tekstu
x – kasowanie bieżącego znaku
nx – kasowanie znaków
dw – kasowanie bieżącego wyrazu
dd – kasowanie bieżącej linii
ndd – kasowanie <n> linii
D – kasowanie znaków od kursora do końca bieżącej lini
dG – kasowanie wszystkiego od kursora do końca dokumentu

edycja tekstu
o – wstawienie nowej linii poniżej bieżącej
O – wstawienie nowej linii powyżej bieżącej
i – rozpoczęcie edycji przed kursorem
I – rozpoczęcie edycji na początku bieżącej linii
a – rozpoczęcie edycji po kursorze
A – rozpoczęcie edycji na końcu bieżącej linii
cw – zastąpienie wyrazu (bieżący wyraz się kasuje, kursor ustawia się na jego początku)
cc – zastąpienie linii (bieżąca linia się kasuje, kursor ustawia się na jej początku)

kopiowanie i wstawianie
yw – kopiuj do schowka bieżący wyraz
yb – kopiuj do schowka poprzedni wyraz
Y – kopiuj do schowka bieżącą linię
nY – kopiuj następne <n> linii
p – wklej skopiowany tekst za kursorem
P – wklej skopiowany tekst przed kursorem

inne
u – cofnięcie ostatniej zmiany
U – cofnięcie wszystkich zmian w bieżącej linii
. – powtórzenie ostatniej komendy
SHIFT+# – wyszukiwanie wyrażeń pasujących do zaznaczonego
SHIFT+% – przejście do kolejnego nawiasu () lub {}
~ – zmiana litery z małej na dużą i na odwrót

zastępowanie
Można używać wyrażeń regularnych PERL- kompatybilnych

zastąpienie stringu OLD stringiem NEW
:s/OLD/NEW – pierwszego wystąpienia w bieżącej linii
:s/OLD/NEW/g – każdego wystąpienia w linii
:#,#s/OLD/NEW/g – pomiędzy liniami # i #
:%s/OLD/NEW/g – w całym dokumencie
:%s/\([0-9]\+\) OLD/\1 NEW/g – w całym dokumencie z użyciem backreferencji (trzeba poprzez „\” wyescapować znaki specjalne, następnie poprzez „\1” wstawić wyciągnięte dane)

praca z danymi zewnętrznymi
Vim umożliwia wywołanie dowolnej komendy z poziomu edytora, można także odczytywać efekt jej działania

:! komenda – wywołanie 'komenda’ w shellu i wyświetlenie jej wyniku, komenda może być każde polecenie unixowe
:r ! komenda – wywołanie 'komenda’ w shellu i wczytanie wyniku jej działania do edytora
:r ! last | grep user – na wywoływanych komendach można robić dowolne operacje przed wczytaniem do edytora
:r textfile – wczytanie źródła pliku 'textfile’ do edytora
:r ! w3m http://en.wikipedia.org/wiki/Vi -dump – wczytanie do edytora zawartości strony internetowej

Praca z zakładkami
:tabs – wyświetlenie informacjie o aktualnie otwartych zakładkach
:tabnew – otwarcie pustej zakładki
:tabnew FILE – otwarcie pliku FILE w nowej zakładce
:tabf FILE – otwarcie pliku w nowej zakładce
:tabn – przejście do następnej zakładki
gt – przejście do następnej zakładki (działa w trybie NORMAL)
gT – przejście do poprzedniej zakładki (działa w trybie NORMAL)
n gt – przejście do zakładki o numerze n (działa w trybie NORMAL)
n gT – cofnięcie się do zakładki znajdującej się w odległości n od aktualnej (działa w trybie NORMAL)
:tabp – przejście do poprzedniej zakładki
:tabl – przejście do ostatniej zakładki
:tabc – zamknięcie aktualnej zakładki, gdy jest jedna karta, to nie będzie zamknięta
:tabo – zamknięcie wszystkich zakładek oprócz tej która jest aktualnie używana
:tabd KOMENDA – wykonuje komendę na wszystkich otwartych zakładkach

Polecam rewelacyjny VIM Tutorial.

Możliwe problemy i ich rozwiązania

  • Jeżeli przy wklejaniu do konsoli kodu z tabulacjami/spacjami tworzą się niechciane wcięcia należy użyć polecenia „:set paste” następnie wkleić kod i ponownie ustawić „:set nopaste”, więcej o wklejaniu na w tym temacie stackoverflow.

Zobacz też A vim Tutorial and Primer.

14 komentarzy do “VIM – podstawowe komendy”

  1. klasa art. Dodalbym jeszcze info o zakladkach w vim tzn. :tabnew i przelaczanie sie za pomoca :gt, oraz dodalbym info na temat znacznikow

  2. Każdą zmianę można cofnąć za pomocą u , a każde cofnięcie dzięki Ctrl + r. Jak zwykle, dozwolone jest łączenie polecenia. Na przykład cofnięcie ostatnich 20 zmian zmian to 20u.

    Skróty klawiaturowe
    Ctrl + p
    Ctrl + n
    uzupełniają pisany wyraz, na podstawie wyrażeń znajdujących się w pliku (podobnie jak Tab w shellu). Jeśli pasuje więcej niż jeden wyraz, wyświetlana jest lista propozycji

    Okno główne można dowolnie dzielić w pionie i poziomie za pomocą komend
    :split lub :vsplit, lub Ctrl + w + s i Ctrl + w + v.
    Do przechodzenia między oknami służy Ctrl + w + , gdzie kierunek to oczywiście h, j, k lub l.
    Aby skoczyć do kolejnego okna w kolejce, użyj Ctrl + w + w. W ten prosty sposób można w jednym edytorze otworzyć i przeglądać wiele plików na raz.

  3. Kolejnym ułatwieniem o którym warto pamiętać to zakładki. Jeśli chcemy zapamiętać jakieś miejsce w kodzie, wystarczy ze je zaznaczymy za pomocą m, na przykład mk. Teraz, za pomocą 'k możemy wrócić do wiersza oznaczonego literą k.

  4. Bardzo pomocny materiał.

    Jednak również jasne wyjaśnienie dlaczego Linux nigdy nie wygra w równej i uczciwej walce z systemami Microsoft.

    trzeba być po prostu nieźle pojebanym żeby znać na pamięć te wszystkie komendy.
    A obsługa czegoś tak banalnego jak edytor tekstu w „dos mode” z manualem przy wykonywaniu najprostszych czynności które w systemie Windows wykona każdy kretyn jak przejścia do kolejnej linii czy kopiowaniu jednego znaku to bez uprzedzeń obiektywnie patrząc (bez opowiadania się za którymkolwiek systemem) szczyt debilizmu i napuszonego ego.

    Jakby nie można wprowadzić zaznaczania Shift + strzałka i Ctrl+c i ctrl+v (kopiuj, wklej).
    Trzy proste polecenia i można manipulować ich użyciem do woli. To jest genialne rozwiązanie. Zaznacz się to co się chce, w lewo w prawo, do góry na dół. Skopiuje co się chce, wklei gdzie chce. To jest potęga systemów MS.

    Nie trzeba robić szkolenia żeby obsłużyć NOTEPADA w windows, lub edita w dawnym DOS.

    Pozdr. Materiał na 5 :)

  5. @Obiektywny: spróbuj wyedytować w notatniku plik tekstowy ważący kilka mega, albo i giga. Powodznia :). vim bez problemu to obsłuży.

  6. @krzysztof ile razy edytowałeś w vim’ie plik ważący kilka giga?? i od razu podaj co to był za plik i w jakim celu go edytowałeś w vim’ie? żeby nie było że tego zadania nie można było wykonać inną technologią :)

    Pracuję codziennie na systemach linuksowych w dużej korporacji i 100% mojego czasu z vim’em to edycja setek plików konfiguracyjnych z których wielkość żadnego nie przekroczyła chyba nawet 50 kilobajtów!.

    Cholera mnie bierze jak dzwoni ktoś i chce coś na szybko zmienić, a ja muszę szukać manuala aby coś wyszukać czy zmienić. W MS notepad wystarcza :

    Shift + strzałka i Ctrl+c i ctrl+v (kopiuj, wklej). znajdź, zamień.

    Porównaj to z manualem do vim’a.

    Jak mam do pracy pliki kilka giga z danymi to używam do tego np. baz danych i skryptów sql’a, a nie vim’a :)

    Pozdr.
    Jeszcze raz plus dla autora za manual !

  7. A ja mam wrażenie, że to samo jest w manie:-P Jeszcze macie dużo manuali do przepisania:-D
    Niemniej życzę powodzeni:-D

  8. Niestety poprzednicy mają rację. Linuxowe edytory to szczyt debilizmu. Właśnie walczę od pół godziny aby skopiować kawałek tekstu do pliku konfiguracyjnego, w windzie to mniej niż 5 sekund! Dlatego linux zawsze będzie niszowy czy to się komuś podoba czy nie!

  9. Nie przesadzacie? Jak ktoś nie chce używać Vim-a czy innych edytorów tekstowych – to przecież nie musi! Zgadza się, że w N++ czy geany można coś zrobić szybciej jeśli chodzi o operacje na tekście. Nawet w nano czy pico jak ktoś chce/musi pracować w trybie tekstowym.
    Ja zerkam na Vim-a dlatego, że brakuje mi w miarę prostego, ale nie bardzo prostego edytora z kolorowaniem składni, takiego w którym mogę uruchomić skrypty i widzieć efekty. Jest SciTe, ale czemu nie zerknąć na Vim-a? Wcale nie oczekuję, że będę w tym edytować pliki tekstowe – raczej ma to być lekkie IDE umożliwiające uruchamianie kodu.
    Generalnie sprawdza się zasada że należy używać właściwych narzędzi do konkretnych zadań. I tyle. Chociaż znam takich, co twierdzą, że piszą raporty w Vim-ie ;), ale jeśli chcą…

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *