Hlavní navigace

Plugin vim-orgmode: portace populárního orgmode do Vimu

Pavel Tišnovský

Mezi jeden z nejpopulárnějších modulů textového editoru Emacs patří plugin nabízející uživatelům tzv. org mode, neboli režim pro správu poznámek, diáře, plánovače atd. Podobný modul existuje i pro editor Vim.

Doba čtení: 24 minut

11. Seznamy

12. Zaškrtávací políčka

13. Značky „Udělat“ a „Hotovo“

14. Definice značek pro specifické procesy

15. Vlastní štítky

16. Základní operace pro práci s daty a časovými značkami

17. Použití kalendáře

18. Další užitečné pluginy pro zjednodušení práce s vim-orgmode

19. Prozatím neimplementované vlastnosti modulu vim-orgmode

20. Odkazy na Internetu

1. Plugin vim-orgmode: portace populárního orgmode do Vimu

Textový editor Emacs je mezi uživateli populární zejména kvůli svému rozsáhlému ekosystému různých rozšiřovacích modulů naprogramovaných většinou přímo v Emacs Lispu. Připomeňme si například některé užitečné moduly, s nimiž jsme se již na stránkách Roota setkali: podpora pro ladění aplikací, režim pro zvýraznění rozdílů mezi soubory a pro jejich synchronizaci (včetně porovnání tří verzí souborů) a samozřejmě takzvaný „evil“ režim s poměrně propracovanou emulací Vimu. Uživatelé však mohou použít i další užitečné moduly, například integrovaný webový prohlížeč, mailový klient a zejména pak v žádném případě nesmíme zapomenout na modul s implementací tzv. org mode, tj. režimu správy poznámek, diáře, kalendáře, plánovače apod. I tento modul je samozřejmě naprogramovaný v Emacs Lispu.

Obrázek 1: Jednoduchý dokument zobrazený v režimu Org mode v textovém editoru Emacs.

Pro některé uživatele je org mode dokonce tou hlavní motivací pro použití Emacsu (a zdaleka se nejedná pouze o programátory). Je tedy vlastně pochopitelné, že podobný modul vznikl i pro textový editor Vim. Ve skutečnosti dokonce vzniklo hned několik podobně koncipovaných pluginů, ovšem dnes se seznámíme jen s jediným z nich. Jmenuje se vim-orgmode a již název tohoto pluginu napovídá, že cílem je dosažení co největší kompatibility s emacsovským režimem org mode. Tohoto cíle sice ještě nebylo dosaženo (chybí například dotažená podpora pro export dat), ovšem již v současném stavu se v každém případě jedná o velmi dobře použitelný plugin.

Obrázek 2: Označení stavu úkolů (udělat, hotovo, …).

Poznámka: první třetina článku je věnována instalaci pluginu vim-orgmode i pomocného pluginu vim-speeddating. Pokud vás zajímají spíše vlastnosti a možnosti poskytovanými popisovaným pluginem, přeskočte prosím přímo na osmou kapitolu, v níž je popsána základní struktura souboru s poznámkami a diářem.

Obrázek 3: Práce s kalendářem (org-mode v Emacsu).

2. Princip, na němž je orgmode založen

Na rozdíl od specializovaných aplikací pracuje org mode s čistě textovými soubory, v nichž se rozeznává několik značek, které je možné se velmi snadno naučit. Ostatně se stejným principem, tj. s použitím běžných textových souborů s několika značkami, se pravděpodobně setkalo hodně čtenářů: jedná se zejména o formáty AsciiDoc, Markdown, ReStructuredText a podmnožiny těchto jazyků, které jsou použity například na GitHubu, některých wiki apod. Ostatně i samotný formát používaný org modem je podporován přímo na GitHubu – soubory tohoto typu jsou automaticky zformátovány před zobrazením uživateli. Všechny nové příkazy, které org mode nabízí, tak pracují nad čistě textovými daty, přičemž je nutné zdůraznit, že plugin nemá k dispozici žádné další „skryté“ soubory. V praxi to znamená to, že si můžete poznámky a diář jednoduše synchronizovat mezi různými počítači (přes Git popř. přes starý dobrý nástroj rsync) a prakticky nikdy nedojde k poškození dat (pokud si je samozřejmě sami nesmažete).

Obrázek 4: Nápověda k modulu vim-orgmode po jeho úspěšné instalaci.

Poznámka: ve skutečnosti se nemusíte učit význam všech podporovaných značek, ale stačí se seznámit jen s těmi nejpoužívanějšími. Další typy značek (například vlastní štítky, zaškrtávací políčka apod.) je možné začít používat později. Totéž samozřejmě platí i pro nové příkazy – pokud vám nezáleží na větší efektivitě práce, prakticky se stačí naučit asi pět nových příkazů a ostatní příkazy popř. vyvolávat z menu.

Režim org mode někteří uživatelé používají i pro vytváření strukturované dokumentace. Příkladem mohou být všechny dokumenty popisující projekt Bootstrap, se kterým jsme se seznámili v článku Můžeme věřit překladačům? Projekty řešící schéma „důvěřivé důvěry“. Pro zajímavost se můžeme podívat na ukázku z této dokumentace, ve které se mj. používají i tabulky:

* Platform specific information
** 8086
To encode assembly to hex, please reference: http://ref.x86asm.net/geek.html
WARNING encoding is an extremely slow and painful process by hand,
BE VERY VERY THANKFUL for those that came before us and made such wonderful
things as assemblers and C compilers that hide most of the horrible darkness from our eyes...
 
*** Default memory map
| 16-bit mem map (seg:off)       | What is there                 |
|--------------------------------+-------------------------------|
| 0x0000:0x0000 -> 0x0000:0x0500 | BIOS stuff                    |
| 0x0000:0x0500 -> 0x0000:0x2100 | root                          |
| 0x0000:0x2100 -> 0x0000:0x3300 | fat                           |
| 0x0000:0x3300 -> 0x0000:0x6c00 | 14,25kb free space            |
| 0x0000:0x6c00 -> 0x0000:0x7c00 | IDT and GDT (256 desc. eatch) |
| 0x0000:0x7c00 -> 0x0000:0x7e00 | bootsector                    |
| 0x0000:0x7e00 </gc- 0x0000:0xffff | ~32,5kb stack for boot        |
| 0x1000:0x0000 -> 0x9000:0xffff | 576kb free space              |
| 0xa000:0x0000 -> ............. | VGA mem etc.                  |
Poznámka: v původním režimu org-mode v Emacsu je možné tabulky exportovat společně s dalším textem do mnoha různých formátů.

3. Použití správce balíčků Pathogen

Před popisem instalace balíčku vim-orgmode do Vimu si alespoň ve stručnosti popíšeme způsob použití správce balíčků Pathogen, protože právě tento správce bude následně použit pro instalaci jak pluginu vim-orgmode, tak i pomocných pluginů vim-speeddating a calendar.

Většina skriptů, maker, nápovědy, barvových schémat atd. nainstalovaných společně s Vimem je většinou uložena do adresářové struktury umístěné v /usr/share/vim/vimfiles popř. /usr/share/vim/vim80 (zde v závislosti na verzi). Na této adresářové struktuře je poměrně dobře patrné rozdělení jednotlivých částí pluginů do různých podadresářů:

├── autoload
│   ├── dist
│   └── xml
├── colors
├── compiler
├── doc
├── ftplugin
├── indent
├── keymap
├── lang
│   ├── af
│   │   └── LC_MESSAGES
...
...
...
├── macros
│   ├── hanoi
│   ├── life
│   ├── maze
│   └── urm
├── pack
│   └── dist
│       └── opt
│           ├── dvorak
│           │   ├── dvorak
│           │   └── plugin
│           ├── editexisting
│           │   └── plugin
│           ├── justify
│           │   └── plugin
│           ├── matchit
│           │   ├── doc
│           │   └── plugin
│           ├── shellmenu
│           │   └── plugin
│           ├── swapmouse
│           │   └── plugin
│           └── termdebug
│               └── plugin
├── plugin
├── print
├── spell
├── syntax
└── tutor

Skript Vim Pathogen mění nastavení textového editoru Vim takovým způsobem, aby bylo možné každý plugin nainstalovat do samostatného podadresáře pojmenovaného ~/.vim/bundle/${jméno_pluginu}, což vlastně znamená, že veškerá instalace pluginu se může provést jediným příkazem cp -r … popř. přímo naklonováním repositáře s pluginem (což je technika, kterou použijeme v navazujících kapitolách). Odinstalace je ještě jednodušší, protože vše zajistí příkaz rm -rf ~/.vim/bundle/${jméno_pluginu}. Struktura adresáře s pluginy tedy může vypadat následovně:

.
├── autoload
├── bundle
│   ├── ctrlp.vim
│   │   ├── autoload
│   │   │   └── ctrlp
│   │   ├── doc
│   │   └── plugin
│   ├── rainbow_parentheses.vim
│   │   ├── autoload
│   │   └── plugin
│   ├── todo.txt-vim
│   │   ├── autoload
│   │   │   └── todo
│   │   ├── doc
│   │   ├── ftdetect
│   │   ├── ftplugin
│   │   └── syntax
│   │       └── python
│   │           └── dateregex
│   │               └── dateregex
│   ├── vim-fugitive
│   │   ├── doc
│   │   └── plugin
│   ├── vim-slime
│   │   ├── doc
│   │   └── plugin
│   └── vim-vertigo
│       ├── doc
│       └── plugin
├── doc
├── plugin
├── spell
└── syntax

4. Instalace a konfigurace Pathogenu

Instalace skriptu Vim Pathogen je ve skutečnosti velmi jednoduchá. Tento skript je možné nainstalovat pro všechny uživatele, kteří se k danému počítači připojují, nebo alternativně jen pro jednoho uživatele, což je pro běžné pracovní laptopy i desktopy pravděpodobně typičtější případ. Pokud má být Vim Pathogen používán všemi uživateli, bude jeho instalace probíhat do adresáře /usr/share/vim/vimfiles, /usr/share/vim/vim80 atd. v závislosti na již zmíněné konfigurační volbě runtimepath. Jednodušší a podle mého názoru i v některých ohledech výhodnější je však instalace tohoto skriptu pouze pro aktivního uživatele. Tuto instalaci si nyní ve stručnosti popíšeme.

Předpokládejme, že adresář ~/.vim má následující strukturu (jediné dva zobrazené soubory jsou používány při kontrole pravopisu, ovšem ve skutečnosti je více než pravděpodobné, že tento adresář již bude obsahovat pluginy nainstalované dříve – to vůbec nevadí):

.vim
└── spell
    ├── cs.iso-8859-2.spl
    └── cs.utf-8.spl

Vim Pathogen je tvořen skutečně pouze jedním skriptem pojmenovaným pathogen.vim. Tento skript se musí stáhnout a umístit do adresáře ~/.vim/autoload. Stažení a instalace skriptu je velmi rychlá: zajistí ji pouhé dva příkazy vypsané pod tímto odstavcem:

mkdir -p ~/.vim/autoload
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

Výsledná adresářová struktura bude vypadat takto:

.vim
├── autoload
│   └── pathogen.vim
└── spell
    ├── cs.iso-8859-2.spl
    └── cs.utf-8.spl

Aby se skript Vim Pathogen korektně aktivoval po každém spuštění Vimu, je nutné provést ještě malou úpravu konfiguračního souboru .vimrc umístěného v domácím adresáři. Do tohoto souboru se musí dopsat volání funkce:

execute pathogen#infect()

Pozor: volání této funkce je nutné provést až ve chvíli, kdy je nastavena volba set nocompatible, jinak inicializace neproběhne korektně! (ostatně nastavení set nocompatible by mělo být jednou z prvních věci prováděných při inicializaci Vimu :-)

Poznámka: na systému Windows se můžeme setkat s tím, že se namísto konfiguračního souboru .vimrc používá soubor s podtržítkem na začátku, tedy _vimrc.

Aby se správně zobrazovala i nápověda k nainstalovaným pluginům, je vhodné ihned pod výše uvedený příkaz zadat i:

call pathogen#helptags()

Od této chvíle budou všechny pluginy instalovány do adresáře ~/.vim/bundle, který je nutné vytvořit, pokud již neexistuje:

mkdir -p ~/.vim/bundle

Výsledná struktura adresáře ~/.vim by po provedení všech výše zmíněných kroků měla vypadat následovně:

.vim
├── autoload
│   └── pathogen.vim
├── bundle
└── spell
    ├── cs.iso-8859-2.spl
    └── cs.utf-8.spl
Poznámka: samozřejmě je možné (a pro čtenáře tohoto seriálu více než pravděpodobné), že struktura vašeho adresáře ~/.vim bude „košatější“, ale pro účely tohoto článku začneme skutečně se základní konfigurací.

5. Instalace samotného modulu vim-orgmode

Před instalací modulu vim-orgmode je vhodné se přesvědčit o tom, že vaše verze Vimu obsahuje podporu pro pluginy psané v Pythonu. Postačuje použít příkaz :ver, který by měl vypsat například +python, +python3, +python/dyn atd. Důležitá je právě značka + značící, že Vim byl přeložen se zapnutou podporou příslušné vlastnosti:

Obrázek 5: Podporu pro pluginy psané v Pythonu lze zjistit po zadání příkazu :ver.

Pokud je Python (2 či 3) podporován, provedeme instalaci pluginu vim-orgmode pouhými dvěma příkazy:

cd ~/.vim/bundle
git clone https://github.com/jceb/vim-orgmode

Výsledná adresářová struktura ve ~/.vim/ nyní bude košatější:

.vim
├── autoload
│   └── pathogen.vim
├── bundle
│   └── vim-orgmode
│       ├── debian
│       ├── doc
│       ├── documentation
│       ├── examples
│       │   └── plugins
│       ├── ftdetect
│       ├── ftplugin
│       │   └── orgmode
│       │       ├── docs
│       │       ├── liborgmode
│       │       ├── plugins
│       │       └── py3compat
│       ├── indent
│       ├── syntax
│       └── tests
└── spell
    ├── cs.iso-8859-2.spl
    └── cs.utf-8.spl

Obrázek 6: Nápověda zobrazená po zadání příkazu :help orgguide.

6. Instalace pomocných pluginů vim-speeddating a calendar

První pomocný plugin usnadňující práci s modulem vim-orgmode se jmenuje vim-speeddating. Tento plugin upravuje funkci příkazů Ctrl+A a Ctrl+X volaných z normálního režimu. Připomeňme si, že tyto příkazy slouží ke zvýšení popř. ke snížení celočíselné hodnoty, která se nachází napravo od kurzoru popř. na místě kurzoru. Implicitně se hodnota zvyšuje/snižuje o jedničku, ale samozřejmě je možné před vlastní příkaz zadat počet opakování (v tomto ohledu je Vim velmi konzistentní). Vim dokonce dokáže rozpoznat celočíselné hodnoty zapsané v hexadecimální soustavě. Plugin vim-speeddating tyto vlastnosti zachovává, ovšem umožňuje pomocí stejných klávesových zkratek změnit datum do minulosti či do budoucnosti. Ukažme si to na jednoduchém příkladu. Pokud je v textovém bufferu zapsáno následující datum:

2018-09-29

Můžeme se přesunem kurzoru na konec data a použitím příkazu 7Ctrl+A posunout o týden dopředu:

2018-10-06

Popř. se příkazem 90Ctrl-X posunout o čtvrtletí zpět:

2018-07-08

Obrázek 7: Nápověda k modulu vim-speeddating.

Kurzor musel být u předchozích operací umístěn na poslední číslo; v opačném případě by došlo ke zvýšení pořadového čísla měsíce či roku (u měsíce se samozřejmě přepočítá i příslušný rok). Pokud se například budeme chtít od posledního data posunout o půl roku dopředu, bude kurzor umístěn na poslední nulu či sedmičku a provedeme příkaz 6Ctrl+A s následujícím výsledkem:

2019-01-08

Instalace tohoto pluginu je snadná (předpokládáme samozřejmě použití Pathogenu):

cd ~/.vim/bundle
git clone https://github.com/tpope/vim-speeddating

Druhý plugin, který umožní provádění některých operací v modulu vim-orgmode, se jmenuje jednoduše Calendar. Název tohoto pluginu velmi přesně popisuje jeho funkci, protože se skutečně jedná o kalendář, který je navíc doplněný o možnost psát (a samozřejmě i zobrazovat) poznámky přidané k jednotlivým dnům. Samotný kalendář se zobrazuje ve vyhrazeném okně Vimu a již při jeho vyvolání lze ovlivnit způsob zobrazení kalendáře – umístění měsíců vedle sebe nebo pod sebe (viz též přiložené screenshoty). Poznámky zapsané k jednotlivým dnům se ukládají do jednoduchých textových souborů (používá se zvýraznění syntaxe Markdown) umístěných v podadresářích uložených v adresáři ~/diary. Díky tomu, že je formát poznámek skutečně velmi jednoduchý, lze je snadno prohledávat například příkazem grep.

Obrázek 8: Poznámka vytvořená k vybranému dni. Povšimněte si, že se díky použití jazyka Markdown nadpisy a další prvky poznámky barevně zvýrazňují.

Instalace pluginu Calendar je stejně rychlá, jako instalace obou pluginů, s nimiž jsme se seznámili v předchozím textu:

cd ~/.vim/bundle
git clone https://github.com/mattn/calendar-vim

Výsledná struktura adresáře ~/.vim/ by nyní měla vypadat následovně (jsou vypsány pouze adresáře, nikoli jednotlivé soubory):

.vim
├── autoload
│   └── pathogen.vim
├── bundle
│   ├── calendar-vim
│   │   ├── autoload
│   │   ├── doc
│   │   └── plugin
│   ├── vim-orgmode
│   │   ├── debian
│   │   ├── doc
│   │   ├── documentation
│   │   ├── examples
│   │   │   └── plugins
│   │   ├── ftdetect
│   │   ├── ftplugin
│   │   │   └── orgmode
│   │   │       ├── docs
│   │   │       ├── liborgmode
│   │   │       ├── plugins
│   │   │       └── py3compat
│   │   ├── indent
│   │   ├── syntax
│   │   └── tests
│   └── vim-speeddating
│       ├── autoload
│       ├── doc
│       └── plugin
└── spell
    ├── cs.iso-8859-2.spl
    └── cs.utf-8.spl

Obrázek 9: Zobrazení kalendáře v horizontálně rozděleném okně. Aktuální den je zvýrazněn barevně a navíc je u něj zobrazena hvězdička.

V pluginu Calendar je definováno několik nových příkazů:

Příkaz Význam
:Calendar vertikální rozdělení okna a zobrazení kalendáře v novém okně nalevo
:CalendarH horizontální rozdělení okna a zobrazení kalendáře v novém okně dole
:CalendarVR vertikální rozdělení okna a zobrazení kalendáře v novém okně napravo
:CalendarT zobrazení kalendáře v režimu celého okna

Obrázek 10: Zobrazení kalendáře ve vertikálně rozděleném okně. Aktuální den je zvýrazněn barevně a navíc je u něj zobrazena hvězdička.

Obrázek 11: Zobrazení kalendáře v režimu celého okna.

7. Dokončení konfigurace v souboru .vimrc

Nyní musíme celou konfiguraci dokončit. Opět se nebude jednat o nijak složité operace, spíše se přesvědčíme o tom, jestli se v souboru .vimrc umístěného v domácím adresáři, nachází všechna potřebná nastavení. V první řadě zkontrolujeme, zda je na začátku (či v blízkosti) začátku tohoto konfiguračního souboru nastaven režim NEkompatibility s původním editorem Vi. Tato volba je velmi důležitá, protože ovlivňuje chování prakticky celého Vimu a mnoho pluginů v zapnutém režimu kompatibility vůbec nebude pracovat:

set nocompatible

Dále se přesvědčíme o tom, že se správně inicializuje plugin Pathogen. Toto nastavení by mělo být provedeno už v rámci instalace a konfigurace Pathogenu – viz též čtvrtou kapitolu s podrobnějšími informacemi:

execute pathogen#infect()

Třetí volba je velmi důležitá, protože ovlivní chování klávesy Tab a Shift+Tab při změně náhledu na poznámky vytvářené v org-režimu. Pokud tuto volbu neuvedete nebo bude přepsaná jiným nastavením, nemusí se načíst skripty s kódem určujícím jak režim odsazení (což by až tak nevadilo), tak i způsob „skládání“ textu (folding), což je ovšem již kritické:

filetype plugin indent on

Obrázek 12: Pokud se vám při práci s poznámkami/diářem zobrazí toto chybové hlášení, není pravděpodobně předchozí volba nastavena korektně, nebo byla přepsána (toto chybové hlášení se typicky zobrazí po stisku klávesy Tab).

Čtvrtou volbu využijí pouze uživatelé GVimu nebo KVimu. Slouží pro zobrazení menu (pokud náhodou bylo vypnuto). Ve chvíli, kdy je inicializován režim org-mode, objeví se v menu další panel se všemi dostupnými příkazy, což samozřejmě použití nového režimu zjednodušuje.

set guioptions+=m

Obrázek 13: Chybové hlášení zobrazené ve chvíli, kdy plugin vim-orgmode nenalezne modul vim-speeddating.

8. Nastavení proměnné maplocalleader

V pluginu vim-orgmode začínají všechny klávesové zkratky klávesou localleader. Vzhledem k tomu, že se nejedná o žádnou reálnou klávesu, je na místě se zeptat, co se vlastně pod tímto označením skrývá. Textový editor Vim umožňuje na localleader nadeklarovat prakticky libovolnou klávesu (přesněji řečeno znak), a to velmi jednoduše – nastavením proměnné maplocalleader:

:let maplocalleader=","

Mezi vývojáři pluginů existuje dohoda, že nové příkazy budou jako prefix používat právě hodnotu localleader nebo leader, a to z toho důvodu, aby se minimalizovala možnost interference se základními klávesovými zkratkami popř. s uživatelem deklarovanými klávesovými zkratkami. Leader je nastavený na znak zpětného lomítka, ovšem podle mého názoru je (z mnoha důvodů) lepší ho nastavit na čárku (čímž ovšem dojde ke zrušení původního významu tohoto znaku).

Poznámka: V dalším textu budu předpokládat, že je localleader nastavený právě na čárku.

Obrázek 14: Nápověda k nastavení leader a localleader.

9. Základní struktura souborů s poznámkami a diářem

Soubory (dokumenty) obsahující poznámky, diář, plánovač atd. mají koncovku „.org“. Vim je nyní (konkrétně přes ftplugin) nakonfigurovaný takovým způsobem, že aby se po otevření souborů s touto koncovkou aktivoval plugin vim-orgmode. Základní struktura poznámek (jedná se o strom) je určena nadpisy, které začínají hvězdičkami. Jednou hvězdičkou je označen nadpis první úrovně, dvěma hvězdičkami nadpis druhé úrovně atd.:

* Základní informace o OrgMode
  Textový dokument s koncovkou =.org= používá jednoduchý značkovací jazyk podobný /Markdownu/
** Formát dokumentů
*** Zvýraznění textu
    1. *bold*
    2. /italic/
    3. _underline_
    4. +strike-through+
    5. =code=
    6. ~verbatim~
*** Checkboxy
    - [ ] první
    - [ ] druhý
    - [ ] třetí

Způsob zobrazení nadpisů různých úrovní je řízen globální proměnnou org_heading_shade_leading_stars. Aktuální nastavení této proměnné zjistíte příkazem echo (před globální proměnné je nutné zapsat prefix „g:“):

:echo g:org_heading_shade_leading_stars

Pokud je tato globální proměnná nastavena na nenulovou hodnotu, budou hvězdičky na začátku řádky skryty (ve skutečnosti se pouze nastaví jejich barva na barvu pozadí):

Obrázek 15: Skrytí hvězdiček na začátku řádku.

V opačném případě budou všechny hvězdičky zobrazeny:

Obrázek 16: Zobrazení všech hvězdiček na začátku řádku.

Můžete si tedy vybrat takový způsob zobrazení, který vám vyhovuje více.

10. Změna náhledu na dokument

Ve chvíli, kdy počet zapsaných poznámek naroste, je nutné se dokázat v rozsáhlejším dokumentu orientovat. Základními příkazy (přímo převzatými z Emacsu) jsou zkratky Tab a Shift-Tab. Tyto klávesové zkratky slouží pro postupnou změnu zobrazení resp. skrytí jednotlivých úrovní dokumentu. Změna zobrazení se týká vždy té větve dokumentu, v níž se nachází textový kurzor. Pokud se kurzor nachází na hlavním nadpisu, bude se změna zobrazení týkat celého dokumentu. Podívejme se na příklad postupného zviditelňování jednotlivých úrovní při použití klávesy Tab (zkratka Shift-Tab funguje v opačném směru):

Obrázek 17: Zobrazení nadpisu první úrovně.

Obrázek 18: Zobrazení nadpisů první a druhé úrovně.

Obrázek 19: Zobrazení nadpisů první až třetí úrovně.

Obrázek 20: Text na čtyřech úrovních.

11. Seznamy

Dokument či poznámky je možné dále členit s využitím klasických seznamů. Ty se dělí do třech kategorií: seznamy s odrážkami (unordered), číslované seznamy (ordered) a seznamy obsahující nějaké popisy (description). Ukažme si nyní způsob zápisu jednotlivých typů seznamů:

*** Seznamy s odrážkami
    - mohou
    - začínat
    - pomlčkou
    + mohou
    + začínat
    + znakem +
    * a také
    * lze použít
    * hvězdičku
*** Číslované seznamy
    1. začínají
    2. číslicí
    3. která se automaticky
    4. zvětšuje
*** Seznamy s popisky
    - org-mode :: známý režim z Emacsu
    - vim-orgmode :: použitý ve Vimu

V případě, že se kurzor v normálním režimu nachází kdekoli uvnitř seznamu, je možné další prvek přidat jednoduše klávesou Enter. Tato funkce je sice dostupná i u číslovaných seznamů (nový prvek bude mít správné číslo o jedničku vyšší než prvek předchozí), ovšem čísla u dalších prvků se automaticky nepřepočítají!

12. Zaškrtávací políčka

Zaškrtávací políčka jsou dalším typem seznamů. Zapisují se tímto způsobem:

*** Checkboxy
    - [ ] první
    - [ ] druhý
    - [ ] třetí

V případě, že je zapotřebí políčko „odškrtnout“, postačuje kdekoli na řádku použít příkaz ,cc. Jeho zápis je samozřejmě rychlejší než doskok na značku (mezera nebo „X“) a příkaz rX nebo r(mezera). Druhý zápis příkazu ,cc zatržení opět zruší:

*** Checkboxy
    - [X] první
    - [X] druhý
    - [ ] třetí

Přidání dalšího prvku se provádí naprosto stejně, jako u dalších typů seznamů – stiskem klávesy Enter v normálním režimu.

Poznámka: prozatím není implementována funkce, která by na základě zaškrtnutých polí spočítala, kolik procent úkolu je již hotovo.

13. Značky „Udělat“ a „Hotovo“

K jakémukoli řádku je možné přiřadit značky „TODO“ a „DONE“. Pro (cyklické) přepínání mezi třemi stavy výchozí→TODO→DONE slouží klávesové zkratky Shift+doprava a Shift+doleva, které lze použít kdekoli na řádku. Tyto příkazy se budou vztahovat k nejbližšímu prvku stromu (netýkají se například seznamů, ale jen nadpisů).

Obrázek 21: Několik značek TODO a DONE.

Všechny značky TODO je možné si nechat zobrazit ve zvláštním okně. Aby tato funkce pracovala korektně, je nejdříve nutné pluginu oznámit, které soubory obsahují tzv. agendu. To se provede nastavením globální proměnné g:org_agenda_files, které předáme seznam souborů:

:let g:org_agenda_files=["remarks.org"]

Jakmile je seznam souborů nastaven, lze použít příkaz ,cat pro zobrazení všech TODO.

14. Definice značek pro specifické procesy

Pokud vám nevyhovuje, že značky obsahují pouze tři stavy (výchozí, TODO, DONE), můžete si nadefinovat stavy vlastní. Je to poměrně jednoduché, protože seznamy stavů jsou uloženy v globální proměnné pojmenované org_todo_keywords. V případě, že budeme chtít použít šest stavů namísto původních tří, lze tuto proměnnou změnit:

:let g:org_todo_keywords=['Nedodělek', 'Naplánováno', 'Udělat', 'WIP', 'Hotovo', 'Odevzdáno']

Přepínání mezi těmito stavy probíhá stejně: Shift+doprava a Shift+doleva:

Obrázek 22: Několik nových značek.

Dokonce je možné použít několik seznamů stavů, které umožňují zpracovávat různé typy položek (například si označovat stav chyb jiným způsobem, než klasický TODO list):

:let g:org_todo_keywords = [['TODO(t)', '|', 'DONE(d)'],
      \ ['REPORT(r)', 'BUG(b)', 'KNOWNCAUSE(k)', '|', 'FIXED(f)'],
      \ ['CANCELED(c)']]

15. Vlastní štítky

Členění celého dokumentu do stromové struktury je sice velmi užitečné, ovšem v některých případech nemusí být dostatečné. Ve chvíli, kdy je zapotřebí si poznačit, k jakému tématu se nějaký prvek dokumentu (například podnadpis) vztahuje, je možné takový prvek opatřit štítkem či dokonce několika štítky (tags). Štítky začínají a končí dvojtečkou a pokud se štítků nachází na řádku více, jsou mezi nimi taktéž uvedeny dvojtečky. Pro jednoduchý zápis štítku existuje příkaz ,st (set tag), po jehož zadání se plugin vim-orgmode zeptá na jméno štítku.

Obrázek 23: Způsob zobrazení štítků v dokumentu.

Štítky, resp. přesněji řečeno nadpisy opatřené štítky, lze vyhledat příkazem ,ft (find tag).

16. Základní operace pro práci s daty a časovými značkami

Plugin vim-orgmode podporuje i základní práci s časovými značkami (timestamp). Ty by měly mít standardní tvar YYYY-MM-DD den-v-týdnu, popř YYYY-MM-DD den-v-týdnu čas. V nejjednodušším případě je k nějaké poznámce pouze vložena časová značka uložená mezi úhlové závorky < a >. Takovou časovou značku lze do dokumentu přidat příkazem ,sa (a – active). Časová značka vložená mezi úhlové závorky je aktivní, ovšem pracovat lze i s neaktivními značkami, které jsou vloženy mezi hranaté závorky [ a ]. Takové časové značky je možné do dokumentu vložit příkazem ,si (i – inactive). Při přidávání časové značky do dokumentu můžete nabídnuté (aktuální) datum modifikovat, například zápisem „+4“, který znamená „aktuální datum + 3 dny“

Obrázek 24: Několik aktivních i neaktivních časových značek.

Pokud máte nainstalovaný výše zmíněný plugin vim-speeddating, je možné na časové značky aplikovat příkazy Ctrl+A a Ctrl+X. Bližší informace jsme si řekli v šesté kapitole.

17. Použití kalendáře

Jak jsme se již dozvěděli v předchozích kapitolách, je možné v pluginu vim-orgmode pracovat i s kalendářem poskytovaným modulem calendar. Pokud si přejete vložit časovou značku s využitím kalendáře, můžete použít příkazy ,pa (aktivní značka) nebo ,pi (neaktivní značka).

Obrázek 25: Vložení nové časové značky s využitím kalendáře.

18. Další užitečné pluginy pro zjednodušení práce s vim-orgmode

Modul vim-orgmode dokáže spolupracovat s dalšími pluginy. S dvojicí těchto pluginů jsme se již v tomto článku setkali. Připomeňme si, že se jednalo o plugin vim-speeddating a taktéž o modul calendar. Kromě toho lze využít i další pluginy, především pak Universal Text Linking umožňující korektní práci s odkazy (budou fungovat skoky na odkazy), dále plugin nazvaný repeat, který zajišťuje opakování složitějších operací (těch, které nelze zopakovat jednoduše pomocí tečky) a v neposlední řadě se jedná o přídavný modul pojmenovaný tagbar. Tento modul umožňuje zobrazení značek a odkazů v samostatně zobrazeném buffery, který lze mít zobrazen například na pravé či levé straně editovaného dokumentu.

Poznámka: posledně jmenovaný modul se bude hodit i programátorům, protože zdrojové kódy je možné zpracovat nástroji ctags a etags a vytvořit z nich seznam značek.

19. Prozatím neimplementované vlastnosti modulu vim-orgmode

Mnoho pokročilejších operací, které čtenáři možná znají z originálního emacsovského org-mode, prozatím ve Vimu nenajdeme. Týká se to například složitější práce s úkoly (TODO), organizace poznámek podle štítků (tags), výpočet již hotové práce na základě obsahu zaškrtnutých políček, export poznámek a diáře do dalších formátů souborů atd. U exportu se krátce zastavíme, protože ten je alespoň částečně podporován, ovšem jen nepřímo – pro export se totiž volají funkce z původního org-mode z Emacsu! Pro správnou funkci je tedy zapotřebí mít nainstalované a nakonfigurované oba editory. Prostor pro další vylepšení tedy stále existuje (ostatně vim-orgmode je aktivním projektem), ovšem v navazujícím článku se již namísto vim-orgmode budu zabývat původním slavným org-mode pro Emacs.

Obrázek 26: Toto chybové hlášení je zobrazeno při pokusu o export dat v případě, že není nainstalován textový editor Emacs.

20. Odkazy na Internetu

  1. Org-Mode home page
    https://orgmode.org/
  2. The Org Manual
    https://orgmode.org/manual/index.html
  3. Org mode beginning at the basics
    https://orgmode.org/worg/org-tutorials/org4beginners.html
  4. Org-mode na Gitu
    https://code.orgmode.org/bzg/org-mode
  5. Emacs Org-mode: Organizing a Scientist’s Life and Work
    https://vimeo.com/33725204
  6. Outlining Your Notes with Org
    http://sachachua.com/blog/2008/01/ou­tlining-your-notes-with-org/
  7. The Plain Text Project
    https://plaintextproject.online/
  8. Org-mode (Wikipedia)
    https://en.wikipedia.org/wiki/Org-mode
  9. vim-orgmode na GitHubu
    https://github.com/jceb/vim-orgmode
  10. vim-speeddating na GitHubu
    https://github.com/tpope/vim-speeddating
  11. calendar.vim na GitHubu
    https://github.com/mattn/calendar-vim
  12. Org Guide
    https://github.com/jceb/vim-orgmode/blob/master/doc/orgguide.txt
  13. Org Mode: which plugin to use. VimOrganizer or Vim-Orgmode?
    https://www.reddit.com/r/vim/com­ments/4ms4z0/org_mode_which_plu­gin_to_use_vimorganizer_or/
  14. Writing Vim Plugins
    http://stevelosh.com/blog/2011/09/wri­ting-vim-plugins/
  15. how to understand this vim script?
    http://stackoverflow.com/qu­estions/12625091/how-to-understand-this-vim-script
  16. Novinky ve VIM 7: Skriptovací jazyk
    http://www.root.cz/vim-sedm-druha-cast/
  17. DirDiff.vim : A plugin to diff and merge two directories recursively.
    http://www.vim.org/scripts/scrip­t.php?script_id=102
  18. vim-dirdiff na GitHubu
    https://github.com/will133/vim-dirdiff
  19. fakeclip : pseudo clipboard register for non-GUI version of Vim
    http://www.vim.org/scripts/scrip­t.php?script_id=2098
  20. vim-fakeclip na GitHubu
    https://github.com/kana/vim-fakeclip
  21. vim-fakeclip: Dokumentace
    http://kana.github.io/con­fig/vim/fakeclip.html
  22. Vim Multiple Cursors na GitHubu
    https://github.com/terryma/vim-multiple-cursors
  23. SLIME (Wikipedia)
    http://en.wikipedia.org/wiki/SLIME
  24. vim-slime na GitHubu
    https://github.com/jpalardy/vim-slime
  25. vi Editor Commands
    http://www.cs.rit.edu/~cslab/vi­.html#A1.4
  26. vi Manual
    http://www.cs.fsu.edu/gene­ral/vimanual.html
  27. Mastering the Vi Editor
    http://www.susnet.uk/mastering-the-vi-editor
  28. Using undo branches
    http://vim.wikia.com/wiki/U­sing_undo_branches
  29. Gundo
    http://sjl.bitbucket.org/gundo.vim/
  30. Vim as a Python IDE, or Python IDE as Vim
    http://blog.jetbrains.com/pychar­m/2013/06/vim-as-a-python-ide-or-python-ide-as-vim/
  31. histwin na GitHubu
    https://github.com/chrisbra/his­twin.vim
  32. histwin.vim : Browse the undo tree
    http://www.vim.org/scripts/scrip­t.php?script_id=2932
  33. undotree.vim : Display your undo history in a graph
    http://www.vim.org/scripts/scrip­t.php?script_id=4177
  34. Surround
    http://www.bestofvim.com/plu­gin/surround/
  35. SnipMate
    http://www.bestofvim.com/plu­gin/snipmate/
  36. Getting a Clojure REPL in Vim With VimClojure, Nailgun, and Leiningen
    http://naleid.com/blog/2011/12/19/get­ting-a-clojure-repl-in-vim-with-vimclojure-nailgun-and-leiningen/
  37. The NERD Commenter : A plugin that allows for easy commenting of code for many filetypes.
    http://www.vim.org/scripts/scrip­t.php?script_id=1218
  38. NERD Commenter na GitHubu
    https://github.com/scroolo­ose/nerdcommenter
  39. luarefvim : Lua reference manual
    http://www.vim.org/scripts/scrip­t.php?script_id=1291
  40. lua.vim : Lua file type plug-in for the Vim text editor
    http://www.vim.org/scripts/scrip­t.php?script_id=3625
  41. vim-lua-ftplugin
    https://github.com/xolox/vim-lua-ftplugin
  42. Vi Improved
    https://wiki.python.org/moin/Vim
  43. javacomplete : Omni Completion for JAVA
    http://www.vim.org/scripts/scrip­t.php?script_id=1785
  44. SearchComplete
    http://www.vim.org/scripts/scrip­t.php?script_id=474
  45. ShowMarks
    http://www.vim.org/scripts/scrip­t.php?script_id=152
  46. ctrlp.vim
    https://github.com/kien/ctrlp.vim
  47. ctrlp.vim
    http://kien.github.io/ctrlp.vim/
  48. vim-signature
    https://github.com/kshenoy/vim-signature
  49. Supertab
    http://www.vim.org/scripts/scrip­t.php?script_id=1643
  50. Supertab (GitHub)
    https://github.com/ervandew/supertab
  51. Vim Essential Plugin: NERD Tree
    http://code.tutsplus.com/tutorials/vim-essential-plugin-nerdtree–net-19692
  52. The NERD tree: A tree explorer plugin for navigating the filesystem
    http://vim.sourceforge.net/scrip­ts/script.php?script_id=1658
  53. NERD Tree Guide
    http://usevim.com/2012/07/18/ner­dtree/
  54. vcscommand.vim : CVS/SVN/SVK/git/hg/bzr integration plugin
    http://www.vim.org/scripts/scrip­t.php?script_id=90
  55. vcscommand na GitHubu
    https://github.com/vim-scripts/vcscommand.vim
  56. Popis skriptu Vim Pathogen
    http://www.vim.org/scripts/scrip­t.php?script_id=2332
  57. Posledníverze skriptu Vim Pathogen
    https://tpo.pe/pathogen.vim
  58. Nejlepší pluginy pro Vim
    http://vimawesome.com/
  59. Nejlepší pluginy pro Vim
    http://www.vim.org/scripts/scrip­t_search_results.php?order_by=ra­ting
  60. Vim-airline na GitHubu
    https://github.com/bling/vim-airline
  61. Vim-airline na www.vim.org
    http://www.vim.org/scripts/dow­nload_script.php?src_id=22726
  62. Vim-fugitive na GitHubu
    https://github.com/tpope/vim-fugitive
  63. Vim-fugitive na www.vim.org
    http://www.vim.org/scripts/scrip­t.php?script_id=2975
  64. Textový editor Vim jako IDE (seriál)
    http://www.root.cz/clanky/textovy-editor-vim-jako-ide/
  65. VIM as Python IDE
    http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/
  66. Stack Overflow: VIM: Perl interface: passing a variable to Perl and reading a vim variable from Perl
    http://stackoverflow.com/qu­estions/4999902/vim-perl-interface-passing-a-variable-to-perl-and-reading-a-vim-variable-from
  67. Stack Overflow: Getting started with vim scripting with Perl
    http://stackoverflow.com/qu­estions/2208618/getting-started-with-vim-scripting-with-perl
  68. Python with a modular IDE (Vim)
    http://www.sontek.net/python-with-a-modular-ide-vim
  69. Vim as XML Editor
    http://www.pinkjuice.com/how­to/vimxml/
  70. xmledit: A filetype plugin to help edit XML, HTML, and SGML documents
    http://www.vim.org/scripts/scrip­t.php?script_id=301
  71. snipMate : TextMate-style snippets for Vim
    http://www.vim.org/scripts/scrip­t.php?script_id=2540
  72. msanders / snipmate.vim
    https://github.com/msander­s/snipmate.vim
  73. snipMate.vim Introductory Screencast
    http://vimeo.com/3535418
Našli jste v článku chybu?