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.


W skrócie:

CTRL+V → <Down>→<Down>→<Down>→<Down> → c → napisz → <ESC><ESC>
  • Wejdź w tryb NORMALNY
  • Połóż kursor na początek tekstu do zaznaczenia
  • Naciśnij CTRL-V i kieruj kursor w dół zaznaczenia
  • Po zaznaczeniu wszystkich linijek naciśnij c
  • Wpisz nowy tekst. Nie bój, że widać tylko w pierwszej linijce!
  • Uderz <ESC><ESC>. Cały tekst się zmienił!!!
: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 :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).

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

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

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.

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

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

  • wejść w tryb NORMALNY (np. Esc)
  • najechać kursorem na znacznik zafoldowanej linii
  • napisać :za
  • 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.txt
  • ostatnio zmienione: 2022/05/22 10:38
  • przez 127.0.0.1