Obsah
5. Modální ovládání Vimu, alternativa představená SpaceVimem
6. Hlavní menu SpaceVimu a jeho podmenu
7. Příkazy dostupné v hlavním menu SpaceVimu
11. Modifikace informací zobrazených na stavové řádce
12. Informace o vedlejším režimu
14. Vrstvy – cesta k udržitelné konfiguraci Vimu
15. Pluginy používané SpaceVimem
16. Stručný popis některých použitých pluginů
17. Konfigurační soubor SpaceVimu
18. Modifikace konfiguračního souboru
19. Odkazy na relevantní články na Rootu
1. Textový editor Vim
Jak jsem se již zmínil v perexu dnešního článku, čtenáři se mohli s textovým editorem Vim na stránkách Rootu setkat již nesčetněkrát. Většinou jsme se však zabývali těmi vlastnostmi Vimu, které jsou užitečné pro vývojáře popř. pro administrátory, tj. tím, jak lze Vim používat pro úpravu silně strukturovaných dokumentů (zdrojových kódů, konfiguračních souborů, dokumentů vytvořených ve značkovacích jazycích aj.). Příkladem takového přístupu může být například seriál Textový editor Vim jako IDE (který byl zaměřen na původní Vim, nikoli Neovim). O Vimu se sice běžně mluví jako o programátorském textovém editoru, ovšem ve skutečnosti jsou jeho praktické možnosti mnohem větší; dokonce pro něj vzniká i (dnes ještě nedokonalá, ale přesto existující) alternativa k org-mode.
Obrázek 1: Příklad pluginu pro standardní textový editor Vim, který z tohoto editoru vytvoří užitečný diář.
Značná konfigurovatelnost Vimu a současně i velký počet pluginů, které pro Vim postupem času vznikly, je ovšem dvojsečná zbraň. Pro zkušeného uživatele může být relativně snadné si Vim nakonfigurovat popř. si vybrat sadu pluginů, které mu vyhovuje, ovšem začátečníci či uživatelé, kteří se spíše potřebují soustředit na vlastní práci, by s velkou pravděpodobností uvítali předpřipravenou a otestovanou konfiguraci Vimu, ideálně nastavenou takovým způsobem, aby vyhovovala jak začátečníkům, tak i „power userům“. A právě tento požadavek je do značné míry splněn projektem nazvaným SpaceVim, jímž se budeme zabývat v dnešním článku.
Obrázek 2: Ukázka textového editoru Vim s pluginy, které se snaží napodobit funkcionalitu org mode z Emacsu.
2. Projekt SpaceVim
Jak jsme si již řekli v úvodní kapitole, popíšeme si v dnešním článku potenciálně velmi zajímavý projekt nazvaný příhodně SpaceVim. Jedná se o projekt inspirovaný jiným projektem (resp. přesněji řečeno dokonce dvěma projekty), kterými jsme se již na stránkách Roota zabývali – jedná se konkrétně o Spacemacs [1] [2] a taktéž o Doom Emacs [3]. Připomeňme si ve stručnosti, že jak Spacemacs, tak i Doom Emacs jsou projekty postavené nad klasickým Emacsem, jejichž cílem je zajistit funkční, snadno ovladatelné a do jisté míry i snadno konfigurovatelné prostředí, které je vhodné i pro začátečníky (a to včetně nastavení Org mode, souborového manažeru, balíčků pro vývoj ve vybraných programovacích jazycích atd.). V případě Spacemacsu a do ještě větší míry i Doom Emacsu se tento cíl, alespoň podle mého názoru, podařilo splnit, takže například v Doom Emacsu lze začít editovat texty, programovat, měnit konfiguraci atd. již po jeho instalaci a se znalostí prakticky jediné klávesové zkratky (navíc velmi jednoduché a snadno dostupné – stisku mezerníku).
Obrázek 3: Projekt Spacemacs, s nímž jsme se již na stránkách Roota setkali.
Vraťme se však k projektu SpaceVim, jímž se budeme zabývat dnes. Tento projekt si staví podobné cíle, jako je tomu v případě Spacemacsu a Doom Emacsu – tedy připravit takové prostředí, které je vhodné a použitelné i pro začátečníky, kteří nemusí zkoumat, jak se textový editor konfiguruje, jaké si má naistalovat pluginy, nemusí dokonce ani znát všechny původní zkratky a příkazy Vimu atd. Tento výběr pluginů a konfigurace, která již byla provedena autorem SpaceVimu (včetně dnes populárního tmavého tématu), sice nemusí na sto procent vyhovovat všem uživatelům, ovšem i změny v konfiguraci jsou možné a relativně snadné (editují se totiž konfigurační soubory ve formátu TOML (Tom's Obvious Minimal Language) a nikoli mnohdy poněkud kryptické skripty napsané ve Vim Scriptu). Projekt SpaceVim by tedy mohl přitáhnout k Vimu nové uživatele.
Obrázek 4: Doom Emacs po spuštění. Zde je již jasně vidět inspirace slavnou hrou Doom.
Obrázek 5: Nápověda k Doom Emacsu napsaná přímo v Org mode.
3. Instalace SpaceVimu
Instalace SpaceVimu je snadná, ovšem SpaceVim vyžaduje ke své činnosti několik programů, které již musí být dopředu nainstalovány. V první řadě je nutné mít nainstalován git (řádkový klient) a pochopitelně je vyžadována i instalace Vimu popř. NeoVimu – obě tyto závislosti jsou v instalačním skriptu pochopitelně testovány.
Samotný instalační skript je možné stáhnout a ihned spustit zadáním tohoto příkazu (pokud pochopitelně věříte skriptům staženým z Internetu – což byste ovšem obecně neměli):
$ curl -sLf https://spacevim.org/install.sh | bash
Nejprve se zobrazí úvodní informace i s verzí SpaceVimu:
/###### /## /##/## /##__ ## | ## | #|__/ | ## \__/ /###### /###### /####### /######| ## | ##/##/######/#### | ###### /##__ ##|____ ##/##_____//##__ #| ## / ##| #| ##_ ##_ ## \____ #| ## \ ## /######| ## | ########\ ## ##/| #| ## \ ## \ ## /## \ #| ## | ##/##__ #| ## | ##_____/ \ ###/ | #| ## | ## | ## | ######| #######| ######| ######| ####### \ #/ | #| ## | ## | ## \______/| ##____/ \_______/\_______/\_______/ \_/ |__|__/ |__/ |__/ | ## | ## |__/ version : 1.8.0-dev by : spacevim.org
Dále se přes git naklonuje repositář se SpaceVimem:
[➭] Trying to clone SpaceVim Cloning into '/home/tester/.SpaceVim'... remote: Enumerating objects: 39775, done. remote: Counting objects: 100% (228/228), done. remote: Compressing objects: 100% (196/196), done. remote: Total 39775 (delta 103), reused 66 (delta 30), pack-reused 39547 Receiving objects: 100% (39775/39775), 20.73 MiB | 4.96 MiB/s, done. Resolving deltas: 100% (27732/27732), done. [✔] Successfully clone SpaceVim
Provede se instalace SpaceVimu pro každý nalezený kompatibilní textový editor:
[✔] Installed SpaceVim for vim [✔] Installed SpaceVim for neovim
V dalším kroku se nainstaluje plugin dein používaný pro správu dalších balíčků:
[➭] Install dein.vim Cloning into '/home/tester/.cache/vimfiles/repos/github.com/Shougo/dein.vim'... remote: Enumerating objects: 6489, done. remote: Counting objects: 100% (567/567), done. remote: Compressing objects: 100% (351/351), done. remote: Total 6489 (delta 317), reused 418 (delta 185), pack-reused 5922 Receiving objects: 100% (6489/6489), 1.26 MiB | 3.41 MiB/s, done. Resolving deltas: 100% (3685/3685), done. [✔] dein.vim installation done
Nainstalují se taktéž fonty používané Gvimem/Kvimem nebo vybratelné v konfiguraci terminálu:
[➭] Downloading DejaVu Sans Mono Bold Oblique for Powerline.ttf [✔] Downloaded DejaVu Sans Mono Bold Oblique for Powerline.ttf [➭] Downloading DejaVu Sans Mono Bold for Powerline.ttf [✔] Downloaded DejaVu Sans Mono Bold for Powerline.ttf [➭] Downloading DejaVu Sans Mono Oblique for Powerline.ttf [✔] Downloaded DejaVu Sans Mono Oblique for Powerline.ttf [➭] Downloading DejaVu Sans Mono for Powerline.ttf [✔] Downloaded DejaVu Sans Mono for Powerline.ttf [➭] Downloading DroidSansMonoForPowerlinePlusNerdFileTypesMono.otf [✔] Downloaded DroidSansMonoForPowerlinePlusNerdFileTypesMono.otf [➭] Downloading Ubuntu Mono derivative Powerline Nerd Font Complete.ttf [✔] Downloaded Ubuntu Mono derivative Powerline Nerd Font Complete.ttf [➭] Downloading WEBDINGS.TTF [✔] Downloaded WEBDINGS.TTF [➭] Downloading WINGDNG2.ttf [✔] Downloaded WINGDNG2.ttf [➭] Downloading WINGDNG3.ttf [✔] Downloaded WINGDNG3.ttf [➭] Downloading devicons.ttf [✔] Downloaded devicons.ttf [➭] Downloading mtextra.ttf [✔] Downloaded mtextra.ttf [➭] Downloading symbol.ttf [✔] Downloaded symbol.ttf [➭] Downloading wingding.ttf [✔] Downloaded wingding.ttf [➭] Updating font cache, please wait ... [✔] font cache done!
A to je vše:
Almost done! ============================================================================== == Open Vim or Neovim and it will install the plugins automatically == ============================================================================== That's it. Thanks for installing SpaceVim. Enjoy!
Obrázek 6: První část instalace v konzoli/terminálu.
Obrázek 7: Druhá část instalace v konzoli/terminálu.
Obrázek 8: Některé části instalace se dokončí později po spuštění Vimu.
4. První spuštění SpaceVimu
SpaceVim, podobně jako jeho ideový vzor Spacemacs obsahuje úvodní obrazovku, která zjednodušuje orientaci novým uživatelům. Podobnou obrazovku nalezneme i ve SpaceVimu – viz též následující dva screenshoty. Můžeme zde vidět nejužitečnější příkazy – vytvoření nového bufferu (tedy souboru), dále přístup k dříve otevřeným souborům, a možnost přímého ukončení SpaceVimu – nyní tedy tato diskuse s 2,4 miliony shlédnutí již není potřebná :-)
Obrázek 9: Úvodní stránka SpaceVimu.
V pravém okně se nachází průzkumník, tedy plugin umožňující zobrazení a procházení obsahem jednotlivých adresářů a otevírání souborů v nich uložených.
Obrázek 10: Alternativní zobrazení úvodní stránky SpaceVimu.
5. Modální ovládání Vimu, alternativa představená SpaceVimem
Textový editor Vim je založen na použití většího množství módů, mezi nimiž se uživatel musí explicitně přepínat. Zkráceně toto chování označujeme termínem „modální editor“. Modální ovládání ve skutečnosti není žádná žhavá novinka, protože bylo použito již v původním editoru Vi (viz též například článek o historii vzniku Vi). Toto chování bylo prakticky beze změny převzato Vimem, ale například i moderním editorem Kakoune. Modální ovládání má své nesporné výhody, ovšem taktéž některé nevýhody. Především je nutné se ho naučit a taktéž množství dostupných klávesových zkratek (pro další pluginy) je omezené, protože většina jednopísmenných příkazů je obsazena již samotným Vimem a další rozšiřování mnohdy vede ke kolizím. První problém je do určité míry řešen menu, které lze zobrazit jak v GVimu a KVimu (Vim běžící s plnohodnotným grafickým uživatelským rozhraním), tak i ve Vimu, který běží v terminálu (konzoli), viz též :help console-menus, popř. https://vimhelp.org/gui.txt.html#console-menus.
Obrázek 11: Režimy standardního Vimu a způsob přechodu mezi nimi s využitím různých klávesových zkratek.
Ovšem klasická menu mají několik nepříjemných vlastností, které souvisí s tím, že vyvolání nějakého příkazu přes menu (což je činnost prováděná začátečníkem popř. znalým uživatelem pro méně často prováděné operace) je odlišné od případné klávesové zkratky.
Obrázek 12: V Notepadu se příkaz Paste vyvolává dvěma zcela odlišnými cestami. Buď stiskem Ctrl+V nebo přes menu posloupností kláves Alt+E P popř. F10 E P.
6. Hlavní menu SpaceVimu a jeho podmenu
Hlavní menu SpaceVimu je zobrazeno, jak jsme se již ostatně dozvěděli v předchozích kapitolách, po stisku klávesy Space, a to až po uplynutí určitého časového intervalu (pokud totiž za mezerníkem ihned stisknete další klávesu či klávesy, provede se uživatelem zapsaný příkaz ihned). V hlavním menu se nachází jak přímé příkazy, které se ihned po svém výběru provedou (například přechod do jednoho z devíti oken), ale taktéž příkazy, které vyvolají další podmenu. I zobrazení těchto podmenu je řízeno stejnými pravidly, jako zobrazení hlavního menu – tedy že se (podmenu) na obrazovce zobrazí až po určitém časovém intervalu. Tohoto chování využijí prakticky všichni uživatelé, tedy i profesionálové, kteří si ovšem ve skutečnosti nemusí pamatovat naprosto všechny nabízené příkazy. Příkladem může být příkaz určený pro zobrazení stromu s adresáři a soubory. Tento příkaz se vyvolává posloupností kláves Space f T, ovšem pokud si někdo pamatuje pouze fakt, že Space f zobrazí podmenu s příkazy pro práci se soubory, může zadat pouze tento příkaz a příslušné podmenu se zobrazí, pochopitelně i s příkazem T (Tree).
Obrázek 13: Hlavní menu SpaceVimu.
7. Příkazy dostupné v hlavním menu SpaceVimu
V hlavním menu je nabízeno několik příkazů, které se provedou ihned, tj. bez přechodu do nějakého podmenu. Jedná se o ty nejčastěji používané příkazy (alespoň podle mínění tvůrců SpaceVimu). V první řadě zde nalezneme devět příkazů, které slouží pro přechod do jednoho z devíti otevřených oken. Seznam oken i s jejich čísly je přitom zobrazen na prvním řádku uživatelského prostředí textového editoru:
Příkaz | Stručný popis |
---|---|
Space 1 | přepnutí do prvního okna v pořadí |
Space 2 | přepnutí do druhého okna v pořadí |
… | … |
Space 9 | přepnutí do devátého okna v pořadí |
Dále se v hlavním menu nachází příkazy Space " a Space ' určené pro otevření nového okna se shellem, a to buď v aktuálním adresáři nebo v adresáři, ve kterém se nachází editovaný soubor. Rozdíly jsou zřejmé a oba příkazy využijeme (každý ovšem jindy) například při práci se složitěji strukturovaným projektem (například příkaz make volaný shellem má smysl pustit v jiném adresáři, než například příkaz grep).
8. Další podmenu SpaceVimu
V hlavním menu SpaceVimu nalezneme kromě výše zmíněných přímo spustitelných/volatelných příkazů i celkem 21 podmenu, každé s vlastní sadou dostupných (a v některých případech i konfigurovatelných) příkazů:
Příkaz | Zobrazené menu |
---|---|
Space a | Další „aplikace“, tedy nástroje poskytované nějakým pluginem Vimu |
Space b | Operace pro práci s buffery (viz další text) |
Space B | Práce s globálními buffery |
Space c | Zakomentování/odkomentování části kódu |
Space d | Příkazy debuggeru |
Space e | Zpracování chyb produkovaných například překladačem či příkazem make |
Space f | Práce s adresáři, soubory a adresářovým stromem |
Space h | Nápověda |
Space i | Vkládání speciálních textových objektů do dokumentu (například UUID nebo Lorem Ipsum) |
Space j | Všechny příkazy skoku do určitého místa dokumentu, přechod na URL atd. |
Space l | Nastavení pro daný programovací jazyk |
Space m | Hlavní režimy (například editace čistého textu, práce s HTML dokumentem, práce se zdrojovým kódem atd.) |
Space n | Zvýšení či snížení hodnoty, která se nachází v blízkosti textového kurzoru |
Space p | Práce s projekty |
Space q | Ukončení SpaceVimu (takže nejčastější problém Vimu je vyřešen!) |
Space r | Práce s registry |
Space s | Příkazy pro vyhledání textu, symbolu atd. |
Space t | Změna chování samotného SpaceVimu (velmi užitečné, že se nachází na jediném místě) |
Space T | Nastavení grafického uživatelského rozhraní SpaceVimu |
Space w | Operace s okny |
Space x | Změna velikosti textu, zarovnání atd. |
9. Práce se soubory
Menu pro práci se soubory se zobrazí snadno zapamatovatelnou klávesovou zkratkou Space f; ostatně stejnou zkratkou začínají i všechny příkazy určené pro práci se soubory. Nalezneme zde i příkaz Space f T, který zobrazí strom s adresáři a se soubory, který pochopitelně umožňuje procházení adresáři a výběr souborů pro editaci. Důležitý je i (poměrně nesnadno zapamatovalelný) příkaz Space f v d, který přímo ve SpaceVimu otevře jeho konfigurační soubor.
Obrázek 14: Podmenu s příkazy pro práci se soubory.
10. Práce s okny editoru
Ve standardním Vimu se pro práci s okny (tedy „pohledy“ na editované soubory) používají klávesové zkratky začínající na Ctrl+W. Tato možnost zůstala ve SpaceVimu zachována, ovšem byla doplněna o vlastní podmenu. Všechny příkazy určené pro práci s okny jsou dostupné v menu zobrazeném klávesovou zkratkou Space w. Nalezneme zde příkazy pro rozdělení aktuálního okna na dvě okna, a to buď vertikálně či horizontálně, dokonce i s volbou, zda se má přenést fokus na nově vytvořené okno (potenciálně velmi užitečné).
Obrázek 15: Podmenu s příkazy pro práci s okny editoru.
11. Modifikace informací zobrazených na stavové řádce
Samotný textový editor Vim umožňuje modifikovat informace, které jsou zobrazeny na stavové řádce. Tyto informace jsou získány buď z interních proměnných samotného Vimu, nebo je lze získat zavoláním nějaké funkce. Jedná se o velmi silnou techniku, která má ovšem jednu nevýhodu – specifikace zobrazených informací se provádí přes určitou formu formátovacího řetězce a není tedy příliš uživatelsky příjemná k běžným uživatelům, kteří pouze potřebují například zobrazit čas nebo stav baterie (navíc se striktně odlišuje od stavové řádky a pravítka, ovšem chování při zobrazení jediného okna je ve výchozím nastavení odlišné).
SpaceVim k tomuto problému přistupuje právě z pohledu běžného uživatele. Z tohoto důvodu jsou příkazy pro změnu informací zobrazených na stavové řádce sdruženy do pod-pod-menu vyvolaného posloupností kláves Space t m. Jedná se o následující přepínače, tedy příkazy, které buď povolí nebo naopak zakážou zobrazení příslušné informace:
Příkaz | Stručný popis |
---|---|
Space t m b | zobrazení informací o baterii (vyžaduje nainstalované acpi) |
Space t m i | zobrazení zvolené vstupní metody |
Space t m M | informace o hlavním režimu (text, HTML, zdrojový kód, …) |
Space t m m | informace o vedlejším režimu |
Space t m p | zobrazení pozice kurzoru v rámci aktivního bufferu |
Space t m t | čas |
Space t m d | datum |
Space t m v | informace získané ze správce verzí (pokud je buffer registrován) |
Obrázek 16: Menu pro změnu informací zobrazených na stavovém řádku.
V případě, že stavová řádka jen zbytečně zabírá prostor, nebo jsou na ní zobrazené (a měněné) informace příliš rušivé, je možné ji zakázat a popř. znovu povolit posloupností kláves Space t m T.
Obrázek 17: Pravítko a stavový řádek, který je implicitně zobrazený v případě, že je okno editoru rozděleno na více podoken. U nejspodnějšího podokna je možné zvolit, zda se pro něj má stavový řádek zobrazit či nikoli.
12. Informace o vedlejším režimu
Na stavovém řádku se kromě dalších informací zobrazují i informace o takzvaném vedlejším režimu neboli minor mode. Každý z několika indikátorů je představován jediným znakem, který buď používá tvar z Unicode (pokud je to povoleno) nebo naopak znak ze standardní sady ASCII. Význam jednotlivých znaků resp. indikátorů je popsán v následující tabulce:
Příkaz | Zobrzení Unicode fontem | Zobrazení ASCII fontem | Stručný popis |
---|---|---|---|
Space t 8 | ⑧ | 8 | zvýraznění aktuálního řádku (i pokud je delší, než řádek obrazovky) |
Space t f | ⓕ | f | zvýraznění mezního sloupce, kdy se překračuje nastavená délka řádku |
Space t s | ⓢ | s | je zapnutý režim kontroly syntaxe) |
Space t S | Ⓢ | S | je zapnutý režim kontroly překlepů (na základě slovníku) |
Space t w | ⓦ | w | režim zvýraznění mezer nebo dalších bílých znaků na konci řádku (výhodné pro AsciiDoc) |
Obrázek 18: Zobrazení informací o vedlejších režimech (viz zvýrazněný obdélník).
13. Vlastní klávesové zkratky
Z předchozích kapitol je zřejmé, že SpaceVim dosti podstatným způsobem modifikuje chování standardního Vimu, a to včetně jeho klávesových zkratek (původní zkratky většinou zachovává a nové přidává). Je ovšem možné toto chování změnit a nadefinovat si například vlastní klávesovou zkratku? To pochopitelně možné je, dokonce k tomuto účelu můžeme použít standardní příkaz Vimu nazvaný :map.
Pokud například budeme chtít, aby se po stisku klávesy F2 uložil aktuálně editovaný buffer, použijeme tento příkaz:
:map <F2> :w<CR>
Obrázek 19: Dnes již historické IDE Turbo Pascalu určené pouze pro jediný jazyk. Prakticky všechny nástroje jsou nedílnou součástí tohoto IDE (s výjimkou externích nástrojů grep a Turbo Debugger).
Mezi další potenciálně užitečné mapování patří změna chování příkazů j a k ve chvíli, kdy je dlouhý řádek na ploše terminálu vizuálně zalomen do několika terminálových řádků:
:map j gj :map k gk
14. Vrstvy – cesta k udržitelné konfiguraci Vimu
Ve SpaceVimu jsou konfigurovatelné přídavné moduly rozděleny do takzvaných vrstev neboli layers. V současné verzi se jedná o devět vrstev:
- autocomplete
- checkers
- format
- edit
- ui
- core
- core#banner
- core#statusline
- core#tabline
Díky rozdělení do vrstev je možné udržovat konfiguraci SpaceVimu v rozumných mezích, na rozdíl od „chaotické“ konfigurace běžných pluginů Vimu. V současnosti existuje přibližně 150 vrstev, které jsou přímo podporovány SpaceVimem. Pro zajímavost se jedná o tyto vrstvy (ovšem jejich seznam je uveden i v konfiguraci, kde se bude postupně rozšiřovat společně s dalšími verzemi SpaceVimu):
autocomplete | chat | checkers | chinese |
colorscheme | core#banner | core#statusline | core#tabline |
core | cscope | ctrlp | ctrlspace |
debug | default | denite | edit |
floobits | foldsearch | format | fzf |
git | github | gtags | japanese |
lang#actionscript | lang#agda | lang#asciidoc | lang#aspectj |
lang#assembly | lang#autohotkey | lang#batch | lang#c |
lang#chapel | lang#clojure | lang#coffeescript | lang#crystal |
lang#csharp | lang#d | lang#dart | lang#dockerfile |
lang#e | lang#eiffel | lang#elixir | lang#elm |
lang#erlang | lang#extra | lang#factor | lang#fennel |
lang#fortran | lang#foxpro | lang#fsharp | lang#go |
lang#goby | lang#gosu | lang#graphql | lang#groovy |
lang#hack | lang#haskell | lang#html | lang#hy |
lang#idris | lang#io | lang#ipynb | lang#j |
lang#janet | lang#java | lang#javascript | lang#julia |
lang#kotlin | lang#lasso | lang#latex | lang#lisp |
lang#livescript | lang#lua | lang#markdown | lang#matlab |
lang#moonscript | lang#nim | lang#nix | lang#ocaml |
lang#pact | lang#pascal | lang#perl | lang#php |
lang#plantuml | lang#pony | lang#povray | lang#powershell |
lang#processing | lang#prolog | lang#puppet | lang#purescript |
lang#python | lang#r | lang#racket | lang#reason |
lang#red | lang#rescript | lang#ring | lang#rst |
lang#ruby | lang#rust | lang#scala | lang#scheme |
lang#sh | lang#slim | lang#smalltalk | lang#sml |
lang#swift | lang#tcl | lang#toml | lang#typescript |
lang#v | lang#vbnet | lang#vim | lang#vue |
lang#WebAssembly | lang#wolfram | lang#xml | lang#zig |
language-server-protocol | leaderf | shell | sudo |
test | tmux | tools#dash | tools#mpv |
tools#zeal | tools | ui | unite |
VersionControl |
15. Pluginy používané SpaceVimem
SpaceVim již ve výchozí instalaci obsahuje několik pluginů, které jsou automaticky použity. Jedná se o poměrně zajímavý výběr takových pluginů, které skutečně zvyšují použitelnost Vimu a současně nebudou žádným zásadním způsobem zasahovat do klávesových zkratek a systému menu SpaceVimu:
ale | clever-f.vim | CompleteParameter.vim | context_filetype.vim |
cscope.vim | defx-git | defx-icons | defx.nvim |
dein.vim | delimitMate | deoplete-dictionary | deoplete.nvim |
editorconfig-vim | fcitx.vim | fortran.vim | git.vim |
gruvbox | gtags.vim | incsearch.vim | indent-blankline.nvim |
indentLine | neco-syntax | neobundle.vim | neocomplete.vim |
neoformat | neoinclude.vim | neomake | neopairs.vim |
neosnippet-snippets | neosnippet.vim | nerdcommenter | nerdtree |
nvim-yarp | open-browser.vim | smalltalk | spacevim |
tabular | tagbar | tagbar-makefile.vim | tagbar-proto.vim |
undotree | unite.vim | vim-airline | vim-airline-themes |
vim-asciidoc | vim-bepo | vim-better-whitespace | vim-bookmarks |
vim-choosewin | vim-cursorword | vim-easymotion | vim-easyoperator-line |
vim-elang | vim-emoji | vim-expand-region | vimfiler.vim |
vim-grepper | vim-hug-neovim-rpc | vim-jplus | vim-jsx-typescript |
vim-matchup | vim-mundo | vim-povray | vimproc.vim |
vim-reason | VimRegStyle | vim-repeat | vim-rescript |
vim-smoothie | vim-snippets | vim-startify | vim-surround |
vim-table-mode | vim-textobj-entire | vim-textobj-indent | vim-textobj-line |
vim-textobj-user | wildfire.vim |
Obrázek 20: Při povolení dalšího pluginu se automaticky provede jeho inicializace.
16. Stručný popis některých použitých pluginů
S některými výše zmíněnými pluginy jsme se již mohli setkat v některém z dřívějších článků, takže jen v krátkosti:
Plugin undotree slouží, především pro grafické znázornění obsahu stromu vytvářeného při editaci i při provádění operací undo a redo. Se znázorněným stromem, jehož pseudografika částečně připomíná způsob zobrazení větvení v GITu, je možné různým způsobem manipulovat, především zobrazit, jaké editační operace se již provedly a do kterého stavu dokumentu se má editor přenést. Modul taktéž zobrazí rozdíl (diff) mezi dvěma větvemi.
Druhý plugin určený pro textový editor Vim i SpaceVim se jmenuje vim-airline (neplést prosím s Vim Airlines :-). Doplňkový modul vim-airline slouží především k úpravě stavového řádku (status line), ovšem je ho možné použít taktéž k zobrazení dalšího řádku obsahujícího seznam otevřených bufferů. Informace zobrazené na stavovém řádku – včetně aktuálně nastaveného režimu editoru – jsou vizuálně zvýrazněny různou barvou písma a pozadí, ovšem navíc je možné použít i speciální fonty obsahující ikony, které vim-airline může využít pro další „vyšperkování“.
Další modul je nazvaný NERD Commenter. Funkce tohoto pluginu je zdánlivě velmi jednoduchá – zakomentování popř. odkomentování aktuálního řádku či vybraných řádků zdrojového kódu. Ve skutečnosti je však přídavný modul NERD Commenter poměrně sofistikovaný, protože dokáže pracovat s velkým množstvím programovacích jazyků (cca 300) a dalších strukturovaných souborů, přičemž každý jazyk má obecně jiný způsob zápisu komentářů. Modul NERD Commenter dokáže pracovat i se zanořenými komentáři a při dodržení určitých pravidel je možné zakomentovat či odkomentovat i blok programového kódu, který již komentáře obsahuje, a to dokonce i v těch programovacích jazycích, které vnoření značek pro komentáře nepodporují (příkladem může být ANSI C, resp. přesněji řečeno C89). U některých programovacích jazyků jsou podporovány dva styly zakomentování většího množství řádků: komentářové značky mohou být vloženy na každý řádek či na začátek a konec celého bloku.
Další přídavný modul se jmenuje NERD Tree. V tomto modulu je implementován poměrně propracovaný správce souborů založený na zobrazení stromu obsahujícího adresáře a soubory, podobně jako je tomu i u většiny integrovaných vývojových prostředí. Strom se zobrazuje v samostatném podokně a pro jeho vyvolání se ve standardním Vimu (ale i SpaceVimu) používá příkaz :NERDTree.
Použit je i plugin nazvaný table-mode, jehož repositář naleznete na adrese https://github.com/dhruvasagar/vim-table-mode. Na tomto pluginu je zajímavé mj. i to, že je celý naprogramován přímo ve VimScriptu a tudíž nevyžaduje žádné externí nástroje a dokonce ani to, aby byl Vim přeložen s podporou rozhraní pro další jazyky (Python, Luu, Perl atd.). Plugin slouží pro tvorbu tabulek v textovém dokumentu. Novou tabulku je možné vytvořit hned několika různými způsoby. Pokud již máme k dispozici data s nějakým oddělovačem sloupců, můžeme taková data převést na tabulku velmi snadno, a to příkazem :Tableize. Vstupem může být soubor s tímto obsahem:
ID|Name|Surname 01|Foo|Bar
Výběrem obou řádků (libovolným způsobem) a spuštěním příkazu Tableize můžeme tento buffer změnit na tabulku:
| ID | Name | Surname | | 01 | Foo | Bar |
17. Konfigurační soubor SpaceVimu
Klasický textový editor Vim je konfigurován s využitím souborů, které jsou vytvořeny ve VimScriptu. To je jednoúčelový a postupně rozšiřovaný programovací jazyk, který může být pro mnoho uživatelů těžko čitelný (například komentáře začínají uvozovkami, rozlišují se globální proměnné, lokální proměnné a parametry funkcí pomocí prefixu atd.). Část takového konfiguračního souboru může vypadat následovně (jedná se o vybrané řádky z mého .vimrc, které se postupně vyvíjí už prakticky dvacet let):
if v:version>=600 " verze starsi nez 6.00 neumi nektere commandy let g:resolution="1280" " 800/1024/1280 let g:colors="darkblue" " white/green/blue/darkblue/black let g:menu=0 " 0/1 let g:calendar_monday=1 " ceske razeni dnu v tydnu set encoding=utf-8 endif " Makro justify a prikazy k nemu {{{ if v:version>=600 so $VIMRUNTIME/macros/justify.vim endif map \ vap,gqkgqap{vap:call Justify('tw',4)<CR>}/xyzzy<CR> map ,, vap,gqkgqap{vap:call Justify('tw',4)<CR>}/xyzzy<CR> map "" : cmap ggs :!git status<cr> cmap ggd :!git diff %<cr> cmap gga :!git add %<cr> cmap ggc :!git commit -m " cmap ggp :!git push<cr> cmap ggb :!git blame %<cr>
atd. atd. atd.
Zásah do takto relativně složitě strukturovaného souboru nemusí být triviální a může vést k mnoha chybám, které se projeví až při startu nové instance Vimu (a mohou ho učinit nepoužitelným – i když je pochopitelně možné zpracování tohoto souboru zakázat a vrátit se tak do časů editoru Vi). Z tohoto důvodu je konfigurace SpaceVimu řešena odlišným způsobem – pro většinu nastavení je nutné upravit pouze soubor pojmenovaný init.toml, který se nachází v podadresáři .SpaceVim.d umístěný v domácím adresáři uživatele. Jak již koncovka tohoto souboru naznačuje, jedná se o formát TOML, neboli Tom's Obvious, Minimal Language. Tento formát sice zdánlivě (alespoň na první pohled) vychází ze souborů typu INI, ovšem ve skutečnosti se jedná o odlišný, v mnoha ohledech vylepšený a především promyšlený formát, z něhož byly odstraněny prakticky všechny nevýhody INI a přitom byla zachována čitelnost a snadnost úprav.
Ve formátu TOML jsou kromě řetězců, celých čísel a seznamů podporovány i další datové typy – pravdivostní typ, čísla s plovoucí řádovou čárkou a zejména pak, což je v praxi velmi užitečné, typ „datum+čas“ neboli časové razítko. Konfigurační soubor obsahující hodnoty těchto typů může vypadat následovně:
integer1 = 1 integer2 = 0x2a float1 = 3.14 float2 = -2e-5 float3 = -inf float4 = nan bool1 = true bool2 = false date1 = 2000-01-01 01:10:00Z date2 = 2000-01-01 01:10:00-02:00 date3 = 2000-01-01T01:10:00Z date4 = 2000-01-01T01:10:00+06:30
Podívejme se však raději na to, jak vypadá konfigurační soubor SpaceVimu. Jeho původní verze (tak, jak je nastavena po instalaci) je až triviálně jednoduchá:
#============================================================================= # basic.toml --- basic configuration example for SpaceVim # Copyright (c) 2016-2020 Wang Shidong & Contributors # Author: Wang Shidong < wsdjeg at 163.com > # URL: https://spacevim.org # License: GPLv3 #============================================================================= # All SpaceVim option below [option] section [options] # set spacevim theme. by default colorscheme layer is not loaded, # if you want to use more colorscheme, please load the colorscheme # layer colorscheme = "gruvbox" colorscheme_bg = "dark" # Disable guicolors in basic mode, many terminal do not support 24bit # true colors enable_guicolors = false # Disable statusline separator, if you want to use other value, please # install nerd fonts statusline_separator = "nil" statusline_iseparator = "bar" buffer_index_type = 4 windows_index_type = 3 enable_tabline_filetype_icon = false enable_statusline_mode = false statusline_unicode_symbols = false # Enable vim compatible mode, avoid changing origin vim key bindings vimcompatible = true # Enable autocomplete layer [[layers]] name = 'autocomplete' auto_completion_return_key_behavior = "complete" auto_completion_tab_key_behavior = "cycle" [[layers]] name = 'shell' default_position = 'top' default_height = 30
18. Modifikace konfiguračního souboru
Povšimněte si, že konfigurační soubor je rozdělen na sekci nazvanou [options] a potom na sekce pojmenované [[layers]], kterých může být větší množství. V sekci [options] lze modifikovat například barvové schéma, měnit styl zobrazení stavové řádky, povolit či zakázat Unicode znaky ve stavové řádce (o tom jsme se již zmiňovali výše), povolit či zakázat režim plné kompatibility s Vimem atd.
V praxi jsou však důležitější konfigurace jednotlivých vrstev. K této relativně rozsáhlé problematice se vrátíme při popisu vybraných nejdůležitějších resp. přesněji řečeno nejužitečnějších pluginů.
19. Odkazy na relevantní články na Rootu
Již v úvodních větách dnešního článku jsme se zmínili o tom, že jak textový editor Vim, tak i konkurenční Emacs a jeho nadstavby (Spacemacs a Doom Emacs) již byly na stránkách Roota popsány. Konkrétně se jedná o následující sérii článků:
- Užitečné skripty a pluginy pro textový editor Vim
http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim/ - Užitečné skripty a pluginy pro textový editor Vim (2.část)
http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-2-cast/ - Užitečné skripty a pluginy pro textový editor Vim (3.část)
http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-3-cast/ - Užitečné skripty a pluginy pro textový editor Vim (4.část)
http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-4-cast/ - Užitečné skripty a pluginy pro textový editor Vim (5.část)
http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-5-cast/ - Užitečné skripty a pluginy pro textový editor Vim (6.část)
http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-6-cast-cestovani-v-case/ - Užitečné skripty a pluginy pro textový editor Vim (7.část)
http://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-7-cast/ - Tvorba vlastního pluginu pro textový editor Vim
http://www.root.cz/clanky/tvorba-vlastniho-pluginu-pro-textovy-editor-vim/ - Vim ve funkci textového editoru pro tvůrčí psaní
https://www.root.cz/clanky/vim-ve-funkci-textoveho-editoru-pro-tvurci-psani/ - Asynchronní skripty: další přiblížení Vimu k možnostem IDE
https://www.root.cz/clanky/asynchronni-skripty-dalsi-priblizeni-vimu-k-moznostem-ide/ - Evil: kombinace editačních příkazů Vimu a síly Emacsu
https://www.root.cz/clanky/evil-kombinace-editacnich-prikazu-vimu-a-sily-emacsu/ - Úpravy Emacsu a tvorba nových modulů s využitím Emacs Lispu
https://www.root.cz/clanky/upravy-emacsu-a-tvorba-novych-modulu-s-vyuzitim-emacs-lispu/ - Úpravy Emacsu a tvorba nových modulů s využitím Emacs Lispu (2)
https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-zakladni-konstrukce-jazyka/ - Spacemacs: to nejlepší z editorů Emacs a Vim
https://www.root.cz/clanky/spacemacs-to-nejlepsi-z-editoru-emacs-a-vim/ - Spacemacs: práce s projekty psanými v Pythonu a režim Org
https://www.root.cz/clanky/spacemacs-prace-s-projekty-psanymi-v-pythonu-a-rezim-org/ - Doom Emacs: elegantní a snadno použitelné uživatelské rozhraní Emacsu
https://www.root.cz/clanky/doom-emacs-elegantni-a-snadno-pouzitelne-uzivatelske-rozhrani-emacsu/
20. Odkazy na Internetu
- SpaceVim
https://spacevim.org/ - A First Look At SpaceVim
https://www.youtube.com/watch?v=iXPS_NHLj9k - Spacemacs vs SpaceVim
https://stackshare.io/stackups/spacemacs-vs-spacevim - Vim – the ubiquitous text editor
https://www.vim.org/ - Vim Awesome
https://vimawesome.com/plugin/landscape-vim - SpaceVim: A Vimmer’s Eval
https://medium.com/@jyscao/spacevim-a-vimmers-eval-d2020118b517 - SpaceVim (Google groups)
https://groups.google.com/g/spacevim?pli=1 - Historie vývoje textových editorů (2)
https://www.root.cz/clanky/historie-vyvoje-textovych-editoru-2/ - Vim: console-menus
https://vimhelp.org/gui.txt.html#console-menus - dein.vim na GitHubu
https://github.com/Shougo/dein.vim - Trying out dein.vim – a dark powered plugin manager
https://herringtondarkholme.github.io/2016/02/26/dein/ - Editor config
https://editorconfig.org/