Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé
28. Vim
Vývoj vanilkové příchuti Linuxu: Knihy kouzel byl 1. března 2025
ukončen. Tento text je zachován jako historický, ale chyby již nejsou
opravovány. Odnože projektu pod kompatibilní licencí jsou vítány.
Tato kapitola se věnuje editoru Vim. Vim je textový editor (původně terminálový,
ale nabízí v samostatném balíčku také GUI), práce s nímž je založena na přepínání
mezi řadou režimů, z nichž nejdůležitější jsou základní režim, ve kterém se zadávají příkazy,
kterými uživatel ovládá editor, a vkládací režim, v němž uživatel píše text.
Tato verze kapitoly se nevěnuje stylu „práce s objekty“ a vyhýbá se funkcím,
jejichž činnost závisí na konkrétní syntaxi editovaného textu (např. skok na deklaraci proměnné pod kurzorem).
Rovněž nepokrývá doplňování s našeptáváním (autocomplete), skládání (folding), režim srovávání „vimdiff“,
specifika GUI varianty (gvim) a zásuvné moduly (plug-ins).
Nedostatečně pokrývá příkaz „g//“.
Základní režim (také „normální mód“, „command mode“) je výchozí po spuštění programu. Každé zaklínadlo v této kapitole, není-li uvedeno jinak, předpokládá zadání v základním režimu. Z každého jiného režimu se můžete vrátit zpět do základního režimu jedním nebo více stisky klávesy Esc.
Režim vkládání je režim, ve kterém se zapsané znaky vkládají do editovaného textu. Jeho variantou je režim přepisování, kdy zapsané znaky přepisují stávající znaky textu.
V režimu příkazové řádky místo textu otevřeného souboru upravujete příkaz, který bude vykonán teprve po potvrzení klávesou Enter. Do tohoto režimu vstoupíte ze základního režimu klávesou „:“.
V režimu výběru posouváním kurzoru vytváříte výběr, tedy úsek textu, na který pak aplikujete nějakou operaci. Pokud to váš terminál podporuje a zapnete ovládání myší, budete moci výběr vytvářet i pomocí myši.
Další režimy můžete najít v dokumentaci, ale pravděpodobně o nich nyní nepotřebujete vědět.
Kurzor je značka označující jednoznačnou pozici v upravovaném textu, k níž se budou vztahovat prováděné operace.
Aktuální řádek je řádek upravovaného textu, na kterém se nachází kurzor.
Pohled je výřez z upravovaného textu zobrazený uživateli; vždy zahrnuje aktuální řádek. Normálně okno editoru obsahuje pouze jeden panel a ten obsahuje pouze jeden pohled. Příslušnými příkazy však lze panel rozdělit na více pohledů a lze také otevřít další panely a ty také rozdělit. Nicméně uzavřením posledního pohledu z panelu se vždy uzavře i panel a uzavřením posledního panelu se uzavře celý editor.
Vim má 26 schránek, označených písmeny anglické abecedy „a“ až „z“. Do těchto schránek se ukládají vyjmuté texty (které můžete později vložit na jiné místo souboru) a makra (která můžete později spustit). Při zápisu do schránky můžete její označení uvést malým písmenem (pak se stávající obsah přepíše) nebo velkým písmenem (pak se nový obsah připojí za stávající).
Registr je schránka označená písmenem (malým či velkým), nebo zvláštní registr označený číslicí či speciálním znakem.
„Programátorské slovo“ je sekvence jakýchkoliv nebílých znaků; „standardních slovo“ je sekvence nebílých znaků, které jsou buď alfanumerické, nebo tvoří interpunkci. To znamená, že např. „a1a;;;B2B“ je jedno programátorské slovo, ale tři standardní! (Podobně „Ahoj, světe!“ jsou dvě programátorská slova, ale čtyři standardní.)
Poznámka: parametr „kde“ u příkazu „:s“ může být:
prázdný řetězec pro nahrazování v aktuální řádce;
znak % pro nahrazování v celém souboru;
číselný rozsah řádků (např. „5,25“) pro nahrazování na řádcích v uvedeném rozsahu „včetně“.
@nahradit první výskyt podřetězce/všechny výskyty#1 (14), (15)
:kdes/\Vpodřetězec/čím nahradit/Enter
:kdes/\Vpodřetězec/čím nahradit/g[c]Enter
@nahradit první shodu s reg. výrazem/všechny shody#2 (16)
Je-li zadáno více souborů, otevře je: v pohledech nad sebou (shora)/v pohledech vedle sebe (zleva)/v panelech. Výchozí chování: Je-li zadáno více souborů, otevře se pouze první a ostatní jsou otevřeny skrytě a uživatel se na ně musí přepnout příkazem „:n“.
"+příkaz"
Po otevření vykoná příkaz v režimu příkazové řádky (+ se nahradí „:“). Tento parametr lze zadat opakovaně, ale maximální počet je omezen. Nejčastější použití je s číslem řádky (např. „+12“).
☐ -n
Vypne použití odkládacího souboru, vše udržuje jen v paměti.
☐ -u vimrc
Místo běžných konfiguračních souborů (vimrc) použije uvedený.
Příkaz „view“ otevře soubor v režimu „jen pro čtení“, „vim“ ho otevře pro úpravy.
Editor Vim lze na Ubuntu doinstalovat tímto příkazem:
sudo apt-get install vim
Místo „vim“ si můžete nainstalovat balíček „neovim“, což je nová, víceméně kompatibilní
implementace téhož editoru. Podle mé zkušenosti se z uživatelského hlediska liší prakticky jen
odlišným výchozím nastavením.
Základní součástí Ubuntu (a mnoha jiných distribucí) je editor „vi“, což je předchůdce Vimu.
V něm však většina zaklínadel z této kapitoly není použitelná.
Doporučuji komukoliv (bez ohledu na úroveň zkušeností) si alespoň jednou projít „kurz“, který spustíte příkazem „vimtutor“ (příkaz zadávejte v bashi, ne ve vimu).
Příkaz „c“ je velmi efektivní v kombinaci s opakováním příkazem „.“ a opakováním vyhledávání příkazem „n“.
Každá schránka si spolu s textem zachovává i „režim“: znakový, řádkový či sloupcový. Je-li schránka ve znakovém režimu, „p“ vloží její obsah za kurzor; je-li v řádkovém režimu, „p“ vloží její obsah za aktuální řádku; je-li ve sloupcovém režimu (což znamená, že vznikla ze sloupcového výběru), „p“ vloží její první řádku za kurzor a následující řádky na odpovídající pozice následujících řádků textu.
Klávesové zkratky editoru Vim jsou optimalizované pro anglickou klávesnici; proto doporučuji s tímto editorem používat rozložení kláves kompatibilní s anglickým.
Doporučuji nastavit si „:set number“ a „:set cursorline“. Editor s nimi podle mě vypadá podstatně lépe.
Většina uživatelů Vimu intenzivně používá příkazy „y“ a „p“ bez uvedení schránky; to se ovšem vyplácí jen tehdy, pokud chcete zkopírovaný text okamžitě někam vložit a pak už ho nebudete potřebovat. V ostatních případech totiž brzy narazíte na problém, že skoro jakákoliv další úprava vám „poslední smazaný text“ přepíše. Doporučuji proto si zvyknout jakékoliv úseky, které si chcete udržet delší dobu, ukládat do schránky „p“ (příkaz bude vypadat např. „"pdd“). Alternativním řešením je směrovat ostatní příkazy mazání a náhrad do zvláštního registru „_“ (např. „"_dd“).
Nastavení provedená příkazem „:set“ z editoru jsou platná jen do ukončení procesu. Pro trvalé nastavení pro nově otevírané instance editoru zapište příkazy „:set“ do souboru „~/.vimrc“ nebo do „/etc/vim/vimrc.local“.
Jeden editovaný soubor může být otevřen ve více pohledech, dokonce i na různých panelech. V těchto případech má ovšem každý pohled svůj kurzor, čehož lze někdy chytře využít.
V začátcích je nejlepším zdrojem informací „Vim Reference: Quick Reference Guide“
a rozhodně doporučuji manuál Pavla Satrapy,
nicméně pokud s editorem Vim nemáte dřívější zkušenosti, určitě si nejprve vyzkoušejte
kurz spouštěný příkazem „vimtutor“.
K referenční příručce můžete získat přístup také přímo v editoru Vim příkazem „:help“,
ale vzhledem k tomu, že Vim se téměř nevyvíjí, neměl by být problém použít online referenční
příručku i s velmi starou verzí Vimu (ne však s „vi“).
1 V případě logických sloupců se tabulátor počítá jako 1 či více sloupců podle své šířky; v případě znakových sloupců se počítá vždy jako jeden znak.
2 K posunu kurzoru nahoru či dolů po řádkách obrazovky místo po řádkách souboru slouží příkazy „gk“ a „gj“.
3 V podřetězci je nutno odzvláštnit zpětná lomítka!
4 Poznámka: vim používá vlastní syntaxi regulárních výrazů, která je nejpodobnější základním regulárním výrazům. Při použití této funkce buďte opatrní a očekávajte problémy se složitějšími výrazy.
5 Jako označení záložky můžete použít malá písmena anglické abecedy („a“ až „z“.)
6 Tento příkaz funguje (za předpokladu správného spárování závorek) přinejmenším pro závorky (), [] a {}.
11 Připojí následující řádku na konec aktuální. Pokud aktuální řádka končí znakem, který není mezera, před připojením tam mezeru vloží. Prázdný řádek nekončí žádným znakem, proto za něj mezeru nevkládá.
21 Pro význam částí „co“ a „čím“ viz zaklínadla týkající se nahrazování textu. Tato varianta se od obyčejného příkazu „:s“ liší jen tím, že místo nad aktuálním řádkem pracuje nad řádky výběru.
22 Pozor! Toto funguje jen tehdy, pokud je obsah schránky ve „znakovém“ režimu; schránka tedy nesmí obsahovat celé řádky ani textový blok!
23 Poznámka: Pozor! Tento příkaz je sám o sobě změnou; k jeho odvolání použijte příkaz „u“, nikoliv Ctrl+R!
24 Zadáte-li schránku velkým písmenem, nahrané stisky kláves se připojí ke stávajícímu obsahu daného makra.
25 Zdá se, že jediný způsob, jak se z pohledu terminálu dostat, je klávesová zkratka „Ctrl+WW“, jiné kombinace v něm nefungují.
26 Obvykle panel uzavřete uzavřením posledního pohledu v něm příkazem „:q“.
27 Hodnota může být prázdná. Pokud textová hodnota obsahuje bílé či speciální znaky (kromě tečky a čárky), musíte je odzvláštnit zpětným lomítkem; použití uvozovek vim, zdá se, nepodporuje..
28 Při použití v konfiguračním souboru „.vimrc“ nahraďte kombinace klávesy s „u“ a čtyřmi hexadecimálními číslicemi odpovídajícím znakem v kódování UTF-8.
29 Při použití v konfiguračním souboru „.vimrc“ nahraďte kombinace klávesy s „u“ a čtyřmi hexadecimálními číslicemi odpovídajícím znakem v kódování UTF-8.
30 Tuto vlastnost jsem příliš nezkoušel/a. Pokud s ní nemáte zkušenosti, doporučuji překódování raději provádět příkazem „iconv“ mimo vim.