Editor vim - příkazový režim
Nápověda
F1 | Otevře nápovědu. Nápověda se zavře pomocí :q |
:h :q | Otevře nápovědu k příkazu :q |
:h CTRL-v | Otevře nápovědu k příkazu CTRL+v |
K | Otevře manuálovou stránku ke slovu, které je pod kurozrem (například k funkci jazyka C, pokud zrovna programujete …) |
Pohyb kurzoru
Pro pohyb kurzoru v textu budete nejspíše používat šipky na klávesnici (v příkazovém i vkládacím režimu).
Následující příkazy mají však jednu velkou výhodu. Pokud před ně napíšete číslo n,
pak se pohyb vykoná n-krát. Takže pro posun o 50 řádků dolů stačí zadat (v příkazovém
módu) 50j
.
Tato vymoženost platí i pro spoustu dalších příkazů, nejen pro pohyb. Například příkaz
pro mazání řádku je dd
. Příkaz 10dd
smaže 10 řádků.
Posun pomocí kláves k, j, l, h
k | kursor se posune smerem nahoru - stejne pracuje sipka nahoru |
j | kursor se posune smerem dolu - stejne pracuje sipka dolu |
l | pohyb v radku smerem doprava) - stejne pracuje sipka vpravo a mezernik. |
h | pohyb v pracovnim radku smerem doleva - stejne pracuje sipka vlevo |
Slovo
Slova jsou posloupností písmen, číslic a podtržítek nebo dalších viditelných znaků, oddělené bílými znaky (mezery, tabulátory, konce řádků).
w | posune se o slovo dopredu - na zacatek slova |
e | posune se o slovo dopredu - na koncec slova |
b | posune se o slovo zpet - na zacatek slova |
ge | posune se o slovo zpet - na konec slova |
SLOVO
SLOVO je tvořeno viditelnými znaky, přičemž oddělovačem slov jsou mezery a znaky nového řákdu.
W | posune se o SLOVO dopředu - na začátek SLOVa |
E | posune se o SLOVO dopředu - na konec SLOVa |
B | posune se o SLOVO zpět - na začátek SLOVa |
gE | posune se o SLOVO zpět - na konec SLOVa |
Věta
Věta je chápána jako posloupnost znaků zakončena jedním ze čtyř znaků:
. (tecka)
, (carka)
! (vykricnik)
? (otaznik)
Za interupcnim znamenkem musi nasledovat alespon jeden bily znak (mezera, tabulator, konec radky), jinak neni editor schopen odlisit vetu a slovo s interpunkcnim znamenkem uprostred.
( | presun kurzoru o vetu zpet |
) | presun kurzoru o vetu dopredu |
Odstavce
Odstavce jsou celky vzájemě oddělené alespoň jedním prázdným řádkem.
{ | presun kurzoru o odstavec zpet |
} | presun kurzoru o odstavec dopredu |
Přesun kurzoru v rámci řádku
$ | presune kurzor na posledni znak na radce |
0 | presune kurzor na prvni znak v radce (| dela to same) |
^ | presune kurzor na prvni znak na radce ruzny od mezery nebo tabulatoru (_ dela to same) |
n| | přesune kurzor na n-tý sloupec |
% | presune kurzor na zavorku, ktera je v paru se zavorkou, na ktere je kurzor (hodi se nejen pri programovani). |
fX | nastaví kurzor na prvni vyskyt znaku X napravo od moment. pozice kurzoru |
FX | nastaví kurzor na prvni vyskyt znaku X nalevo od moment. pozice kurzoru |
tX | nastaví kurzor pred prvni vyskyt znaku X napravo od moment. pozice kurzoru |
TX | nastaví kruzor pred prvni vyskyt znaku X nalevo od moment. pozice kurzoru |
; | pokracuje v hledani znaku definovaneho jednim z prikazu f,F,t,T |
, | pokracuje v hledani zanku ( definovaneho f,F,t,T ) v opacnem smeru |
Přesun kurzoru v rámci obrazovky
Obrazovkou se myslí viditelná část dokumentu v rámci okna editoru.
nH | pro n = 1 (implicitni hodnota) presune kurzor na vrchni radek obrazovky, jinka na "n"-ty radek od vrchniho radku obrazovky |
M | na prostredni radek obrazovky |
nL | pro n = 1 (implicitni hodnota) presune kurzor na spodni radek obrazovky, jinak na "n"-ty radek od spodniho radku obrazovky. |
Změna okna
zEnter | aktualni radek se stane prvnim radkem obrazovky |
z. | aktualni radek se stane prostrednim radkem |
z- | aktualni radek se stane poslednim radkem obrazovky |
z30Enter | Cislo za prikazem z zmeni velikost okna na dany pocet radku. Mensi okno setri cas prepisovani obrazu (hodi se take pri praci po siti). |
zz | Presune radku s kurzorem doprostred obrazovky |
zt | (top) Presune readku s kurzorem na vrch obrazovky |
zb | (bottom) Presune radku s kurzorem na konec obrazovky |
Cislo pred prikazem z
znamena, ze radek s danym cislem (misto aktualniho radku) se premisti na danou pozici.
Rolování a stránkování
CTRL-d | posune o polovinu obrazovky smerem ke konci souboru |
CTRL-u | ---------------||----------------- k zacatku souboru |
CTRL-e | rolovani po "n" radkacich smerem ke konci (kurzor zustava na miste) |
CTRL-y | ----------||------------ k zacatku souboru |
CTRL-f | strankovani smerem ke konci souboru |
CTRL-b | strankovani smerem k zacatku souboru |
n+ | na prvni znak o "n" radek smerem ke konci souboru
(stejnou funkci plni i prikaz Enter napr. 20Enter posune o 20 radek) |
n- | na prvni znak o "n" radek smerem k zacatku souboru |
nG | bez ciselne hodnoty zpusoby presun kurzoru na konec souboru. Ciselna hodnota pred prikazem G zpusobi prechod na radek zadaneho cisla. Napriklad 1G presune kursor na prvni radek souboru. |
Navigace v C++ zdrojových kódech
:mak ctags | zaindexuje zdrojove soubory jazyka C/C++. Bez tohoto příkazu nefungují následující příkazy. |
CTRL+] | Přejde na definici slova pod kurzorem. |
:tag keyword | Přejde na definici slova keyword |
CTRL+t | Návrat zpět z předchozího „skoku“ pomocí CTRL+] |
Vyhledávání řetězců
/retezec | vyhledavani retezcu ve smeru ke konci souboru |
?retezec | vyhledavani retezcu smerem k zacatku souboru |
Vyhledávání začne po stisku klávesy Enter
.
Pro prechod na nasledujici vyskyt zadaneho retezce lze uzit prikaz n
,
ktery zachova smer vyhledavani, nebo N
, obracejici smer prohledavani.
Pri hledani je mozne pouzivat regulární výrazy, například:
- . - libovolny znak
- ^ - zacatek radku
- $ - konec radku
- * - libovolny pocet opakovani prechoziho znaku
Zruseni jejich specialniho vyznamu se provede pridanim zpetneho lomitka pred spec. znak \
.
Například /\.\*
hledá tečku následovanou hvězdičkou.
Návrat kurzoru na výchozí pozici
Prikaz ``
(dva apostrofy) vrati kurzor na misto pred poslednim skokem kurzoru (kde se nachazel pred zadanim
prikazu pro vyhledani retezce nebo prikazu G, L, M, H atp.).
Způsoby identifikace částí souboru
Označení pozice
Příkazem m
(mark) a následným jednoznakovým jmenem pozice (znak a až z => max 26 označkovaných míst)
se označí místo pod kurzorem.
Na označenou pozici se lze odvolávat příkazem `
(návrat do pozice označené
značkou) nebo '
(návrat na začátek řádku označeného značkou).
Za `
i '
následuje jméno pozice (písmeno a-z).
Identifikace rozsahu řádků
Ćástí souboru rozumíme posloupnost po sobě jdoucích řádků. Rozsah řádku se určuje identifikací prvního a posledního řádku oddělených čárkou.
Pokud chceme identifikovat jen jeden radek, staci uvest jen jednu identifikaci radku (napr. cislo radku).
Radky je mozne identifikovat:
- cislicemi (
3
znamena 3 radek) - vyhledavanim ( / a ? ) - prvni radek odpovidajici vzoru se stane zacatkem (resp. koncem) rozsahu. Ve vyhledávání se mohou používat regulární výrazy.
- Spec. symboly:
- . (tecka) - oznacuje aktualni radek
- $ - oznacuje posledni radek souboru
- n - n-ta radka (cislice, viz vyse)
- +n - posunuti vzhledem k identifikatoru o n radek (pokud je posun pouze o 1 radek, muze se "1" vynechat)
- -n - posunuti o n radek vzhledem k identifikatoru zpet
- znackou radku 'x (kde x je jmeno pozice)
Příklady
12 | řádka 12 |
12,15 | řádky 12 až 15 |
/dopis/,/akcie | Rozsah od řádky obsahující „dopis“ k řádce obsahující „akcie“ včetně. |
.+3,$-1 | Rozsah od řádky 3 řádky pod aktuální řádkou (na které je kurzor) až po předposlední řádku v souboru. (tečka reprezentující aktuální řádku se může vynechat) |
'a,'b | Od řádky označené (mark) jako a až po řádku s mark b |
.,/start/- | Totéž co .,/start/-1 (jednička je defaultní hodnota pro -) |
?start?,.+ | První řádka, která před aktuální řádkou obsahuje „start“ až po jednu řádku za aktuální řádkou |
.-,.+ | Rozsah od předcházející řádky aktuální řádce až po následující (celkem 3 řádky). |
$-10,$ | Posledních 10 řádek |
EXAMPLES
Rozsahy se používají často pro příkazy v ex módu. Následující příkaz smaže (delete) řádky od pátého až po aktuální.
:5,.d
Editace obsahu
Zrušení změn
u | (undo) prikaz zrusi posledni zmenu v docasnem pracovnim prostoru (bufferu) |
U | obnovi puvodni obsah radku, v pripade ze na pracovnim radku bylo provedeno vice zmen. K obnove dojde pouze v pripade, ze jste neprovedli zmenu na dalsim pracovnim radku, protoze kazda zmena prepise obsah bufferu. |
:redo | zrusi zmenu zpusobenou prikazem u nebo U |
CTRL+r | zrusi zmenu zpusobenou prikazem u nebo U |
Obnova vymazaných řádek
K obnove jednoho nebo vice radek slouzi ocislovane buffery. Jednotlive buffery
jsou oznaceny cislicemi "1
az "9
.
Posledni provedene vymazani textu je v bufferu
cislo 1, predposledni vymazani v bufferu cislo 2, predpredposledni vymazani
v bufferu cislo 3 atd.
"np vlozi text z n-teho bufferu pod pracovni radek "nP vlozi text z n-teho bufferu nad pracovni radek
K obnoveni naposledy smazaneho textu staci pouzit prikaz put
(p
nebo P
) bez
uvedeni cisla bufferu, tj. neni nutne psat "1
.
Chcete-li například prohodit dva řádky, stačí použít příkaz ddp
)
Prikaz .
(tecka), je-li poslednim prikazem změna vlozeni obsahu ocislovaneho
bufferu, vlozi text z nasledujiciho ocislovaneho bufferu. Takze posloupnost
prikazu, jejiz pocatek ma tvar 1pu.u.u.
umoznuje rychle projit ocislovane buffery a zrusit vlozeni nespravneho obsahu pomoci prikazu u
.
Příkaz . (tečka)
Příkaz .
opakuje poslední provedené akce (například co jste napsali ve vkládacím režimu).
Pokud zadáte před tečku číslo n, poslední akce se zopakuje n-krát.
Změny textu
~ | (tilda) Zmena velkych pismen za mala a naopak (pridrzenim klavesy ~ se zacne zacnou menit dalsi pismena v rade) |
20~ | Změní velikost 20-ti znaků. Pokud to nefunguje, může pomoci :set tildeop . |
Ctrl+a | Inkrementuje číslo pod kurzorem |
Ctrl+x | Dekrementuje číslo pod kurzorem |
Mazání
x | Smaže znak na pozici kurozru |
X | Smaže před pozicí kurozru |
s | Smaže znak a přejde do vkládacího režimu |
D | Smaže vše do konce řádku |
d0 | Smaže vše do začátku řádku |
dd | Smaže řádek. Řádek se uloží do registru, takže je možné jej někam zkopírovat pomocí p |
nr | (replace) Nahradí "n" znaků za od kurozru dále znakem zadaným po tomto příkazu. Defaultně nahradí
jen znak, nad kterým je kurzor. (Například 10rx přepíše 10 znaků na xxxxxxxxxx) |
c0 | Smaže slovo a přejde do vkládacího režimu |
cc | Smaže řádek a přejde do vkládacího režimu |
Když za příkazem d
(nebo c
) následuje příkaz pro posun kruzoru, operace se provede na
celem textu od aktualni pozice kruzoru az k pozici urcene prikazem pro posun
kurzoru (viz d0
, kde 0
je posun kurzoru na začátek řádku …).
Například d$
maže od aktuální pozice kurzoru do konce radku (stejne jako prikaz D
).
Příkaz d`a
smaže vše od aktuální pozice kurzoru až k místu označeném (mark) jako a
.
Příkazy pro vymazání větších skupin
dw | slovo(a) za kurzorem (az k interupcnimu znaku ci mezere (vcetne)) |
dW | slovo(a) za kurzorem (vcetne interupcnich znaku az k mezere (vcetne)) |
db | predchazejici slova |
dL | vsechny radky od momentalni pozice kurzoru az po spodni radek obrazovky |
dH | vsechny radky od momentalni pozice kurzoru az po vrchni radek obrazovky |
dnH | maze od aktualniho radku az k n-temu radku z hora |
dG | maze od aktualniho radku az k poslednimu radku souboru |
d'a | vsechny radky od momentalni pozice kruzoru az po radku oznacenou (mark) jako
a |
dd | vymaze cely radek |
Další příkazy pro mazání
D | vymaze cast radku napravo od kurzoru, tj. do konce radky. |
C | vymaze cast radku napravo od kurzoru a prejde z prikazoveho do vkladaciho modu |
cc | vymaze cely radek a prejde z prikazoveho do vkladaciho rezimu (totez co
ddi ). |
S | Totéž co cc . |
cw | smaze aktualni slovo a prejde do vkladaciho rezimu. |
cw | smaze aktualni SLOVO (slovo i s interpunkcnimi znamenky) a prejde do vkladaciho rezimu. |
dtx | vymaze od aktualni pozice do prvniho vyskytu znaku x na aktualnim radku |
d/vzor | ... prvniho vyskytu vzoru vcetne |
d/vzor/+0 | ... az k prvnimu radku obsahujicii vzor (vcetne) |
d/vzor/-1 | ... az k radku predchazejicimu radek obsahujici vzor |
d/vzor/+2 | ... az ke druhemu radku po prvnim radku obsahujici vzor |
Pokud uživatel vymaže více než čtyři řádky, editor VIM vypíše informaci o počtu skutečně zrušených řádků.
Přesuny textu
Buffery
- Nepojmenovaný buffer prubezne meni svuj obsah, obsahuje vzdy jen jedinou, a to naposledy provedenou akci. (kopirovani, mazani, zapis ...)
-
Pojmenovaný buffer ma staly obsah. Text ulozeny v pojmenovanych bufferech je
mozne prenaset z jednoho souboru do druheho. Jmen bufferu je 26 [a..z].
Pokud je buffer uveden velkym pismenem, je obsah pripojen na konec bufferu, male pismeno buffer prepise cely.
Nepojmenované buffery
- pocet y objekt
-
Pro ulozeni do nepojmenovaneho bufferu 15 radek, pouzijte prikaz
y14j
(bude ulozena pracovni radka a 14 nasledujicich). Mistoj
se může použít Enter (který také slouží pro přechod na následující řádku).
Pro skoky po slovech slouziw
. Pro ulozeni 3 slov se proto da pouzit prikaz3yw
Vložení obsahu bufferu
K opetovnemu vyvolani slouzi prikazy:
p | pro umisteni radku pod pracovnim radkem ci slov vpravo od kursoru |
P | pro umisteni radku nad pracovnim radkem ci slov vlevo od kursoru |
Z předchozího je jasné, že se příkaz y
řídí stejnymi pravidli pro presun kurzoru jako operatory
mazani (d
) a zmen textu (c
).
Například y0
kopiruje text od aktualni pozice do zacatku radku,
yy
kopiruje aktualni radku (synonymum prikazu Y
),
nyw
skopiruje "n" slov atd.
Pojmenované buffery
- pocet "jmeno y objekt
-
Pro ulozeni 23 radek do bufferu jmena
a
slouzi prikaz"ay22j
(mistoj
se da pouzit Enter, který taky slouží pro přechod na další řádku.
Vymazani aktualniho odstavce a jeho soucasne ulozeni do bufferu b
provede
nasledujici prikaz (kursor je na zacatku odstavce) "bd}
atd.
K opetovnemu vyvolani slouzi "xp
(pod pracovni radek)
nebo "xP
(nad pracovni radek) kde x je jmeno bufferu.
Dělení a spojování textu
J | spoji pracovni radek s radkem nasledujicim. |
5J | spoji pracovni radek se 4 nasledujicimi radky. |
r<Enter> | rozdeli radek na dva (nahradi znak pod kurzorem za znak noveho radku) |
Posouvání textu
-
Pozadovanou cast textu vymazeme, cimz ji presuneme do nepojmenovaneho bufferu a
potom ulozime na jedno nebo vice pozadovanzch mist (prikazy
p
neboP
). -
Posun textu pomoci příkazů
<
a>
:
< - posun doleva o "shiftwidth" mezer. (implicinte 8)
> - posun doprava
Zmena atributu "shiftwidth" se zmeni prikazem::set shiftwidth=n
, kde n je pocet mezer.
I zde plati pravidlo o posunu kurzoru jako pri mazani (d) nebo prikazu pro zmeny textu (c) …
>> (<<) | posun celeho radku |
3>> | posune tri radky doprava, zacina se aktualnim radkem |
>L | posune radky od aktualniho (vcetne) az do konce obrazovky |
>/retezec | posune doprava vsechny radky pocinaje aktualnim az k radku obsahujicimu retezec (vcetne).(stejne jako >/vzor/+0) |
>?retezec | Totéž co / , jen hledá vzor směrem nahoru |
>G | posune doprava radky od aktualniho az do konce souboru |
Ostatní
Obnova obrazovky
Pokud potrebuje uzivatel z nejakeho duvodu obnovit obrazovku
(napr. v prubehu prace v editoru obdrzi elektronickou zpravu, ktera mu "prepise" puvodni obsah
obrazovky), dela se to priakzem CTRL+l
(CTRL plus malé L - stejně jako v shellu) nebo
CTRL+r
- to zavisi na terminalu.
Vkládání speciálních znaků
:dig | Zobrazí tabulku definovaných speciálních znaků.
Tabulka je rozdělená do tří sloupců: zkratka, znak a číselný kód.
Tabulka se skryje příkazem q . Seznamem můžete listovat
klávesami mezerník (posun dolů) a u (posun nahoru). |
Vložení speciálního znaku se provede ve vkládacím režimu. Nejdříve se stiskne
Ctrl+k
, pak se napíše zkratka (například Co
pro © nebo Eu
pro €).
Pro vložení znaku jeho číselným kódem se používá zkratka Ctrl+v
nebo
Ctrl+q
ve vkládacím režimu následovaná číslem (000-255),
(nebo pro unikode u
a číslo 0000-FFFF).
Seznam zajímavých znaků
Znak | Zkratka |
---|---|
© | Co |
® | Rg |
£ | Pd |
€ | Eu |
° | DG |
± | +- |
÷ | -: |
≤ | =< |
≥ | >= |
π | p* |
≈ | ?2 |
☆ | *1 |
★ | *2 |
Folding
Pri editaci zdrojoveho kodu je mozne tela funkci, metod a trid schovavat do tzv. foldu (fold = zahyb, ohyb, ohrada ...).
Příkaz :set foldlevel=1
(v konfiguračním souboru ~/.vimrc
se píše bez úvodní dvojtečky) nastaví fold level na 1.
zf#j | vytvori "fold" z # radek od aktualniho kurzoru |
zf/string | vytvori fold od aktualniho radku k retezci string |
zj | presune kurzor na dalsi fold |
zk | presune kurzor na predchozi fold |
zo | otevre fold na kurzoru |
zO | otevre vsechny foldy na kurzoru |
zm | zavre jeden fold level (tj vsechny foldy na urovni foldu na kterem je kurzor) |
zM | zavre vsechny foldy |
zr | otevre jeden fold level |
zR | otevre vsechny foldy |
zd | smaze fold na kurzoru |
zE | smaze vsechny foldy |
[z | presuen se na zacatek otevreneho foldu |
]z | presune se na konec otevreneho foldu |
Více viz www.linux.com/learn/tutorials/442438-vim-tips-folding-fun