Spis treści

VIM

Lista komend Vima

na podstawie tej strony

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, komendą 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

okna

:split lub CTRL+w+s - podziel okno w poziomie
:vsplit lub CTRL+w+v - podziel okno w pionie
CTRL+w+[h/j/k/l] - przechodzenie między oknami, gdzie kierunek to oczywiście h, j, k lub l.
CTRL + w + w - przejdź do nast. okna w kolejce

Polecam rewelacyjny VIM Tutorial.


Czyt Szyt komend Vim

Zaznaczanie kolumny

W skrócie:

CTRL+V → <Down>→<Down>→<Down>→<Down> → c → napisz → <ESC><ESC>

Jak wyjść z Vima

:q[uit] Zakończ Vim. Nie zadziała, jeżeli zostały wprowadzone zmiany.
:q[uit]! Wymuś zakończenie. Zakończ bez zapisywania zmian.
:cq[uit] Zawsze zakończ bez wprowadzania zmian.
:wq Zapisz aktualny plik i zakończ.
:wq! Wymuś zapis aktualnego pliku i zakończenie.
:wq {file} Zapisz do pliku o nazwie {file} i wyjdź.
:wq! {file} Wymuś zapis do pliku {file} i zakończenie.
:[range]wq[!] Zapisz do aktualnie otwartego pliku, ale tylko linie określone w zakresie [range].
ZZ Zapisz aktualny plik, jeśli został zmieniony i zakończ (UWAGA!!! Wymaga uważności!)
ZQ Zakończ pracę nad aktualnym plikiem i zakończ program (działa tak samo jak „:q!”).

Edycja pliku

:e[dit] Edytuj aktualny plik. Przydatne, by wyedytować plik, jeżeli został zmieniony poza buforem Vima.
:e[dit]! Wymuś edycję aktualnego pliku. Usuń wszelkie zmiany znajdujące się w buforze. Przydatne, jeżeli chcesz zacząć od nowa.
:e[dit] {file} Edytuj plik o nazwie {file}.
:e[dit]! {file} Wymuś edycję pliku o nazwie {file}. Usuń wszelkie zmiany znajdujące się w buforze.
gf Edytuj plik, którego nazwa znajduje się POD lub PO kursorze. Mnemonic: „goto file”.

Wprowadzanie tekstu

a Pisz tekst PO kursorze.
A Pisz tekst na końcu danej linii.
i Pisz tekst PRZED kursorem.
I Pisz tekst na początku linii (przed pierwszym znakiem w linii, który nie jest spacją).
gI Pisz tekst w kolumnie 1 (pierwszym rzędzie znaków linii).
o Wstaw nową linię POD kursorem i zacznij wprowadzać tekst.
O Wstaw nową linię NAD kursorem i zacznij wprowadzać tekst.

Wstawianie pliku lub wyniku komendy

:r[ead] [name] Wstaw plik o nazwie [name] PONIŻEJ kursora.
:r[ead] !{cmd} Wykonaj komendę {cmd} i wstaw jej wynik z STDOUT pod kursorem.

Usuwanie tekstu

&lt;Del&gt; or
x
Skasuj [count] liter PONIŻEJ i PO kursorze.
X Skasuj [count] liter PRZED kursorem.
d{motion} Skasuj tekst w linii wskazanej ruchem {motion} kursora.
dd Skasuj bieżącą linię.
D Skasuj znaki począwszy od tego POD kursorem DO KOŃCA LINII
{Visual}x lub
{Visual}d
Skasuj podświetlony tekst (w trybie WIZUALNYM), patrz→ Zaznaczanie tekstu).
{Visual}X lub
{Visual}D
Skasuj podświetlone linie.
:[range]d[elete] Skasuj linię nr [range] (domyślnie: bieżąca linia)
:d[elete] {count} Skasuj {count} liczbę linii w dół począwszy od tej, na której jest kursor.
:[range]d[elete] {count} Skasuj {count} linii, począwszy od numeru [range].

Zamiana Tekstu

r{char} Zamień literę POD kursorem replace the character under the cursor with {char}.
R Wejdź w tryb ZAMIANA (Insert mode), w którym znaki się zamienia, zamiast wstawiać nowe.
~[count] Zmień wielkość znaku (z małej na wielką lub odwrotnie) pod kursorem i przesuń kursor w prawo. Powtórz czynność dla [count] następnych znaków
~{motion} Zmień wielkość tekstu (z małych na wielkie lub odwrotnie) wskazanego ruchem kursora.
{Visual}~ Zmień wielkość (z małych na wielkie lub odwrotnie) podświetlonego tekstu.

Zastępowanie znaków i tekstu

:[range]s[ubstitute]/{pattern}/{string}/[c][e][g][p][r][i][I] [count] Dla każdej linii w zakresie [range] zamień {pattern} na {string}.
:[range]s[ubstitute] [c][e][g][r][i][I] [count] :[range]&amp;[c][e][g][r][i][I] [count] Powtórz ostatnie :substitute z tym samym wzorcem wyszukiwania i tekstem zastępczym ale bez tych samych flag. Możesz dodać inne flagi.
Argumenty, których możesz użyć dla komend zastępowania:
[c] Potwierdź każdą zamianę. Vim umieści kursor na pasującym tekście. Możesz wklepać:
  'y' by zastąpić zaznaczony kursorem tekst
  'n' by nie zastępować zaznaczonego kursorem tekstu
  'a' by zastąpić ten i wszystkie inne pasujące teksty
  'q' by zakończyć zastępowanie
  CTRL-E  by przewinąć ekran do góry
  CTRL-Y  by przewinąć ekran do dołu
[e] Jeżeli wzorzec nie pasuje, nie wyświetlaj komunikatu błędu, lecz kontynuuj, jakby żaden błąd nie wystąpił.
[g] Zastąp wszystkie wystąpienia w linii. Bez tego argumentu zastąpi tylko pierwszy pasujący w każdej linii.
[i] Ignoruj wielkość znaków.
[I] Nie ignoruj wielkości znaków.
[p] Wyświetl linię zawierającą ostatnią zamianę.

Kopiowanie i przesuwanie tekstu

„{a-zA-Z0-9.%#:-”} Użyj rejestru {a-zA-Z0-9.%#:-„} dla następnego kasowania, kopiowania lub wklejania.
:reg[isters] Wyświetl zawartość wszystkich ponumerowanych i nazwanych rejestrów.
:reg[isters] {arg} Wyświetl zawartość ponumerowanych i nazwanych rejestrów wymienionych w {arg}.
:di[splay] [arg] Tak samo jak :reg.
[x]y{motion} Skopiuj tekst z linii bieżącej i nast. wskazanej przez {motion} do rejestru x.
[x]y[count]
{Visual}[x]y Skopiuj podświetlony tekst [do rejestru x] (Tryb WIZUALNY {Visual} → patrz Zaznaczanie tekstu).
{Visual}[x]Y Skopiuj podświetlone linie (nawet jeśli nie całe podświetlone) [do rejestru x]
:[range]y[ank] [x] {motion} Skopiuj [range] linii [do rejestru x] w kierunku {motion}.
:[range]y[ank] [x] {count} Skopiuj {count} linii, poczynając od linii ostatniej w [range] (domyślnie: aktualna linia), [do rejestru x].
[x]p Wklej tekst [z rejestru x] PO kursorze.
[x]P Wklej tekst [z rejestru x] PRZED kursorem.
[x]gp Jak „p”, ale zostaw kursor zaraz PO wklejonym tekście.
[x]gP Jak „p”, ale zostaw kursor zaraz PO wklejonym tekście.
:[line]pu[t] [x] Wklej tekst [z rejestru x] PO linii nr [line] (domyślnie: aktualna linia).
:[line]pu[t]! [x] Wklej tekst [z rejestru x] PRZED linią nr [line] (domyślnie: aktualna linia).

Undo/Redo/Repeat/Cofnij/Ponów/Powtórz

u Cofnij.
:u[ndo] Cofnij jedną zmianę.
:u[ndo][count] Cofnij [count] zmian.
CTRL-R Ponów cofniętą zmianę.
:red[o] Ponów cofniętą zmianę.
:red[o][count] Ponów [count] cofniętych zmian.
U Cofnij wszystkie ostatnie zmiany w danej linii.
. Powtórz ostatnią zmianę ile razy chcesz naciskając kropkę.

Moving Around

Podstawowe komendy przemieszczania kursora:
          k
        h   l
          j
[count]h [count] znaków w lewo.
[count]l [count] znaków w prawo.
[count]k lub
-(minus) lub
CTRL-P
[count] znaków w górę.
[count]j lub
+(plus) lub\\CTRL-J lub\\CTRL-N
[count] znaków w dół.
0 Do pierwszego znaku w linii.
&lt;Home&gt; Do pierwszego znaku w linii.
Do pierwszej nie-spacji w linii.
$ Do końca linii.
g0 or
g&lt;Home&gt;
Jeżeli wiersze się zawijają, idź do pierwszego znaku w linii ekranowej. Działa inaczej niż 0 na ekranach różnej szerokości.Kiedy linie nie zawijają się: idź do znaku najbardziej po lewej w danej linii na ekranie.
g Kiedy linie się zawijają: idź do pierwszej nie-spacji na linii ekranowej. J.w. działa inaczej niż ^.
g$ Kiedy linie się zawijają: idź do ostatniego znaku w linii ekranowej. J.w. działa inaczej niż $, które każe iść do końca linii tekstu.
f{char} Idź w prawo do wystąpienia znaku {char}.
F{char} Idź w lewo do wystąpienia znaku {char}.
t{char} Idź w lewo do wystąpienia znaku {char}. Kursor stanie na znaku na lewo od {char}
T{char} Idź w lewo do wystąpienia znaku {char}. Kursor stanie na znaku na prawo od {char}
; Powtarzaj ostatnie f, t, F lub T.
, Powtarzaj ostatnie f, t, F lub T w przeciwnym kierunku.
&lt;C-End&gt; or
G
Idź do ostatniej linii.
&lt;C-Home&gt; or
gg
Idź do pierwszej linii.
&lt;S-Right&gt; or
w
słowo naprzód (w prawo). Rozpoznaje znaki inne niż spacja.
&lt;C-Right&gt; or
W
słowo naprzód (w prawo). Rozpoznaje tylko spacje.
e Na koniec słowa. Wg nie tylko spacji.
E Na koniec słowa. Wg tylko spacji.
&lt;S-Left&gt; or
b
[count] words backward
&lt;C-Left&gt; or
B
[count] WORDS backward
ge Backward to the end of word [count]
gE Backward to the end of WORD [count]

These commands move over words or WORDS.

A word consists of a sequence of letters, digits and underscores, or a sequence of other non-blank characters, separated with white space (spaces, tabs, ). This can be changed with the 'iskeyword' option.

A WORD consists of a sequence of non-blank characters, separated with white space. An empty line is also considered to be a word and a WORD.

( [count] sentences backward
) [count] sentences forward
{ [count] paragraphs backward
} [count] paragraphs forward
]] [count] sections forward or to the next '{' in the first column. When used after an operator, then the '}' in the first column.
][ [count] sections forward or to the next '}' in the first column
The operators that can be used are:
  ~  switch case
  d  delete
  c  change
  y  yank
  &gt;  shift right
  &lt;  shift left
  !  filter through external command
  =  filter through 'equalprg' option command
  gq  format lines to 'textwidth' length
v start Visual mode per character.
V start Visual mode linewise.
&lt;Esc&gt; exit Visual mode without making any changes

How to Suspend

CTRL-Z Suspend Vim, like ”:stop„. Works in Normal and in Visual mode. In Insert and Command-line mode, the CTRL-Z is inserted as a normal character.
:sus[pend][!] or
:st[op][!]
Suspend Vim. If the '!' is not given and 'autowrite' is set, every buffer with changes and a file name is written out. If the '!' is given or 'autowrite' is not set, changed buffers are not written, don't forget to bring Vim back to the foreground later!

{{Vim%20Commands%20Cheat%20Sheet_files/glider.png}}

Daniel Gryniewicz / dang@fprintf.net

Różne czyt-szyty

Najprostszy czyt-szyt

vimrc

mój vimrc - nic ciekawego, skopiowałem go z wiki vima. Mam zamiar poprawiać upload, gdy coś zmienię w tym pliku. Na razie mi się podoba.

Pluginy do Vima

vim-templates

Bardzo fajoski. Szymele dokumentów znajdują się w katalogu ~/.vim/templates/ i mogą się nazywać jak bądź (więc nie tylko formatem, ale i innymi cechami mogą się różnić).

Wywołanie:

:setf html czyli :setfSPACJAnazwa szymelku

Źródełko

VIM-LATEXSUITE

LatexSuite potrafi ukryć (to fold) całe partie pliku .tex. Odsłania się je tak:

Podam teraz przykład bardzo prostego makra. Będzie ono wstawiać zaznaczony tekst w cudzysłowy, czyli jak zaznaczymy tekst „Ala ma kota.” i wykonamy makro to w efekcie dostaniemy „Ala ma kota.”. Cały trik polega na tym, że wycinamy zaznaczony tekst, wstawiamy cudzysłów, wklejamy tekst i wstawiamy cudzysłów. Wykonujemy więc kolejno:

  1. zaznaczamy kawałek tekstu
  2. rozpoczynamy nagrywanie makra ”a„: qa
  3. wycinamy tekst: c
  4. wstawiamy cudzysłów:
  5. wychodzimy z trybu wstawiania: escape
  6. wklejamy wycięty tekst: p
  7. przechodzimy do trybu wstawiania: a
  8. wstawiamy cudzysłów:
  9. wychodzimy z trybu wstawiania:escape
  10. kończymy nagrywanie makra: q

Teraz możemy przetestować działanie naszego makra poprzez zaznaczenie dowolnego tekstu i wciśnięcie @a.

Przypisanie skrótu klawiszowego

Skróty tworzy się poleceniem map. Jego składnia z grubsza wygląda tak:
:map <klawisz> <sekwencja>
Aby więc zmapować jakieś makro potrzebujemy nagranej sekwencji. Jak już wspominałem wcześniej makra zostają zapisane do wybranego rejestru, tzn. jeżeli na początku wcisnęliśmy qa to nasza sekwencja znajduje się w rejestrze a. Możemy więc w bardzo prosty sposób ją wyciągnąć. Mianowicie jak już wpiszemy np. :map <C-t> to wciskamy <C-r> po czym naciskamy literę odpowiedniego rejestru czyli w naszym przypadku jest to a. Sekwencja w ten sposób zostanie wklejona po czym pozostaje nam tylko zatwierdzić wciskając enter.

Zapisanie skrótu na stałe

Każde wykonane polecenie map jest pamiętane jedynie dopóki nie zamkniemy Vima. Aby temu zapobiec musimy dopisać wywołanie tego polecenia w pliku .vimrc. W tym celu otwieramy ów plik i dopisujemy:
map <skrót> <sekwencja>
Jeżeli chcemy wkleić zawartość rejestru a do treści pliku to wystarczy poprzedzić komendę p kombinacją ”<litera_rejestru> czyli w naszym wypadku wciskamy „ap.
Nasza linijka powinna wyglądać mniej więcej tak:
map <C-t> c” ^]pa„^]

Na koniec kilka uwag: