Obsah
1. Plugin vim-orgmode: portace populárního orgmode do Vimu
2. Princip, na němž je orgmode založen
3. Použití správce balíčků Pathogen
4. Instalace a konfigurace Pathogenu
5. Instalace samotného modulu vim-orgmode
6. Instalace pomocných pluginů vim-speeddating a calendar
7. Dokončení konfigurace v souboru .vimrc
8. Nastavení proměnné maplocalleader
9. Základní struktura souborů s poznámkami a diářem
13. Značky „Udělat“ a „Hotovo“
14. Definice značek pro specifické procesy
16. Základní operace pro práci s daty a časovými značkami
18. Další užitečné pluginy pro zjednodušení práce s vim-orgmode
19. Prozatím neimplementované vlastnosti modulu vim-orgmode
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, …).
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.
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. |
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 :-)
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
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).
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.
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.
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
- Org-Mode home page
https://orgmode.org/ - The Org Manual
https://orgmode.org/manual/index.html - Org mode beginning at the basics
https://orgmode.org/worg/org-tutorials/org4beginners.html - Org-mode na Gitu
https://code.orgmode.org/bzg/org-mode - Emacs Org-mode: Organizing a Scientist’s Life and Work
https://vimeo.com/33725204 - Outlining Your Notes with Org
http://sachachua.com/blog/2008/01/outlining-your-notes-with-org/ - The Plain Text Project
https://plaintextproject.online/ - Org-mode (Wikipedia)
https://en.wikipedia.org/wiki/Org-mode - vim-orgmode na GitHubu
https://github.com/jceb/vim-orgmode - vim-speeddating na GitHubu
https://github.com/tpope/vim-speeddating - calendar.vim na GitHubu
https://github.com/mattn/calendar-vim - Org Guide
https://github.com/jceb/vim-orgmode/blob/master/doc/orgguide.txt - Org Mode: which plugin to use. VimOrganizer or Vim-Orgmode?
https://www.reddit.com/r/vim/comments/4ms4z0/org_mode_which_plugin_to_use_vimorganizer_or/ - Writing Vim Plugins
http://stevelosh.com/blog/2011/09/writing-vim-plugins/ - how to understand this vim script?
http://stackoverflow.com/questions/12625091/how-to-understand-this-vim-script - Novinky ve VIM 7: Skriptovací jazyk
http://www.root.cz/vim-sedm-druha-cast/ - DirDiff.vim : A plugin to diff and merge two directories recursively.
http://www.vim.org/scripts/script.php?script_id=102 - vim-dirdiff na GitHubu
https://github.com/will133/vim-dirdiff - fakeclip : pseudo clipboard register for non-GUI version of Vim
http://www.vim.org/scripts/script.php?script_id=2098 - vim-fakeclip na GitHubu
https://github.com/kana/vim-fakeclip - vim-fakeclip: Dokumentace
http://kana.github.io/config/vim/fakeclip.html - Vim Multiple Cursors na GitHubu
https://github.com/terryma/vim-multiple-cursors - SLIME (Wikipedia)
http://en.wikipedia.org/wiki/SLIME - vim-slime na GitHubu
https://github.com/jpalardy/vim-slime - vi Editor Commands
http://www.cs.rit.edu/~cslab/vi.html#A1.4 - vi Manual
http://www.cs.fsu.edu/general/vimanual.html - Mastering the Vi Editor
http://www.susnet.uk/mastering-the-vi-editor - Using undo branches
http://vim.wikia.com/wiki/Using_undo_branches - Gundo
http://sjl.bitbucket.org/gundo.vim/ - Vim as a Python IDE, or Python IDE as Vim
http://blog.jetbrains.com/pycharm/2013/06/vim-as-a-python-ide-or-python-ide-as-vim/ - histwin na GitHubu
https://github.com/chrisbra/histwin.vim - histwin.vim : Browse the undo tree
http://www.vim.org/scripts/script.php?script_id=2932 - undotree.vim : Display your undo history in a graph
http://www.vim.org/scripts/script.php?script_id=4177 - Surround
http://www.bestofvim.com/plugin/surround/ - SnipMate
http://www.bestofvim.com/plugin/snipmate/ - Getting a Clojure REPL in Vim With VimClojure, Nailgun, and Leiningen
http://naleid.com/blog/2011/12/19/getting-a-clojure-repl-in-vim-with-vimclojure-nailgun-and-leiningen/ - The NERD Commenter : A plugin that allows for easy commenting of code for many filetypes.
http://www.vim.org/scripts/script.php?script_id=1218 - NERD Commenter na GitHubu
https://github.com/scrooloose/nerdcommenter - luarefvim : Lua reference manual
http://www.vim.org/scripts/script.php?script_id=1291 - lua.vim : Lua file type plug-in for the Vim text editor
http://www.vim.org/scripts/script.php?script_id=3625 - vim-lua-ftplugin
https://github.com/xolox/vim-lua-ftplugin - Vi Improved
https://wiki.python.org/moin/Vim - javacomplete : Omni Completion for JAVA
http://www.vim.org/scripts/script.php?script_id=1785 - SearchComplete
http://www.vim.org/scripts/script.php?script_id=474 - ShowMarks
http://www.vim.org/scripts/script.php?script_id=152 - ctrlp.vim
https://github.com/kien/ctrlp.vim - ctrlp.vim
http://kien.github.io/ctrlp.vim/ - vim-signature
https://github.com/kshenoy/vim-signature - Supertab
http://www.vim.org/scripts/script.php?script_id=1643 - Supertab (GitHub)
https://github.com/ervandew/supertab - Vim Essential Plugin: NERD Tree
http://code.tutsplus.com/tutorials/vim-essential-plugin-nerdtree–net-19692 - The NERD tree: A tree explorer plugin for navigating the filesystem
http://vim.sourceforge.net/scripts/script.php?script_id=1658 - NERD Tree Guide
http://usevim.com/2012/07/18/nerdtree/ - vcscommand.vim : CVS/SVN/SVK/git/hg/bzr integration plugin
http://www.vim.org/scripts/script.php?script_id=90 - vcscommand na GitHubu
https://github.com/vim-scripts/vcscommand.vim - Popis skriptu Vim Pathogen
http://www.vim.org/scripts/script.php?script_id=2332 - Posledníverze skriptu Vim Pathogen
https://tpo.pe/pathogen.vim - Nejlepší pluginy pro Vim
http://vimawesome.com/ - Nejlepší pluginy pro Vim
http://www.vim.org/scripts/script_search_results.php?order_by=rating - Vim-airline na GitHubu
https://github.com/bling/vim-airline - Vim-airline na www.vim.org
http://www.vim.org/scripts/download_script.php?src_id=22726 - Vim-fugitive na GitHubu
https://github.com/tpope/vim-fugitive - Vim-fugitive na www.vim.org
http://www.vim.org/scripts/script.php?script_id=2975 - Textový editor Vim jako IDE (seriál)
http://www.root.cz/clanky/textovy-editor-vim-jako-ide/ - VIM as Python IDE
http://blog.dispatched.ch/2009/05/24/vim-as-python-ide/ - Stack Overflow: VIM: Perl interface: passing a variable to Perl and reading a vim variable from Perl
http://stackoverflow.com/questions/4999902/vim-perl-interface-passing-a-variable-to-perl-and-reading-a-vim-variable-from - Stack Overflow: Getting started with vim scripting with Perl
http://stackoverflow.com/questions/2208618/getting-started-with-vim-scripting-with-perl - Python with a modular IDE (Vim)
http://www.sontek.net/python-with-a-modular-ide-vim - Vim as XML Editor
http://www.pinkjuice.com/howto/vimxml/ - xmledit: A filetype plugin to help edit XML, HTML, and SGML documents
http://www.vim.org/scripts/script.php?script_id=301 - snipMate : TextMate-style snippets for Vim
http://www.vim.org/scripts/script.php?script_id=2540 - msanders / snipmate.vim
https://github.com/msanders/snipmate.vim - snipMate.vim Introductory Screencast
http://vimeo.com/3535418