- rozložení terminálu:
~ - označení prázdných řádků
poslední řádek - informativní/příkazový
předopslední řádek (po nastavení 'set laststatus=2')
nastavení 'nekompatibilního' režimu - :set nocompatible
-
obecně nastavení v souboru .vimrc
(soubor ~/NMIN266/.vimrc přesuňte do ~/)
set bs=2 "backspace funguje 'beznym' zpusobem
set showcmd "ukaze co delame za prikaz
set showmode "ukaze v jakem jsme modu
set ruler "ukaze kde jsem
set wrap "dlouhy radek je na nekolik radku
set laststatus=2 "mame specialni radek na stav
set list "zobrazi konce radku jako $ (dolar)
set visualbell " nebude nam piskat ale na chvili prebarvi obrazovku
set term=xterm "mame barvicky
syntax on "barevne zvyrazneni zdrojovych souboru
"napr perl, sh, cc, ...
set hlsearch
colorscheme elflord
- spuštění
vim soubor
vim -d soubor1 soubor2
vim
- 3 typy režimů:
- příkazový (v něm jsem po spuštění vim, dostanu se do něj několikerým [esc])
- vkládací/přepisovací (ins,ii,aa,oo/rr)
- ex příkazový (dostanu se do něj po stisku ':' nebo '/' z příkazového režimu)
- otevření souboru
esc...
:e (funguje doplňování pomocí tab)
:enew (založení nového-prázdného souboru viz. dále buffery)
:r soubor (načtení obsahu souboru do stávajícího)
- uložení souboru
esc...
:w
-
ukončení
esc...
:q, :q!, :wq, ZZ
esc...
- otevření dalšího souboru
:e (funguje doplňování pomocí tab)
:enew (založení nového-prázdného souboru viz. dále buffery)
:r soubor (načtení obsahu souboru do stávajícího)
mezi otevřenými soubory s mohu pohybovat příkazy :bnext :bprevious
-
historií ex příkazů lze procházet pomocí ↑, ↓ - obdobně jako v bash
-
editace
(vkládání-přepis)
do vkládacího režimu se dostaneme (z příkazového režimu):
- i, insert - začneme psát před znak, na kterém byl nastaven kurzor
- I - začneme psát před první 'nemezerový' znak na řádku
- a - začneme psát za znak, na kterém byl nastaven kurzor
- A - začneme psát na konec řádku (včetně mezer)
- o/O > - začneme psát na nový řádek pod/nad řádkem, na kterém je kurzor
- r - přepis znaku na kterém je kurzor
- R - zapnutí 'přepisovacího' režimu
pozn. vi je nastaveno tak, že nezalamuje řádky tj. když píšeme dlouhý řádek, pak
sice začne pokračovat jakoby na dalším řádku, ale 'konce řádky nevloží'
změna
c'rozsah kam' - změna slova (cw), věty (c)), odstavce (c})
-
mazání
- x - smaže znak, na kterém je nastaven kurzor (lze opakovat 3x smaže 3znaky)(rozdíl mezi xxx
a 3x viz. undo - redo)
- dd - smaže aktuální řádku
- d'rozsah' - např. dw smaže slovo 3dw nebo d3w smaže 3 slova d3) smaže 3 věty
-
pohyby v rámci textu šipky resp. 'k' ↑, 'j' ↓, 'h' ←, 'l' →
- ^/$ - začátek/konec řádku
- w, W - začátek následujícího slova
- e, E - konec tohoto slova
- b, B - nejbližší začátek slova
- malá/velká písmena
malá: slovo se bere jako shluk [a-za-z0-9_]
velká: slovo se bere jako shluk 'nemezer'
- () - začátek/konec věty (věta je ukončena '.','!','?')
- {} - začátek/konec odstavce (odstavce jsou odděleny prázdnými řádky)
- lze opakovat - tzn. příkaz '3w' nás posune na začátek třetího slova
- % - cyklický skok na párovou závorku
- G - skok na konec soboru (^g informuje kde, procentuálně, jsem v rámci textu)
- 13g - skok na 13.řádek
- '' - návrat na řádek, kde jsem byl před posledním skokem
- `` - návrat na místo, kde jsem byl před posledním skokem
- ma - označení místa v textu marka (lze užít a-zA-Z)
- 'a - skok na řádek označený 'a'
- `a - skok na místo označené 'a'
- undo/redo
- u - zpět (opět funguje opakování '3u' 3x 'undo') příkaz 'xxx' jsou tři kroky narozdíl od '3x' což je jeden krok
- ^r - vpřed
- U - vrátí aktuální řádek do tvaru 'než jsem na něj skočil'
- vyhledávání
- f'znak', F'znak' - hledej 'znak' v rámci aktuálního řádku (směrem ke konci/začátku řádku)
- /- hledám určitý řetězec směrem ke konci souboru (př./ahoj hledej 'ahoj')
- ? - hledám určitý řetězec směrem k začátku souboru (př. ?ahoj hledej 'ahoj')
- n/N- hledej další výskyt stejným/opačným směrem
(obecně lze vyhledávat ne jen konkrétní řetězce, ale pomocí regulárních
výrazů je možné
vyhledávat pomocí určité 'masky')
- # - hledej stejné slovo jako to, na kterém jsi kurzorem
- záměna
:'rozsah's/řetězec/zaměnit za řetězec/'volby
rozsah může být:
- nic - záměna se použije jen pro aktuální řádek
- % - záměna se použije pro celý soubor
- <,'><,’> - záměna v rámci bloku (tj. označíme blok a zmáčkneme :)
volby:
- i - nerozlišuj velká/malá písmena
- g - změnu použij pro všechny výskyty na daném řádku
- c - před každou změnou se zeptej
nastavení pro vyhledávání:
- :set hlsearch (set nohlsearch) - zvýrazní najité řetězce
- nohlsearch - pro tuto chvíli vypne zvýraznění (volba hlsearch ale zůstane zapnuta)
- :set wrapscan - prohledává stále dokola (když není další výskyt ke konci textu začne vyhledávat znovu od začátku)
Záměna malých písmen za velká a naopak
- označený blok převedeme příkazem u na malá písmena
- označený blok převedeme příkazem U na velká písmena
-
bloky-kopírování/mazání/operace v rámci bloku
označování bloku
- v - označuji blok typu 'od poloviny řádku' do 'poloviny řádku'
- V - označuji blok 'po celých řádcích'
- ^v - označuji 'sloupcový' blok
s označeným blokem mohu:
- d - smazat
- y - 'kopírovat do schránky'
- Y - do schránky se zkopíruje aktuální řádka
- : - automaticky se doplní za "'<,'>" a mohu např. zaměňovat jen v rámci bloku "'<,'>s/ahoj/nazdar/"
poslední smazaná 'jednotka' se automaticky ukládá do 'schránky'
vložení bloku:
- p - za kurzor (za řádek)
- P - před kurzor (před řádek)
(např. xp prohodí písmenka - smaže písmeno na kurzoru a vloží ho před aktuální znak)
-
doplňování slov
- ^p,^n - navrhuje jaké slovo bychom 'mohli chtít napsat', navrhuje slova která nachází směrem
k začátku/konci textu (případně taková, která odpovídají tomu co už jsme napsali)
- ^xf - navrhuje možná jména souborů (doplňování, obdobně jako tab v příkazové řádce)
-
okna (dělení obrazovky)
- :split - rozdělí obrazovku horizontálně (split novy_soubor rozdělí obrazovku a v horní části zobrazí obsah souboru novy_soubor)
- :vsplit - rozděli obrazovku vertikálně
- ^w+kurzorová šipka přesun do příslušné části obrazovky
-
porovnání dvou souborů
vim -d soubor1 soubor2
vim -d seznamprv1 seznamprv2
-
makra - 1.typ tj. zopakuj co jsem ti ukázal
. - prostě zopakuje předchozí příkaz
např. chci vymazat všechny řádky kde se vyskytuje slovo 'karel'
/karel - najdi řádek kde je 'karel'
dd - smaž tento řádek
n - najdi další řádek, kde je 'karel'
. - zopakuj předchozí příkáz (což bylo smazání řádky)
učení více příkazů
v příkazovém režimu qa - budu definovat makro na písmeno a
posloupnost příkazů
v příkazovém režimu q tj. ukončení 'učení'
v příkazovém režimu @a - zavolám makro definované pro písmenko a
cv.
Otevřete si soubor seznam1.txt, tj. seznam ve tvaru prijmeni jmeno, „něco“.
Chci ho ve tvaru jmeno prijmeni, a to „něco“
ESC … - dostanu se do příkazového režimu
qa - definuji makro pro písmenko a
první řádek je
Prijmeni1 Jmeno1, "nějaké další informace"
^ skočím na začátek řádku
dw jsem smazal Prijmeni1 (mám ho ve schránce)
e skočil jsem na konec slova
a␣ připsal jsem mezeru za prijmeni1
ESC návrat do příkazového režimu
p jsem vložil jmeno1
x smažu mezeru, která je za příjmením
↓ přesunu se na nižší řádek
q skončím definici makra pro 'a'
druhý řádek je:
Prijmeni2 Jmeno2, … - jsem někde v rámci slova Jmeno2 v příkazovém režimu
SHIFT+G skočím na konec souboru a zjistím, že tento soubor má 718řádek
’’ skočím zpět na 2.řádek
717@a 717 zopakuj makro definované pro klávesu a
… a je hotovo
-
makra - 2.typ tj. psaní příkaz po příkazu
tato makra lze psát pro příkazový (:map) tj. použijí se, když jsem v příkazovém režimu
i pro vkládací režim (:imap) tj. použíjí se, když jsem ve vkládacím režimu
tato makra se dají zadat i jako 'trvalá' do souboru .vimrc, sem se píšou bez úvodní dvoutečky
cv. makro pro vkládací režim - doplnění párové (kulaté) závorky
:imap ( ()^[i
mapuji pro vkládací režim makro, které se spustí tehdy, když napíšu levou kulatou závorku tj. první kulatá závorka po 'imap'
závorka byla 'pouhým' spoutěčem tj. zatím se nic nenapsalo
stále jsem ve vkládacím režimu
napíšu levou a pravou kulatou závorku
^[ je náhrada za stisk ESC, toho dosáhnu takto:
^V - tím 'odstraním' funkci dané klávesy
ESC - stisk Escape
tím se dostanu do příkazového režimu
pomocí příkazu i říkám, že vkládám před znak na kurzoru
od této chvíle kdykoliv napíšu '(' tak se automaticky doplní uzavírací ')'
pozn. stejně funkční makro by bylo možné definovat i takto:
:imap ( ()^[←
cv.
makro pro příkazový režim, vytvoří 'kostru' HTML dokumentu
:map htm i<HTML>^M<HEAD>^M<HEAD>^M<BODY>^M<BODY>^M<HTML>^[?BODY^MO
:map htm - kdykoliv v příkazovém režimu napíšu htm tak se udělá:
i - přechod do vkládacího režimu
<HTML>^M<HEAD>^M<HEAD>^M<BODY>^M<BODY>^M<HTML> - napíše se kostra dokumentu
^M - jsem vložil jako ^V[ENTER] (tzn. odřádkování)
^] - návrat do příkazového režimu (^V[ESC])
?BODY - najdi řetězec 'BODY' směrem k začátku textu + [ENTER]
O - začni psát na nový řádek nad řádkem aktuálním
-
folding
použije se např. když v zdrojovém kódu pro program je dlouhá funkce
označím řádkový blok
:’<,’>fo
označený text se 'sbalí' do jednoho řádku
na příslušném místě příkaz zo/zc rozbalení/sbalení
-
nastavování set něco resp. set noněco
set hlsearch set nohlsearch – vyhledaný text bude zvýrazněn „podsvícením“
set number set nonumber – číslování řádků (čísla ale nejsou součástí textu)
set list set nolist – zobrazuje neviditelné znaky ($ - konec řádku, ^I – tabelátor)
-
zalámání vybrané části textu
gq