Editor vim - příkazový řádek

Otevření a procházení dalších souborů

:n jmeno4 jmeno5prida do seznamu souboru nove soubory. Ostani (krome aktualne otevreneho souboru) jsou ze seznamu odstraneny
:e jmeno (:e!)prida dalsi soubor do seznamu (stare soubory jsou stale v pameti)
:nprikaz next zkontroluje zda byly zapsany zmeny a otevre k editaci dalsi soubor ze seznamu
:n!to same jako :n, jen zahodi neulozene zmeny
:N vrati se o jeden soubor zpatky (s kontrolou zapisu)
:rew (:rew!)vrati se znovu k editaci prvniho souboru
:e + jmenoprechod na posledni radku jineho souboru
Specialni znaky:
% reprezentuje aktualni soubor
# reprezentuje jmeno predchoziho souboru
:e# (:n#) = navrat k predchozimu souboru
:bd zrusi aktualni buffer (uzavre soubor)
:b1 vrati se na prvni buffer
:filesseznam bufferu
:f nebo :filezobrazi nazev aktualniho bufferu (souboru), počet řádků a aktuální pozici v procentech
Ctrl+gTotéž co :f
:r souborvlozi do otevreneho dokumentu obsah souboru soubor pod aktualni radek
:-r souborvlozi do otevreneho dokumentu obsah souboru soubor nad aktualni radek

Dočasné opuštění editoru

:! prikazvystup se vypise na obrazovku. Klavesou <Enter> se obnovi obsah obrazovky.
:r! prikazvystup se stane obsahem editovaneho souboru.
!!opakuje posledni prikaz
:shspusti se shell. Ukoncenim shellu se vrati do editoru

Při spouštění příkazů pomocí :! (atp.) je možné předat příkazu jako argument %, který editor vim zamění za cestu k editovanému souboru. (Spuštěný program pracuje s uloženým souborem, tj. neuložené změny se k programu nedostanou.).
Například :!php % spustí program php s argumentem „cesta k aktuálnímu souboru“.

Zápis bufferu do souboru

:wzapsani obsahu docasneho pracovniho prostoru (bufferu) do souboru.
:w jmenoobsah bufferu bude zapsan do souboru uvedeneho jmena. (ovsem nasledne ulozeni :w uklada opet do puvodniho souboru!)
:sav jmenoobash bufferu bude zapsan do souboru noveho jmena. VIM nadale pracuje s timto souborem
:w >> jmenoobsah bufferu bude pripojen na konec soubou uvedeneho jmena.
:M,Nw jmeno rozsah textu mezi radky M az N bude zapsan do souboru uvedeneho jmena. Misto M,N muze byt libovolny rozsah.
:Mw >> jmenozapise radek cislo M na konec souboru uvedeneho jmena

Ukončení editoru

:q (:q!)Ukonči editor (s vykřičníkem se ukončí i když nejsou uloženy změny)
:wqZapíše změny a ukončí editor
ZZUkonči editor
:xUkonči editor

Okna

Vytváření a rušení oken

:Nsplit [soubor.txt]rozdeli obrazovku na 2 okena. Nove okno bude N radku vysoke. Pokud neni N uvedeno, rozdeli se okno na pulku. Do noveho okna se nacte soubor.txt
:newOtevře nové okno (jako :split)
:Nvsplit [soubor.txt]rozdeli obrazovku vertikalne. N udava pocet sloupcu. Pokud neni uvedeno, rozdeli se okno na pulku.
:closeZavře aktuální okno. Posledni okno zavrit nejde.
:qZavře aktuální okno. Pokud je posledni, ukonci editor

Klávesové zkratky pro ovládání oken

CTRL+w CTRL+wpřechod mezi okny
CTRL+w šipkaPřechod na okno (ve směru šipky)
CTRL+w +zvětšení aktuálního okna
CTRL+w -zmenšení aktuálního okna
Zlávesové zkratky fungují v příkazovém režimu, ne ve vkládacím!

Záložky

Volba -p editoru VIM při spuštění otevře záložky. Názvy souborů v záložkách se zobrazují na prvním řádku okna. Každá záložka může mít otevřeno několik souborů (viz Otevření a procházení dalších souborů).

:tabnewOtevře novou záložku
:tabn n(next) přejde na další (n-tou) záložku. n je nepovinné.
gtpřejde na další záložku (v příkazovém režimu)
:tabp(preview) přejde na předchozí záložku
:tabfirstpřejde na první záložku
:tablastpřejde na poslední záložku

Souborový systém

:SexOtevře horizontální okno, které obsahuje pohled na souborový systém
:20VexOtevře vertikální okno, které obsahuje pohled na souborový systém. Okno bude 20 znaků široké.
:TexOtevře novou záložku, která obsahuje pohled na souborový systém
kPohyb nahoru
jPohyb dolů
EnterPřechod do adresáře / otevření souboru.

Editace obsahu

Zpracování textu pomocí příkazů shellu

:! programspustí program a zobrazí jeho výstup. Klávesou Enter se pak vrátíte do editoru
:!!Zopakuje poslední příkaz
:r! prikazProvede příkaz a jeho výstup připojí do souboru

Před příkazem ! může být rozsah. Program pak dostane na standardním vstupu řádky z rozsahu a výstup programu řádky nahradí.

Příklad

:.,+5! sort
Setřídí 6 řádek v souboru (Aktuální řádku a 5 dalších), viz sort
:.!tr A-Z a-z
Na aktuálním řádku zamění všechna velká písmena za malá, viz tr
:.,+4!wc -w
nahradi 4 radky poctem slov, viz wc

Mazání textu

:10,15dsmaze radek 10 az 15
:%dsmaze cely editovaci buffer

Přesuny textu

:'p,'qm.presune text mezi dvema pozicemi oznacenymi jako p a q za pracovni radku.
:1O,30m$umisti text mezi radkem 10 a 30 na konec souboru.
:10,30m0umisti text mezi radkem 10 a 30 na zacatek souboru.

Další možností je přesouvaný text smazat a příkazem p nebo P vložit tam, kam je potřeba.

Substitute

Prikaz pro substituci vyhleda adresovane radky a zameni v nich hledany retezec za retezec novy. Obecny format prikazu substitute je:

:[adresa]s/retezec_hledany/retezec_novy/<Enter>
:24s/man3/max3/Slouží pro záměnu řetězce man3 na řádku 24 za řetězec max3

:s/novacek/kamilka/ provede substituci na kazdem radku jen jednou. Pro nahrazeni vsech vyskytu (retezce novacek za kamilka), je treba provest globální substituci na řádku. To se provede přidáním g na konec příkazu.

:s/novacek/kamilka/g
:24,55/man3/max3/g pro oblast radu 24 az 55 nahrad vsechny man3 za max3
:1,$/man3/max3/gMisto 1,$ lze uzit kratsi zapis %

Regulární výrazy

V příkazu substituce lze používat regulární výrazy.

EXAMPLES

:1,17s/$/.
na prvnich 17 radcich pripoji na konec radku tecku
:,+10s/^/TEXT/
vlozi na deset radek od aktualniho na zacatek radku TEXT
:10,20s/^/#
vklada na zacatek radku 10 az 20 znak #.
:s/./Jedna
nahradi prvni znak na radku slovem "Jedna"
:1,$s/s...o/SLOVO/g
nahradi vsechny retezce, ktere zacinaji znakem s a konci znakem o a jejichz delka je 5 znaku
:%s/\<[abc]/\u&/g
zkonvertuje prvni znak kazdeho slova, ktere zacina znakem a, b nebo c, na velke pismeno.

Speciální znaky

%
predstavuje cely radek
\<
predstavuje zacatek slova
[abc]
jeden ze znaku abc
&
zastupuje cely text nalezeny podle vzorku
\u
prvni znak textu, ktery byl nalezen, ma byt zkonvertovan na velke pismeno
\U
konverze vsech pismen na velka do konce retezce
\L
konverze vsech pismen na mala do konce retezce
\E
konverze se provede ke znacce \E (ne do konce retezce)

EXAMPLES

:s/\<.*\>/\U&/
provede konverzi vsech slov radku na velka pismena:
\< je zacatek slova
. libovolny znak ruzny od newline
* znak . se muze opakovat 0 a vicekrat
\> nasledovany koncem slova
:%s/\([Uu]nix\)\(system\)/\U\1\E\2/g
prikaz najde vsechna slova Unixsystem nebo unixsystem a zmeni je na UNIXsystem. (Vzorek pro hledani je rozdelen do 2 casti pomoci zavorek):
%zpracovat vsechny radky od zacatku
\( zacatek casti 1 (Unix nebo unix)
\) konec casti 1
\( zacatek casti 2 (system)
\) konec casti 2
/ zacatek textu pro nahradu
\U zapnuti konverze na velka pismena
\1 cast 1
\E vypnuti konverze
\2 cast 2
/ konec textu pro nahradu
g (global) nahradit vsechny vyskyty na radku

Speciální znaky (metaznaky)

:set nomagicvypne význam většiny metaznaků.

Metaznaky

\ (zpetne lomitko) rusi vyznam nasledujiciho metaznaku. (\\ znamena 1 lomitko). Je-li vyznam metaznaku vypnut, pak naopak pomoci \ se specialni vyznam zapne.
^ zacatek radku - nelze vypnout pomoci :set nomagic
$ konec rakdu - ---------------||----------------
\< zacatek slova - ---------------||----------------
\> konec slova - ---------------||----------------
*libovolny pocet opakovani predchoziho znaku (napr. ab* reprezentuje a, ab, abb, abbb atd.)
\+jeden nebo vice opakovani (ab\+ reprezentuje ab, abb, abbb atd.)
.jeden libovolny znak (krome noveho radku)
.*libovolny nejdelsi retezec, dlouhy nula nebo vice znaku.
[seznam]jeden libovolny znak ze seznamu (viz priklady dale).
Uvnitr zavorek [] straci spec. znaky svuj vyznam
[0-9]jedna z cislic 0 az 9
[a-z0-9-]reprezentuje jeden znak, ktery je male pismeno, cislice nebo pomlcka (pomlcka musi byt vzdy az na konci).
[]^-]jeden ze znaku ],^ nebo -
[^seznam]jeden libovolny znak (krome noveho radku), ktery neni v seznamu
[^9-0]jeden libovolny znak, ktery neni cislice
[1-9][0-9]*cislo s alespon jednou cislici, pricemz prvni cislice nesmi byt nula.
\(vyraz\)vyraz pujde pouzit v nahrazujicim retezci, kde se na nej odkazuje pomoci \1 na prvni ozavorkovanou cast \2 na druhou atd.
&cely retezec vyhovujici hledanemu vzoru
:s/operacni system/& UNIX/ nahradi retezec operacni system retezcem operacni system UNIX
:s/[1-9][0-9]/(&) nahradi dvoumistne cislo stejnym cislem v zavorkach
Pro nahrazeni znakem & musi byt zrusen spec. vyznam tohoto znaku zpetnym lomitkem
'<zacatek Visual bloku (blok oznaceny po prikazu v)
'>konec -----------------||--------------------

EXAMPLES

Radek obsahujici same # zamenime za radek obsahujici same *:

:s/#/*/g

Pokud chceme zamezit zmenam retezcu uprostred slova, muzeme pouzit posloupnosti \< pro zacatek slova a \> pro konec slova.

:s/\<ten\>/tento/g

Predchozi priklad nezmeni slovo tenhle na tentohle.

Nasledujici priklad vytvori radek HTML tabulky z textu (za predpokladu, ze jsou sloupce od sebe oddeleny dvema a vice mezeramy):

prvni bunka     druha bunka
:s/\([a-z ]\+[a-z]\)   *\([a-z ]\+\)/<tr><td>\1<\/td><td>\2<\/td><\/tr>
<tr><td>prvni bunka</td><td>druha bunka</td></tr>

Prikaz substituce se neda opakovat prikazem . (tecka), ale &.

Znak ~ u substituce znamena minuly nahrazujici retezec.

Toto je dalsi veta a dalsi vety nasleduji.	:s/dalsi/DALSI/
Toto je DALSI veta a dalsi vety nasleduji.	&
Toto je DALSI veta a DALSI vety nasleduji.	:s/~/next/
Toto je next veta a DALSI vety nasleduji.

Global

Global vybere radky na zaklade zadaneho retezce a na vybrane radky aplikuje definovanou cinnost. Obecny format prikazu global je:

:g/retezec/cinnost        # pro vsechny radky, kde se retezec vyskytuje
:g!/retezec/cinnost       # pro vsechny radky, kde se retezec nevyskytuje
:g/body/p
zajisti vypis vsech radku, ktere obsahuji retezec "body".
:g/prom2/s/prom2/hodnota/p
:g/prom2/s//hodnota/p
Vyhledá všechny řádky obsahující řetězec prom2 a zamění prvni výskyt tohoto řetězce na řádce řetězcem hodnota. Vsechny zmenene radky pak jeste vypise na obrazovku. (Druhý řádek je zkrácená verze téhož).
:g/prom2/s/prom2/hodnota/gp
:g/prom2/s//hodnota/gp
Zamění všechny výskyty řetězce prom2 v editovaném souboru za řetězec hodnota. (Druhý řádek je zkrácená verze téhož).

Substituci je mozne omezit rozsahem:

:10,40g/case/s//rasa/gc
Nahrazuje na radkach 10 az 40, ktere vyhovuji vzoru. Prikaz c (case) na konci zpusobi interaktivni rezim - retezec se nahradi pouze po zadani y jako souhlas pro nahrazeni
:g/plat/d
vymaze vsechny radky obsahujici retezec "plat".
:g!/plat/d
vymaze vsechny radky, ktere retezec "plat" neobsahuji

Použití editovacího scénáře

Lze vytvorit soubor obsahujici prikazy editoru ex. Kazdy prikaz je na zvlastnim radku a nezacina dvojteckou. Spusti se pomoci:

:so jmeno_scenare

Soubor (scenar) muze vypadat napriklad takto:

%s/0/zero/g
%s/1/one/g
%s/2/two/g
%s/3/three/g
%s/4/four/g
%s/5/five/g
%s/6/six/g
%s/7/seven/g
%s/8/eignt/g
%s/9/nine/g

Taktový speciální editovací scénář je soubor ~/.vimrc, kam se zapisují příkazy, které se spouští při každém startu editoru VIM. O tom už ale více viz následující kapitola.

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