Editor vim - příkazový řádek
Otevření a procházení dalších souborů
:n jmeno4 jmeno5 | prida 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) |
:n | prikaz 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 + jmeno | prechod 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 |
:files | seznam bufferu |
:f nebo :file | zobrazi nazev aktualniho bufferu (souboru), počet řádků a aktuální pozici v procentech |
Ctrl+g | Totéž co :f |
:r soubor | vlozi do otevreneho dokumentu obsah souboru soubor pod aktualni radek |
:-r soubor | vlozi do otevreneho dokumentu obsah souboru soubor nad aktualni radek |
Dočasné opuštění editoru
:! prikaz | vystup se vypise na obrazovku. Klavesou <Enter> se obnovi obsah obrazovky. |
:r! prikaz | vystup se stane obsahem editovaneho souboru. |
!! | opakuje posledni prikaz |
:sh | spusti 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
:w | zapsani obsahu docasneho pracovniho prostoru (bufferu) do souboru. |
:w jmeno | obsah bufferu bude zapsan do souboru uvedeneho jmena. (ovsem
nasledne ulozeni :w uklada opet do puvodniho souboru!) |
:sav jmeno | obash bufferu bude zapsan do souboru noveho jmena. VIM nadale pracuje s timto souborem |
:w >> jmeno | obsah 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 >> jmeno | zapise 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) |
:wq | Zapíše změny a ukončí editor |
ZZ | Ukonči editor |
:x | Ukonč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 |
:new | Otevře nové okno (jako :split) |
:Nvsplit [soubor.txt] | rozdeli obrazovku vertikalne. N udava pocet sloupcu. Pokud neni uvedeno, rozdeli se okno na pulku. |
:close | Zavře aktuální okno. Posledni okno zavrit nejde. |
:q | Zavře aktuální okno. Pokud je posledni, ukonci editor |
Klávesové zkratky pro ovládání oken
CTRL+w CTRL+w | přechod mezi okny |
CTRL+w šipka | Přechod na okno (ve směru šipky) |
CTRL+w + | zvětšení aktuálního okna |
CTRL+w - | zmenšení aktuálního okna |
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ů).
:tabnew | Otevře novou záložku |
:tabn n | (next) přejde na další (n-tou) záložku. n je nepovinné. |
gt | přejde na další záložku (v příkazovém režimu) |
:tabp | (preview) přejde na předchozí záložku |
:tabfirst | přejde na první záložku |
:tablast | přejde na poslední záložku |
Souborový systém
:Sex | Otevře horizontální okno, které obsahuje pohled na souborový systém |
:20Vex | Otevře vertikální okno, které obsahuje pohled na souborový systém. Okno bude 20 znaků široké. |
:Tex | Otevře novou záložku, která obsahuje pohled na souborový systém |
k | Pohyb nahoru |
j | Pohyb dolů |
Enter | Přechod do adresáře / otevření souboru. |
Editace obsahu
Zpracování textu pomocí příkazů shellu
:! program | spustí program a zobrazí jeho výstup. Klávesou Enter se pak vrátíte do editoru |
:!! | Zopakuje poslední příkaz |
:r! prikaz | Provede 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,15d | smaze radek 10 az 15 |
:%d | smaze 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,30m0 | umisti 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/g | Misto 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 znakemo
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 nomagic | vypne 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
zavorkachPro 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ězcemhodnota
. 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ězechodnota
. (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 zadaniy
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.