Ovládání editoru Vim

O editoru Vim není možné pochybovat. Jeho možnosti jsou tak obrovské, že neznám nikoho, kdo by znal všechny jeho volby a příkazy. Bohužel jeho ovládání je natolik netradiční, že práci s Vimem zvládnou je ti, kteří disponují pevnou vůlí a překonají nelehké začátky. Pro mě Vim nikdy nebyl primárním textovým editorem, ale protože je standardně přítomen po instalaci téměř ve všech linuxových distribucích, často ho používám pro prvotní konfiguraci tohoto operačního systému.

Běžnou editaci textu mám již za ta léta zažitou. Jsou však příkazy, které potřebuji jen občas a ty pak opakovaně hledám v dokumentaci nebo někde na webu. Zde budou postupně přibývat příkazy Vimu, jak na ně budu narážet a bojovat s jejich zapamatováním. Narozdíl od jiných stránek dokumentující možnosti editoru Vim zde nenajdete vyčerpávající seznam všech příkazů a voleb, ale jen ty, které jsem skutečně někdy potřeboval.

Režimy

Práce v různých režimech a přepínání mezi nimi je asi to, čím se Vim nejvíce liší od editorů typu poznámkový blok nebo výborného PSPadu z Windows.

  • Normální režim - ocitnete se v něm po spuštění Vimu. Po stisku kláves se ihned vykonávají příkazy těmto klávesám přiřazené. Z ostatních režimů se do něj zpátky dostanete klávesou ESC.
  • Vkládací režim - z normálního režimu do něj přejdete stiskem některé z kláves i a o I A O, zpátky se dostanete klávesou ESC. Tento režim představuje vlastní editaci textu tak jak jsme zvyklí u klasických editorů. Použití uvedených kláves pro vstup do tohoto režimu určuje, zda budeme text vkládat před nebo za znak označený kurzorem (klávesy i a), na začátek nebo konec aktuálního řádku (klávesy I A), příp. pod nebo nad aktuální řádek (klávesy o O). V tomto případě také dojde k vložení nového prázdného řádku.
  • Režim příkazového řádku - z normálního režimu se do něj přepnete pomocí klávesy : a zpátky pomocí ESC. V tomto režimu Vim vykonává zadané příkazy, které se potvrzují klávesou Enter.

Ukládání textu a ukončení editoru Vim

V normální režimu:

  • ZZ - uložení (pokud byl soubor změněn) a ukončení

V režimu příkazového řádku:

  • w - uložení provedených změn
  • q - ukončení, možné jen v případě, že text nebyl změněn; v případě více oken/panelů zavře aktuální okno/panel
  • qw - ukončení se zapsáním provedených změn
  • q! - ukončení bez uložení provedených změn
  • a - pokud přidáme k volbám "w", "q", provede akci se všemi okny/panely

Pohyb v textu

V normální režimu:

  • gg - přesun na první řádek
  • G - přesun na poslední řádek
  • číslogg nebo čísloG - přesun na řádek daný uvedeným číslem; 7gg tedy způsobí přesun kurzoru na první znak 7. řádku
  • číslo% - číslo určuje část textu v procentech, kam se přesune kurzor; do poloviny textu se tedy dostaneme po zadání 50%
  • w e b - uvedené tři klávesy umožňují různý pohyb v textu po slovech, slovem se zde rozumí buď posloupnost písmen, číslic a podtržítek nebo posloupnost ostatních neprázdných znaků
  • W E B - opět různý pohyb po slovech, jako slovo je teď ale brána libovolná posloupnost neprázdných znaků
  • ( ) - přesun po větách vzad a vpřed
  • { } - přesun po odstavcích vzad a vpřed; za odstavec je považován text oddělený prázdným řádkem
  • % - přesun na odpovídají párovou závorku; za závorky jsou považované nejen tyto klasické ( ) [ ] { }, ale i různé konstrukce jazyka C, např. /* */ #if, #ifdef, #else, #elif a #endif.

Blokové operace

V normálním režimu lze blok textu označit následujícími způsoby (dostanete se do vizuálního režimu):

  • v - text se označuje běžným pohybem kurzoru
  • V - pohyb kurzoru způsobuje označování celých řádek
  • Ctrl v - sloupcové bloky

Následný stisk klávesy o umožňuje přesun kurzoru na opačný konec označovaného textu a upravit tak druhý konec bloku. Označování se nijak neukončuje (ukončit vizuální režim bez "následků" lze samozřejmě pomocí ESC), prostě zvolíte např. jednu z těchto akcí:

Text ze schránky zkopírujete za znak označený kurzorem v normální režimu stiskem klávesy p, před znak označený kurzorem klávesou P.

Hledání textu

normálním režimu:

  • / - hledání vpřed
  • ? - hledání vzad
Dále stačí zadat hledaný text (nebo obecně regulární výraz) a stisknout Enter.
  • n - opakování hledání stejným směrem
  • N - opakování hledání opačným směrem
  • * - hledání slova na kterém je kurzor vpřed
  • # - hledání slova na kterém je kurzor vzad
režimu příkazového řádku je vhodné upravit si vlastnosti hledání:
  • set ignorecase - nerozlišují se velká a malá písmena
  • set noignorecase - rozlišují se velká a malá písmena
  • set smartcase - malá a velká písmena se rozlišují jen v případě, že vámi hledaný řetězec obsahuje alespoň jedno velké písmeno

Nahrazování textu

režimu příkazového řádku:

  • %s/původní/nový/
    - % na začátku určuje, že se operace týká celého textu (jinak by se pracovalo jen s aktuálním řádkem); místo % by mohlo být např. číslo, pak by se nahrazovalo jen na příslušném řádku, dvě čísla oddělená čárkou by zase definovala rozsah řádků
    - g dopsané za poslední lomítko zajistí, že se na každém řádku nahradí všechny výskyty, jinak se nahrazuje jen první
    - c dopsané za poslední lomítko způsobí, že pro jednotlivá nahrazení bude vyžadováno potvrzení (různě klávesami y n ESC a)

Editace textu

normálním režimu:

  • x - smazání znaku
  • dd - smazání řádky
  • u - zpět (undo)
  • Ctrl r - znovu (redo)
  • . - opakovaní poslední akce

režimu příkazového řádku je možné nastavit velké množství parametrů. Hodnotu libovolného parametru lze vypsat pomocí set parametr?. Ty, které lze pouze zapnout nebo vypnout, se zapínají pomocí set parametr, vypínají pomocí set noparametr a přepínají do opačného stavu pomocí set invparametr.

  • set number - zapne číslování řádek
  • set tabstop=hodnota - nastavení velikosti tabulátoru, tabstop lze zkrátit na ts
  • set expandtab - zapnutí nahrazování tabulátorů mezerami, lze zkrátit na et
  • set smarttab - zapnutí "inteligentního" odsazování
  • retab - příkaz provádějící v závislosti na hodnotě expandtab záměnu tabulátoru na mezery nebo obráceně
  • set wrap - zalamování řádek

Okna

normálním režimu:

  • split [soubor] - nové horizontální okno; vsplit [soubor] - nové vertikální okno
  • Ctrl w některá z šipek - přepnutí do dalšího okna daným směrem
  • Ctrl w r - rotace oken; Ctrl w R - rotace oken opačným směrem
  • Ctrl w x - prohození okna s následujícím oknem
  • Ctrl w + - zvětšení okna na výšku; Ctrl w - - zmenšení okna na výšku
  • Ctrl w > - rozšíření okna; Ctrl w < - zúžení okna

Pozor: Ve vkládacím režimu Ctrl w smaže předchozí slovo!

Panely

normálním režimu:

  • tabe [soubor] - nový panel
  • gt - přepnutí do dalšího panelu; gT - přepnutí do minulého panelu
  • tabonly - zavře všechny panely kromě aktuálního

Více o Vimu

Vyhledávače vám naleznou obrovské množství stránkem zabývající se Vimem. Já bych tu rád zmínil stránky http://www.vim.org a pak by zde určitě neměla chybět vynikající Satrapova česky psaná dokumentace.

Přehledy, informace a tak na i-prehled.cz; copyright © 2008 - 2017 Libor Smékal , zveřejněno 6. 6. 2009
Navštivte také Guitares nebo Gitarren.