linux:vim

VIM

na podstawie tej strony

+ – 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>

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

/ 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

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

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)

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

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

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)

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

: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

: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.


: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!”).

: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”.

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.

: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.

&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].

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.

:[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ę.

„{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 :registers.
[„x]y{motion} Yank {motion} text [into register x].
[„x]yy Yank [count] lines [into register x]
[„x]Y yank [count] lines [into register x] (synonym for yy).
{Visual}[„x]y Yank the highlighted text [into register x] (for {Visual} see Selecting Text).
{Visual}[„x]Y Yank the highlighted lines [into register x]
:[range]y[ank] [x] Yank [range] lines [into register x].
:[range]y[ank] [x] {count} Yank {count} lines, starting with last line number in [range] (default: current line), [into register x].
[„x]p Put the text [from register x] after the cursor [count] times.
[„x]P Put the text [from register x] before the cursor [count] times.
[„x]gp Just like „p”, but leave the cursor just after the new text.
[„x]gP Just like „P”, but leave the cursor just after the new text.
:[line]pu[t] [x] Put the text [from register x] after [line] (default current line).
:[line]pu[t]! [x] Put the text [from register x] before [line] (default current line).

u Undo [count] changes.
:u[ndo] Undo one change.
CTRL-R Redo [count] changes which were undone.
:red[o] Redo one change which was undone.
U Undo all latest changes on one line. {Vi: while not moved off of it}
. Repeat last change, with count replaced with [count].

Basic motion commands:
        k
      h   l
        j
h or
[count] characters to the left (exclusive).
l or
or
[count] characters to the right (exclusive).
k or
or
CTRL-P
[count] lines upward
j or
or
CTRL-J or
or
CTRL-N
[count] lines downward (linewise).
0 To the first character of the line (exclusive).
&lt;Home&gt; To the first character of the line (exclusive).
To the first non-blank character of the line
$ or
&lt;End&gt;
To the end of the line and [count - 1] lines downward
g0 or
g&lt;Home&gt;
When lines wrap ('wrap on): To the first character of the screen line (exclusive). Differs from „0” when a line is wider than the screen. When lines don't wrap ('wrap' off): To the leftmost character of the current line that is on the screen. Differs from „0” when the first character of the line is not on the screen.
g When lines wrap ('wrap' on): To the first non-blank character of the screen line (exclusive). Differs from „” when a line is wider than the screen. When lines don't wrap ('wrap' off): To the leftmost non-blank character of the current line that is on the screen. Differs from „” when the first non-blank character of the line is not on the screen.
g$ or
g&lt;End&amp;gr;
When lines wrap ('wrap' on): To the last character of the screen line and [count - 1] screen lines downward (inclusive). Differs from „$” when a line is wider than the screen. When lines don't wrap ('wrap' off): To the rightmost character of the current line that is visible on the screen. Differs from „$” when the last character of the line is not on the screen or when a count is used.
f{char} To [count]'th occurrence of {char} to the right. The cursor is placed on {char} (inclusive).
F{char} To the [count]'th occurrence of {char} to the left. The cursor is placed on {char} (inclusive).
t{char} Till before [count]'th occurrence of {char} to the right. The cursor is placed on the character left of {char} (inclusive).
T{char} Till after [count]'th occurrence of {char} to the left. The cursor is placed on the character right of {char} (inclusive).
; Repeat latest f, t, F or T [count] times.
, Repeat latest f, t, F or T in opposite direction [count] times.
- &lt;minus&gt; [count] lines upward, on the first non-blank character (linewise).
+ or
CTRL-M or
&lt;CR&gt;
[count] lines downward, on the first non-blank character (linewise).
_ &lt;underscore&gt; [count] - 1 lines downward, on the first non-blank character (linewise).
&lt;C-End&gt; or
G
Goto line [count], default last line, on the first non-blank character.
&lt;C-Home&gt; or
gg
Goto line [count], default first line, on the first non-blank character.
&lt;S-Right&gt; or
w
[count] words forward
&lt;C-Right&gt; or
W
[count] WORDS forward
e Forward to the end of word [count]
E Forward to the end of WORD [count]
&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

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

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.

Nagrywanie makra rozpoczynamy wciskając q oraz literę (a-z). Oznacza ona nazwę rejestru, do którego będą zapisywane wciskane klawisze. Ta informacja przyda nam się później do przypisywania skrótu klawiszowego. Gdy już rozpoczniemy nagrywanie to wykonujemy kolejno czynności, które chcielibyśmy powtarzać, a później kończymy nagrywanie wciskając klawisz q. W tym momencie możemy wykonać makro wciskając @ oraz literę, którą wybraliśmy przy nagrywaniu makra.

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.

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.

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:

  • Skrót <C-t> oznacza przytrzymanie przycisku Ctrl oraz wciśnięcie klawisza t,
  • Aby podejrzeć zawartość rejestrów bez wklejania można wywołać polecenie :registers,
  • Skrót <C-r> służący do wklejania zawartości rejestrów (i nie tylko ale o tym może innym razem) można wywołać także w trybie wprowadzania,
  • Do powtarzania tylko ostatniej czynność możemy użyć klawisza . (kropka) zamiast nagrywania makra, np. gdy chcemy po prostu wstawić jakiś tekst parę razy to wstawiamy go raz a potem . (kropka) będzie robić to za nas.
  • linux/vim.1414956060.txt.gz
  • ostatnio zmienione: 2022/05/22 10:37
  • (edycja zewnętrzna)