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 (
3znamena 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). Mistojse 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
aslouzi prikaz"ay22j(mistojse 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
pneboP). -
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