Vim všude, kam se podíváš i v roce 2020

VIM je program, který není potřeba většině programátorů představovat. Klíčovou vlastností je možnost jej plně ovládat jen pomocí klávesnice. Popularitu tohoto přístupu ilustruje jak jeho používanost (např. asi 20% mezi programátory dle Stack Overflow Developer Survey 2019), tak i množství navazujících projektů. A o tom bude následující příspěvek.


Obsah
  1. Cesta k „VIMu”
    1. Poznámka k „smysluplnosti” zkratek ve VIMu:
  2. Editor alá VIM
    1. Přehled zkratek a moje úpravy
  3. Terminál alá VIM
    1. Rozdíly ve vyhledávání
  4. Souborový manažer alá VIM
  5. Webový prohlížeč alá VIM
  6. K dalšímu zkoumání
    1. Pokud je VIM pro vás nový pojem…

Cesta k „VIMu”

Abych pravdu řekl, dlouhou dobu mně VIM nelákal. Změna příšla až s novou verzí Ubuntu. Proč? No, šlo o Unity/HUD – tedy globální nabídku programů s možností vyhledávání. V praxi, když chcete například uložit soubor, musíte si buď pamatovat1 klávesovou zkratku Ctrl+s, nebo jít do nabídky SouborUložit.

V Ubuntu a MacOS jsou/byli nabídky globálně na horní liště a v Ubuntu po zmáčknutí klávesy Alt šli fultextově prohledávat. Což lze vlastně chápat jako klávesovou zkratku Alt+ul (hypoteticky pro uložení, tj. začátek slova Uložit). Mně se na tom líbí „hlubší” důvod, proč Alt+ul vyvolá právě uložení.

Každopádně, po ukončení vývoje ze strany vývojářů Ubuntu, jsem si až tehdy plně uvědomil, že podobně „smysluplné” klávesové zkratky existují v programu VIM. A díky jeho popularitě, existuje spousta programů/rozšíření umožňující stejné ovládání i mimo tento editor.

Poznámka k „smysluplnosti” zkratek ve VIMu:

Pro účely této poznámky můžeme rozlišit

  • „Akční” klávesy: Například c resp. d značící „změň” (z angl. change) resp. „odstraň” (delete).
  • „Navigační” klávesy: Například l resp. w značící „písmeno” (letter) resp. „slovo” (word).

A tedy kombinacemi:

  • dw smažeme jedno slovo pod kurorem
  • c3l provedeme „změň tři písmena”

Více lze nalézt v kapitole K dalšímu zkoumání.

Editor alá VIM

Samotný editor VIM je konzolový a lze jej rozšiřovat pomocí různých pluginů. Osobně jsem se ale s celým ekosystémem nesžil natolik, abych jej používal jako svůj primární editor.

Dobrou zprávou je, že pro většinu nejpopulárnějších editorů či IDE existují možnosti aktivování tzv. „vi(m) módu”. Například pro můj editor Visual Studio Code existuje [VSCodeVim].

Přehled zkratek a moje úpravy

Přehled standardních zkratek lze nalézt v [VSCodeVimCS]. Svoje úpravy se snažím redukovat na nejnutnější změny. První skupinu používám většinou i mimo editory, druhá skupina jsou „vylepšení” pro českou klávesnici a nakonec mám skupinu pomocných s využitím <leader> (používám klávesu \). Podrobněji viz [my-vim-dotfiles].

  • ;:, U<c-r> a ú:nohl
  • ž^, č$ a K (opak J)
  • <leader>cw (změna slova s možností opakovat pomocí ., podobně pro …b), <leader>pa (vložení z registru za konec slova, analogicky …A/i/I), <leader>o (vložení řádku v normálním módu, analogicky O), <leader>,o (vložení čárky na konec řádku a odentrování, analogicky ;)
  • Nakonec čistě pro VS Code:
    • Pomocí <leader><leader> lze vyvolat tzv. „easymotion” mód.
    • csiw"' změní úvozovky okolo slova pod kurorem resp. dsiw" je smaže (t je, v tomto případě místo ", zástupný symbol pro obecný HTML tag), podobně lze například pomocí ysiw<b> obalit vybrané slovo tagem <b>.
    • gs zavolá workbench.action.showAllSymbols, gf volá seito-openfile.openFileFromText (viz Open file).
    • Pro zprovoznění záložek používám Bookmarks a příkazy bookmarks.toggleLabeled, bookmarks.toggle a bookmarks.listFromAllFiles.

Poznámka: V insert módu lze taktéž vkládat texty v registrech pomocí <c-r> a následně písmenkem registru, přičemž lze použít i - (smazaný text pomocí d) apod.

Terminál alá VIM

Pro bash stačí přidat set -o vi do .bashrc (vizuálně rozlišit módy lze v souboru .inputrc), PowerShell pak tuto změnu umožňuje pomocí Set-PSReadlineOption -EditMode vi – moje nastavení (celé soubory) lze nalézt v [my-vim-dotfiles].

Rozdíly ve vyhledávání

Oba interpreti příkazů umožňují vyhledávání. Rozdíl spočívá v tom, zda defaultně hledají od nejnovějšího příkazu. Ve výsledku, pro hledání od posledně zadaného příkazu po nestarší je potřeba v PowerShellu volit klávesu /, zatímco bash stejné chování provede pro ?.

Souborový manažer alá VIM

Pro správu souborů lze použít konzolový správce souborů Vifm (pro Windows doporučuji využít [Chocolatey]). Moje úpravy jsou opět dostupné k nahlédnutí v [my-vim-dotfiles]. Primárně jsem měnil příkazy pro práci s zip archivy.

Webový prohlížeč alá VIM

Animace používání: o → otevření nové stránky, gi → fokus do prvního políčka ve formuláři na stránce, …

Animovaná ukáza použití rozšíření „tridactyl”. Například ukázka „vimperator”.

Pro Firefox existuje projekt [tridactyl], moje úpravy opět v [my-vim-dotfiles]2. Ale vlastně jsem jen vyměnil d pro zavření panelu za dd.

Analogií „easymotion” je zde „vimperator”, tedy například kombinací ;f lze odkazy na stránce vyvolat dle písmenka, které se u nich zobrazí (viz animace).

K dalšímu zkoumání

Pokud je VIM pro vás nový pojem…

…doporučuji nyní spíše přejít na návody pro VIM jako [tutoriál], [DistroTube] či [Best Vim]. Pro instalaci ve Windows použijte [Chocolatey].

  1. [tutoriál] Vim - Spouštíme #1 - Tutoriály česky
  2. [DistroTube] The Vim Tutorial - Part One - Basic Commands – Video tutoriál v angličtině, nepřehlédněte i navazující díly!
  3. [Chocolatey] Odkaz na návod k projektu „Chocolatey” – Pro potřeby tohoto článku nás zajímají balíčky VimVifm.
  4. [Best Vim] Odkaz na Wiki projekt shrnujcí návody a rady k VIMu
  5. [my-vim-dotfiles] Můj repozitář pro „dotfiles” – Pro potřeby tohoto příspěvku: .vimrc, vifm, PowerShell (vi mód), bash (vi mód), .inputrc, firefoxVSCode (část nastavení zkratek).
  6. [VSCodeVim] Rozšíření „VSCodeVim” pro editor VS Code
  7. [VSCodeVimCS] VSCode and Vim - Cheatsheet – Přehledový článek k [VSCodeVim] v angličtině
  8. [tridactyl] Rozšíření „tridactyl” pro Firefox – Přidává do Vimu podobnou navigaci a klávesové zkratky, také tzv. „easymotion” resp. „vimperator” navigaci. Defaultní verze modifikuje stránku „Nový panel”! Alternativní verze je dostupná v tridactyl_no_new_tab_beta-latest.
  9. [arabesque] Články o VIM tipech na blogu Arabesque (EN) – Například Special characters in Vim.
  10. [onivim] Onivim 2 - Modal Editing from the Future
  11. [vsc_and_neovim] VSCodium & Neovim
  1. Dobře, takhle je dost konzistentí napříč programy, ale už i u ní ne každému může být jasné, proč zrovna Ctrl. A co další možnosti uložení? 

  2. Lokální nastavení lze importovat resp. exportovat pomocí :source --url [URL] resp. mkt. Podrobněji viz [tridactyl], sekce FAQ