Editor vim - příkazový režim

Nápověda

F1Otevře nápovědu. Nápověda se zavře pomocí :q
:h :qOtevře nápovědu k příkazu :q
:h CTRL-vOtevře nápovědu k příkazu CTRL+v
KOtevře manuálovou stránku ke slovu, které je pod kurozrem (například k funkci jazyka C, pokud zrovna programujete …)
VIM je case-sensitive, tak si dávejte pozor na velikost písmen. K otevře manuálovou stránku, ale k jen posune kurzor nahoru.

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

kkursor se posune smerem nahoru - stejne pracuje sipka nahoru
jkursor se posune smerem dolu - stejne pracuje sipka dolu
lpohyb v radku smerem doprava) - stejne pracuje sipka vpravo a mezernik.
hpohyb 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ů).

wposune se o slovo dopredu - na zacatek slova
eposune se o slovo dopredu - na koncec slova
bposune se o slovo zpet - na zacatek slova
geposune 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.

Wposune se o SLOVO dopředu - na začátek SLOVa
Eposune se o SLOVO dopředu - na konec SLOVa
Bposune se o SLOVO zpět - na začátek SLOVa
gEposune 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
0presune 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).
fXnastaví kurzor na prvni    vyskyt znaku X napravo od moment. pozice kurzoru
FXnastaví kurzor na prvni    vyskyt znaku X nalevo od moment. pozice kurzoru
tXnastaví kurzor pred prvni vyskyt znaku X napravo od moment. pozice kurzoru
TXnastaví 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.

nHpro n = 1 (implicitni hodnota) presune kurzor na vrchni radek obrazovky, jinka na "n"-ty radek od vrchniho radku obrazovky
Mna prostredni radek obrazovky
nLpro n = 1 (implicitni hodnota) presune kurzor na spodni radek obrazovky, jinak na "n"-ty radek od spodniho radku obrazovky.

Změna okna

zEnteraktualni radek se stane prvnim radkem obrazovky
z.aktualni radek se stane prostrednim radkem
z-aktualni radek se stane poslednim radkem obrazovky
z30EnterCislo za prikazem z zmeni velikost okna na dany pocet radku. Mensi okno setri cas prepisovani obrazu (hodi se take pri praci po siti).
zzPresune 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-dposune o polovinu obrazovky smerem ke konci souboru
CTRL-u---------------||----------------- k zacatku souboru
CTRL-erolovani po "n" radkacich smerem ke konci (kurzor zustava na miste)
CTRL-y----------||------------ k zacatku souboru
CTRL-fstrankovani smerem ke konci souboru
CTRL-bstrankovani 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
nGbez 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 ctagszaindexuje zdrojove soubory jazyka C/C++. Bez tohoto příkazu nefungují následující příkazy.
CTRL+]Přejde na definici slova pod kurzorem.
:tag keywordPřejde na definici slova keyword
CTRL+tNávrat zpět z předchozího „skoku“ pomocí CTRL+]

Vyhledávání řetězců

/retezecvyhledavani retezcu ve smeru ke konci souboru
?retezecvyhledavani 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.

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/,/akcieRozsah od řádky obsahující „dopis“ k řádce obsahující „akcie“ včetně.
.+3,$-1Rozsah 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,'bOd řá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)
Uobnovi 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.
:redozrusi zmenu zpusobenou prikazem u nebo U
CTRL+rzrusi 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+aInkrementuje číslo pod kurzorem
Ctrl+xDekrementuje číslo pod kurzorem

Mazání

xSmaže znak na pozici kurozru
XSmaže před pozicí kurozru
sSmaže znak a přejde do vkládacího režimu
DSmaže vše do konce řádku
d0Smaže vše do začátku řádku
ddSmaž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)
c0Smaže slovo a přejde do vkládacího režimu
ccSmaž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

dwslovo(a) za kurzorem (az k interupcnimu znaku ci mezere (vcetne))
dWslovo(a) za kurzorem (vcetne interupcnich znaku az k mezere (vcetne))
dbpredchazejici slova
dLvsechny radky od momentalni pozice kurzoru az po spodni radek obrazovky
dHvsechny radky od momentalni pozice kurzoru az po vrchni radek obrazovky
dnHmaze od aktualniho radku az k n-temu radku z hora
dGmaze od aktualniho radku az k poslednimu radku souboru
d'avsechny radky od momentalni pozice kruzoru az po radku oznacenou (mark) jako a
ddvymaze cely radek

Další příkazy pro mazání

Dvymaze cast radku napravo od kurzoru, tj. do konce radky.
Cvymaze cast radku napravo od kurzoru a prejde z prikazoveho do vkladaciho modu
ccvymaze cely radek a prejde z prikazoveho do vkladaciho rezimu (totez co ddi).
STotéž co cc.
cwsmaze aktualni slovo a prejde do vkladaciho rezimu.
cwsmaze aktualni SLOVO (slovo i s interpunkcnimi znamenky) a prejde do vkladaciho rezimu.
dtxvymaze 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

  1. Nepojmenovaný buffer prubezne meni svuj obsah, obsahuje vzdy jen jedinou, a to naposledy provedenou akci. (kopirovani, mazani, zapis ...)
  2. 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). Misto j se může použít Enter (který také slouží pro přechod na následující řádku).
Pro skoky po slovech slouzi w. Pro ulozeni 3 slov se proto da pouzit prikaz 3yw

Vložení obsahu bufferu

K opetovnemu vyvolani slouzi prikazy:

ppro umisteni radku pod pracovnim radkem ci slov vpravo od kursoru
Ppro 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 (misto j 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

Jspoji pracovni radek s radkem nasledujicim.
5Jspoji pracovni radek se 4 nasledujicimi radky.
r<Enter>rozdeli radek na dva (nahradi znak pod kurzorem za znak noveho radku)

Posouvání textu

  1. Pozadovanou cast textu vymazeme, cimz ji presuneme do nepojmenovaneho bufferu a potom ulozime na jedno nebo vice pozadovanzch mist (prikazy p nebo P).
  2. 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
>Lposune radky od aktualniho (vcetne) az do konce obrazovky
>/retezecposune doprava vsechny radky pocinaje aktualnim az k radku obsahujicimu retezec (vcetne).(stejne jako >/vzor/+0)
>?retezecTotéž co /, jen hledá vzor směrem nahoru
>Gposune 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ů

:digZobrazí 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ů

ZnakZkratka
©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#jvytvori "fold" z # radek od aktualniho kurzoru
zf/stringvytvori fold od aktualniho radku k retezci string
zjpresune kurzor na dalsi fold
zkpresune kurzor na predchozi fold
zootevre fold na kurzoru
zOotevre vsechny foldy na kurzoru
zmzavre jeden fold level (tj vsechny foldy na urovni foldu na kterem je kurzor)
zMzavre vsechny foldy
zrotevre jeden fold level
zRotevre vsechny foldy
zdsmaze fold na kurzoru
zEsmaze vsechny foldy
[zpresuen se na zacatek otevreneho foldu
]zpresune se na konec otevreneho foldu

Více viz www.linux.com/learn/tutorials/442438-vim-tips-folding-fun

Komentář Hlášení chyby
Created: 11.9.2005
Last updated: 13.7.2013
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..