Obsah
1. Vim ve funkci textového editoru pro tvůrčí psaní
2. Co se skrývá pod termínem distraction-free editor
4. Textový editor Vim ve funkci distraction-free editoru
5. Nastavení velikosti plochy pro zobrazení textu
6. Vycentrování plochy pro zobrazení textu
7. Skrytí okrajů pomocných oken
8. Nastavení týkající se stavového řádku, popř. ovládacích elementů GUI
9. Změna rozestupu mezi textovými řádky
10. Volba vhodného formátu pro tvorbu
12. Automatické přeformátování odstavců během úprav textů
13. Nastavení tvaru a barvy textového kurzoru
14. Jednoduchý modul pro zapnutí a opětovné vypnutí distraction-free režimu
16. Další pluginy pro Vim s podobnou funkcí
1. Vim ve funkci textového editoru pro tvůrčí psaní
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. 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ší. O tom se přesvědčíme dnes, protože si ukážeme, jakým způsobem lze Vim nakonfigurovat takovým způsobem, aby byl použitelný jako takzvaný editor pro tvůrčí psaní, což je velmi volný (ale příhodný) překlad termínu distraction-free editor. Ukazuje se tak, jak jsou možnosti Vimu, resp. přesněji řečeno možnosti jeho konfigurace, široké.
Obrázek 1: Příklad pluginu pro Vim, který z tohoto editoru vytvoří užitečný diář.
Obrázek 2: Modul určený pro organizaci poznámek; lze zkombinovat s výše zmíněným modulem pro diář.
2. Co se skrývá pod termínem distraction-free editor
Co se ale vlastně skrývá pod termínem editor pro tvůrčí psaní, popř. pod jeho anglickým ekvivalentem? Termín distraction-free (text) editor je poměrně vágní (autoři různého SW si ho vykládají taktéž různě), ovšem většinou se jím označuje takový textový editor, popř. textový procesor, který zobrazuje své rozhraní na ploše celé obrazovky [1] a neobsahuje mnoho ovládacích prvků. V limitní podobě nejsou zobrazeny prakticky žádné ovládací prvky – pouze vlastní editovaný text a kurzor ukazující pozici, kde dochází k editaci. Existují ovšem i editory, které jdou ještě dále, protože emulují mechanický nebo elektromechanický psací stroj: text se pouze přidává na konec editovaného souboru a většinou nejsou podporovány žádné další operace (dokonce ani pohyb v textu), maximálně funkce BackSpace. To je ovšem – alespoň podle mého skromného názoru – jen pozérství, které zcela zbytečně ignoruje vývoj posledních 45 let v IT, tj. masivní prosazení počítačů s plně interaktivním rozhraním, které umožňuje rychle opravit různé chyby a nedodělky. Proto budeme v tomto článku za plnohodnotný a prakticky použitelný editor pro tvůrčí psaní (distraction-free) považovat aplikaci se zhruba následujícími vlastnostmi:
- Umožňuje běh (zobrazení) na celé ploše obrazovky, ať již se jedná o program s grafickým uživatelským rozhraním či o editor běžící v terminálu (či přímo na textové konzoli).
- Umožňuje vypnout většinu ovládacích prvků, ideálně až do stavu, kdy je vidět pouze editovaný text a textový kurzor.
- Podporuje všechny základní editační operace, vyhledávání v textu apod.
- Ideálně by měl podporovat slovník a kontrolu pravopisu.
- Taktéž by bylo dobré, aby bylo podporováno zvýrazňování syntaxe u často používaných formátů dokumentů (AsciiDoc, MarkDown, reStructuredText, …).
- Měl by podporovat Unicode (což je dnes již většinou samozřejmost)
- Někteří autoři vyžadují i funkci pro počítání slov, protože u některých typů dokumentů je nutné se vejít do zadaného rozsahu (mnohdy je to ovšem kontraproduktivní).
- Osobně oceňuji i možnost konfigurace tvaru, barvy a popř.(ne)blikání kurzoru.
Obrázek 3: Typickým zástupcem editorů pro tvůrčí psaní je PyRoom. Černý okraj je součástí designu editoru, protože jeho plocha musí zabrat celou obrazovku a širokoúhlé obrazovky nejsou příliš vhodným médiem pro tvorbu textů (pokud se ovšem neotočí o 90°).
Obrázek 4: GhostWriter je dalším známým editorem pro tvůrčí psaní. Dokáže přímo pracovat s MarkDownem a má jen minimum viditelných ovládacích prvků.
3. Znovuobjevení kola?
Popularita textových editorů určených pro tvůrčí psaní je do určité míry reakcí na stále se zvyšující komplikovanost uživatelských rozhraní, různých oznamovačů nových zpráv, připravených update atd. – počítač (resp. jeho rozhraní viditelné uživateli) se tak ze sluhy, který pouze tiše očekával příkazy od uživatele změnil v zařízení, které si (mnohdy neustále) vyžaduje pozornost a tím pádem ji odvádí od reálné práce. Ve skutečnosti ale nejsou distraction-free editory v žádném případě něčím nově objeveným, protože mnoho textových editorů pocházejících z éry osmibitových domácích mikropočítačů, popř. osobních mikropočítačů používalo – prakticky to byla nutnost vynucená technickými omezeními – taktéž minimalisticky pojaté uživatelské rozhraní (a samotné desktopové rozhraní, pokud vůbec existovalo, bylo taky relativně minimalistické a především pasivní). Mnoho tehdejších editorů bylo vybaveno buď pouze stavovým řádkem, popř. kombinací stavového řádku a řádku s menu. A u některých editorů bylo možné oba zmíněné ovládací prvky vypnout a mít tak k dispozici celou plochu obrazovky pouze pro přípravu textu.
Některé z původních minimalisticky pojatých textových editorů jsme si již popsali v předchozích článcích o historii vývoje výpočetní techniky a grafického uživatelského rozhraní, takže si zde jen ukažme několik screenshotů pro připomenutí:
Obrázek 5: Relativně jednoduchý textový editor (a současně i textový procesor) SpeedScript ve variantě určené pro osmibitové domácí mikropočítače Atari. Tento editor nabízel základní formátovací funkce, vyhledávání, nahrazování atd. Namísto menu byl ovládán klávesovými zkratkami, které mj. ovlivňovaly i obsah stavového řádku zobrazeného v horní části obrazovky. Tento textový editor byl různými programátory upravován, takže existují minimálně dvě počeštěné verze (Čapek, Čížek) a jedna slovenská verze (Štúr) – viz též příslušné odkazy na konci článku.
Obrázek 6: SpeedScript byl portován i na počítače kompatibilní s IBM PC a operačním systémem DOS. Zde bylo možné využít zobrazení osmdesáti znaků na textovém řádku, což byl oproti původním osmibitovým variantám velký pokrok vzhledem k tomu, že se při tisku používalo cca 60 znaků na řádek.
Obrázek 7: TypeWriter je textový editor/procesor určený pro domácí osmibitové mikropočítače ZX Spectrum.
Obrázek 8: Textový editor známý pod jménem e.com byl vlastně prakticky ideálním minimalistickým editorem pro tvůrčí psaní. Dokázal nastavovat oba okraje textu, provádět základní editační příkazy, vyhledávání, spouštění maker atd. To vše zabaleno v jediném spustitelném souboru o velikost nepřesahující pět kilobajtů.
Obrázek 9: Editor Joe (zde ve variantě přeložené pro Linux) v režimu emulace textového procesoru WordStar. Horní nápovědu i prakticky všechny další ovládací a informační prvky je možné vypnout a soustředit se pouze na psaní.
4. Textový editor Vim ve funkci distraction-free editoru
„vi is small, fast, and easy to use. Emacs is huge, slow and easy to use :)“
Existuje sice relativně velké množství textových editorů určených přímo pro tvůrčí psaní (viz například tento článek), ovšem ne vždy je nutné přecházet ke specializované aplikaci, u níž prakticky vždy hrozí nebezpečí, že nebude obsahovat některou důležitou vlastnost (a to se někdy týká i takových základních věcí, jako je kontrola pravopisu). Namísto toho může být výhodnější použít plnohodnotný a časem prověřený textový editor, který se náležitým způsobem upraví do podoby, jejíž vzhled i chování bude plně odpovídat požadavkům uživatele. Podívejme se například na plugin (přídavný modul) nazvaný Goyo, který textový editor Vim (ideálně GVim, u nějž lze provádět mnohé další nastavení vizuálního vzhledu) přepíná do režimu, který je již ve většině ohledů klasickým distraction-free editorem, ovšem stále se zachováním všech původních vlastností Vimu (a ty jsou skutečně nepřeberné):
Obrázek 10: Plugin Goyo je propracovaným přídavným modulem pro Vim, který tento editor přepíná do režimu distraction-free.
Ovšem cesta od klasického Vimu či GVimu k editoru nastaveném takovým způsobem, aby umožňoval tvůrčí psaní, vyžaduje několik kroků, protože původní GUI GVimu nejenže obsahuje mnoho (mnohdy zbytečných) ovládacích prvků, ale navíc není způsob zobrazení textů zcela ideální:
Obrázek 11: Gvim (Vim s grafickým uživatelským rozhraním) ve výchozím nastavení se příliš nepodobá editoru pro tvůrčí psaní.
5. Nastavení velikosti plochy pro zobrazení textu
Nejprve se budeme snažit o změnu velikosti plochy pro zobrazení textu. K tomu (alespoň teoreticky) slouží volby columns a lines, takže se můžeme pokusit je změnit, například na 65 znaků na řádku a 48 textových řádků:
set columns=65 set lines=48
Ve skutečnosti nám ovšem tyto volby samy o sobě příliš nepomůžou, protože pouze zmenší okno editoru a při jeho maximalizaci (resp. po přepnutí do režimu full screen) se vše vrátí zpět:
Obrázek 12: Změna počtu řádků a počtu sloupců.
Musíme tedy použít odlišný přístup, jenž bude popsán v navazující kapitole.
6. Vycentrování plochy pro zobrazení textu
Alternativní řešení je mnohem lepší a spočívá ve vytvoření několika oken (window) v rámci plochy alokované pro celý editor. Tato okna nebudou použita pro zobrazení reálného obsahu, ale pouze jako výplň plochy nalevo, napravo, nahoře a dole pod aktivním oknem. Ke specifikaci okrajů lze použít globálních proměnných zapsaných do nějakého Vim skriptu. Tyto proměnné udávají potřebnou velikost pracovní plochy – prostředního okna:
let g:dfm_width = 80 "absolute width or percentage, like 0.7 let g:dfm_height = 0.8
Pro vytvoření dalších pomocných oken poslouží tato část skriptu, která volá příkazy split a vsplit pro postupné rozdělení plochy na podokna:
let l:w = g:dfm_width > 1 ? g:dfm_width : (winwidth('%') * g:dfm_width) let l:margins = { \ "l": ("silent leftabove " . float2nr((winwidth('%') - l:w) / 2 - 1) . " vsplit new"), \ "h": ("silent rightbelow " . float2nr((winwidth('%') - l:w) / 2 - 1) . " vsplit new"), \ "j": ("silent leftabove " . float2nr(winheight('%') * (1 - g:dfm_height) / 2 - 1) . " split new"), \ "k": ("silent rightbelow " . float2nr(winheight('%') * (1 - g:dfm_height) / 2 - 1) . " split new"), \ } for key in keys(l:margins) execute l:margins[key] . " | wincmd " . key endfor
Obrázek 13: Rozdělení plochy editoru na jednotlivá podokna.
:help window :help split :help vsplit :help wincmd
7. Skrytí okrajů pomocných oken
Pomocná okna a především okraje mezi okny by neměly být viditelné. Toho není ve Vimu problém dosáhnout, protože prakticky každý prvek jeho rozhraní má modifikovatelnou barvu popředí, barvu pozadí a styl textu (výjimkou je kurzor v textové konzoli). V našem konkrétním případě nastavíme vhodnou barvu zobrazení u prvků nazvaných NonText, VertSplit, StatusLine a StatusLineNC, například následovně:
for key in ['NonText', 'VertSplit', 'StatusLine', 'StatusLineNC'] execute 'hi ' . key . ' ctermbg=NONE guibg=NONE guifg=bg cterm=NONE term=NONE' endfor
Obrázek 14: Skrytí okrajů oken a dalších prvků, které nejsou nutně zapotřebí.
:help highlight :help term :help cterm :help ctermfg :help ctermbg :help guifg :help guibg
8. Nastavení týkající se stavového řádku, popř. ovládacích elementů GUI
Dále je vhodné skrýt veškeré prvky GUI, což je velmi snadné:
set guioptions=
V MacOS existuje volba fullscreen, kterou lze zapnout pro přepnutí do režimu plné obrazovky:
set fullscreen
Většinou budeme chtít vypnout i pravítko, a to příkazem:
set noruler
Popř. lze pravítko nechat zobrazeno, ale změnit jeho formát (tj. jaké informace mají být zobrazeny). Formát pravítka se nastavuje pomocí konfiguračního řetězce přiřazeného do konfiguračního parametru rulerformat, zatímco u stavového řádku se jedná o konfigurační parametr statusline. Způsob zobrazení stavového řádku pro poslední (nejspodnější) okno se řídí pomocí volby laststatus. Vypnutí stavového řádku zajistí volba:
set laststatus=0
Obrázek 15: Nastavení pravítka.
Obrázek 16: Nastavení stavového řádku.
9. Změna rozestupu mezi textovými řádky
Při delším psaní může být užitečné změnit rozestupy mezi jednotlivými řádky, což je opět volba dostupná pouze v GVimu (pochopitelně). Rozestup mezi řádky se uvádí v pixelech a nastavuje se volbou linespace:
set linespace=3
Obrázek 17: Nastavení linespace=0.
Obrázek 18: Nastavení linespace=3.
Obrázek 19: Nastavení linespace=5.
10. Volba vhodného formátu pro tvorbu
Výše uvedené screenshoty sice používají první verzi dnešního článku zapsanou přímo v HTML, ovšem pro tvůrčí psaní vůbec není HTML vhodné – je příliš rušivé. Ideální bude použít některý z postmoderních značkovacích jazyků, o nichž jsme se zmínili v článku Rozsáhlý svět značkovacích jazyků.
Jen ve stručnosti:
AsciiDoc, jehož první verze vznikla v roce 2002 a jehož autorem je Stuart Rackham, je možná nejvhodnějším formátem. Jedná se o značkovací jazyk, který se podobně jako ostatní postmoderní značkovací jazyky snaží o to, aby byl na prvním místě samotný dokument (text) a případné značky se přidávaly pouze tam, kde je to nutné. Navíc by měl být dokument vytvořený v AsciiDocu čitelný i bez použití konvertorů (asciidoc, a2×, Asciidoctor). AsciiDoc je dnes podporovaný v mnoha textových editorech, které mnohdy nabízí i režim náhledu na editovaný dokument, viz například textový editor Atom. Jeho předností je například podpora pro specifikaci tabulek.
V roce 2002, tedy ve stejném roce, kdy vznikl AsciiDoc, byl navržen i další podobný značkovací jazyk nazvaný reST neboli reStructuredText, jehož autorem je David Goodger. Jedná se o jazyk částečně postavený na značkovacím jazyku StructuredText používaném v Zope, který ovšem měl několik nepříjemných vlastností, které byly v reST vyřešeny. Dnes se tento značkovací jazyk používá velmi masivně, a to ve světě Pythonu (například pro dokumentaci vlastního jazyka a jeho knihoven), protože ho od roku 2008 podporuje nástroj Sphinx. Důležitou službou je Read the Docs umožňující publikování dokumentace vytvořené právě v reST, popř. v Markdownu. Může se jednat jak o několik odstavců, tak i o rozsáhlé knihy.
Dva roky po uvedení AsciiDocu a ReStructuredTextu vznikl formát Markdown, který pravděpodobně není nutné čtenářům tohoto serveru dlouze představovat, protože soubory Markdown jsou masivně používány, zejména pro zápis kratší dokumentace, v níž se ještě neprojeví některé nepodporované vlastnosti. Původními autory Markdownu jsou John Gruber a Aaron Swartz. Původně se jednalo o velmi jednoduchý značkovací jazyk umožňující specifikaci nadpisů, seznamů s odrážkami, číslovaných seznamů, odkazů a obrázků, později ovšem došlo k několika rozšířením Markdownu o další vlastnosti, například o zaškrtávací boxy (což je pro beletrii a podobné texty zbytečné).
11. Parametry editace
Při editaci dokumentů s dlouhými odstavci (například beletrie) je nutné nějakým způsobem pracovat s „nekonečnými odstavci“, což jsou vlastně textové řádky, které po zalomení vytvoří celý odstavec. Takovým způsobem se s dokumenty pracuje v textových procesorech.
Nejprve si uvedeme konfigurační parametry ovlivňující způsob zobrazení dlouhých textových řádků, tj. „nekonečných odstavců“:
# | Jméno parametru | Zkrácený název | Význam |
---|---|---|---|
1 | wrap | wrap | zapnutí vizuálního zalamování, při němž se do souborů automaticky nevkládá znak pro konec řádku |
2 | nowrap | nowrap | vypnutí vizuálního zalamování, vypíná i volbu linebreak |
3 | linebreak | lbr | zapnutí vizuálního zalamování na hranicích slov |
4 | nolinebreak | nolbr | vypnutí vizuálního zalamování na hranicích slov |
5 | showbreak | sbr | specifikace textu vkládaného na začátek vizuálně zalomené řádky (text se do souboru neuloží) |
Ve druhé tabulce jsou uvedeny konfigurační parametry, které se používají v případě, že je text poloautomaticky či zcela automaticky formátován do samostatných řádků (Vim tedy v textu vytváří či naopak ruší znaky CR):
# | Jméno parametru | Zkrácený název | Význam |
---|---|---|---|
1 | textwidth | tw | automatické zalamování na xxx sloupci (při psaní se automaticky vkládá znak pro konec řádku) |
2 | wrapmargin | wm | alternativa k předchozí volbě, umožňuje vkládat znak konce řádku relativně vůči pravému okraji okna |
3 | formatoptions | fo | přesné určení způsobu formátování textů |
4 | formatlistpat | flp | použit při formátování seznamů |
Pod pojmem vizuální zalamování textů je myšlen způsob zobrazení dlouhých textových řádků na obrazovce, aniž by ovšem docházelo ke skutečnému vkládání znaků pro konec řádku (CR) do editovaného souboru – tedy kombinace wrap a linebreak. Ve skutečnosti je právě tento způsob přípravy textů nejjednodušší a nejpřirozenější, pro lepší práci s textem však může být vhodné provést přemapování kláves pro posun kurzoru nahoru a dolů následujícím způsobem:
" šipkou nahoru se pohybujeme po obrazových řádcích směrem nahoru :map <Up> gk
" šipkou dolů se pohybujeme po obrazových řádcích směrem dolů :map <Down> gj
12. Automatické přeformátování odstavců během úprav textů
V této kapitole si popíšeme druhý způsob práce s běžnými texty. Jedná se o způsob založený na tom, že textové odstavce jsou rozděleny do fyzických textových řádků takovým způsobem, že je Vim může rozeznat (pozná tedy začátek a konec odstavce) a tím pádem je i může poloautomaticky či dokonce zcela automaticky zformátovat, resp. přerovnat. Základním parametrem, který ovlivňuje chování Vimu při formátování odstavců, je volba textwidth, zkracovaná též na tw. Nulová hodnota vypíná formátování, zatímco hodnota kladná udává maximální délku textových řádků (typicky se používají hodnoty 60, 72 či 80). Podobný význam má i parametr wrapmargin, pomocí nějž je možné zadat šířku odstavců relativně k pravému okraji okna. Pokud například bude šířka okna 80 znaků a parametr wrapmargin bude nastaven na 10, budou se odstavce přerovnávat tak, aby maximální délka každého řádku byla rovna 80–10=70 znakům.
Textový editor Vim ovšem bez dalšího nastavení používá hodnoty textwidth a wrapmargin pouze při vkládání nového textu, nikoli například pro spojování kratších řádků při provádění různých editačních operací. Buď je možné formátování vynutit ručně, například příkazem gqap (format (a) paragraph), nebo lze do volby formatoptions přidat znak a, který zajistí automatické přeformátování odstavce při jakékoli manipulaci s textem:
:set formatoptions+=a
V případě, že je nastavena volba textwidth, lze odstavec či jakýkoli vybraný text zarovnat doleva, doprava či ho vycentrovat pomocí příkazů:
:left :right :center
Text je nutné nejprve vybrat do bloku, popř. použít jiný způsob zadání rozsahu výběru (například procento, určením čísel řádků atd.).
13. Nastavení tvaru a barvy textového kurzoru
Další užitečnou vlastností Vimu je jeho schopnost měnit konfiguraci tvaru, barvy i chování textového kurzoru v případě, že je editor Vim spuštěný s podporou grafického uživatelského rozhraní, tj. tehdy, když je použita volba vim -g, popř. je použit příkaz gvim. Na tomto místě je vhodné zdůraznit, že dále uvedené příkazy nebudou plně funkční v případě, že je textový editor Vim spuštěn v emulátoru terminálu, či dokonce na fyzickém terminálu (v Linuxu je z X Window Systemu přístupný například přes klávesovou kombinaci Ctrl+Alt+F1), protože způsob zobrazení kurzoru je v takových případech závislý buď na nastavení emulátoru terminálu nebo na konfiguraci hardware terminálu fyzického (jednou z výjimek je DOS a konzole ve Windows, kde lze částečně určit tvar kurzoru). Všechny vlastnosti textového kurzoru (při spuštění v GUI) jsou určeny konfiguračním parametrem guicursor a taktéž příkazem highlight, kterým se nastavují barvy kurzoru v jednotlivých režimech.
Podívejme se nyní podrobněji na možnosti konfiguračního parametru guicursor. Začněme specifikátorem režimu. Může se jednat o libovolnou kombinaci následujících kódů, které jsou od sebe odděleny pomlčkou, takže například řetězec n-v vybírá normální a současně i vizuální režim:
Kód režimu | Význam zkratky | Popis |
---|---|---|
n | normal | normální režim |
o | operator | normální režim ve chvíli očekávání operátoru (posun kurzoru), běžně se odvozuje od vlastností nastavených pro normální režim |
i | insert | vkládací režim (příkazy a, A, i, I, o, O, c apod.) |
r | replace | přepisovací režim (příkazy r a R) |
c | command | příkazový režim (barva kurzoru umístěného za posledním zapsaným znakem) |
ci | command | příkazový režim při nastavení vkládání (přepíná se klávesou INSERT) |
cr | command | příkazový režim při nastavení přepisování (přepíná se klávesou INSERT) |
v | visual | vizuální (výběrový) režim |
ve | visual exclusive | vizuální (výběrový) režim při nastavení exclusive (poslední znak není zahrnut do výběru) |
sm | showmatch | zobrazení párového znaku ve vkládacím režimu (kurzor se na chvíli může přesunout na párovou závorku atd.) |
a | all | všechny režimy |
Za kódem režimu či režimů se zapisuje dvojtečka a za ní další parametry, které jsou od sebe oddělené pomlčkou:
Parametr | Význam |
---|---|
block | blokový kurzor (kurzor má tvar obdélníku s plochou přesně o velikosti jednoho znaku) |
horXX | kurzor má tvar horizontální čáry o šířce XX procent výšky znaků (nenastavujte více než 100, jinak se kurzor nebude dobře překreslovat) |
verXX | kurzor má tvar vertikální čáry o šířce XX procent šířky znaků (nenastavujte více než 100, jinak se kurzor nebude dobře překreslovat) |
blinkonNN | interval, kdy je kurzor viditelný, zadaný v milisekundách (0=kurzor nebliká) |
blinkoffNN | interval, kdy je kurzor viditelný, zadaný v milisekundách |
blinkwaitNN | interval, kdy je kurzor po přesunu zobrazený bez blikání, zadaný v milisekundách |
jiný text | jméno skupiny specifikované příkazem highlight |
Použití jména skupiny pro změnu barvy kurzoru je jednoduché. Následující sekvence příkazů například nastaví barvu kurzoru pro všechny režimy na čistě žlutou, znaky pod kurzorem budou zobrazeny tmavě červenou barvou. Kurzor má tvar horizontální čárky, která má tloušťku jedné čtvrtiny výšky znaků (přesněji řečeno jedné čtvrtiny výšky znaků plus hodnoty linespace:
:set guicursor=a:hor25-myCursorStyle :highlight myCursorStyle guibg=yellow guifg=darkred
14. Jednoduchý modul pro zapnutí a opětovné vypnutí distraction-free režimu
Většinu nastavení popsaných v předchozích kapitolách lze použít v jednoduchém modulu (vlastně jen jediném Vim skriptu), který dokáže po stisku klávesové zkratky Leader+z (kde Leader je například zpětné lomítko – jedná se o plně konfigurovanou volbu) přepínat mezi distraction-free režimem a běžným režimem zobrazení:
let g:dfm_width = 80 "absolute width or percentage, like 0.7 let g:dfm_height = 0.8 let s:dfm_enabled = 0 function! ToggleDistractionFreeMode() let l:w = g:dfm_width > 1 ? g:dfm_width : (winwidth('%') * g:dfm_width) let l:margins = { \ "l": ("silent leftabove " . float2nr((winwidth('%') - l:w) / 2 - 1) . " vsplit new"), \ "h": ("silent rightbelow " . float2nr((winwidth('%') - l:w) / 2 - 1) . " vsplit new"), \ "j": ("silent leftabove " . float2nr(winheight('%') * (1 - g:dfm_height) / 2 - 1) . " split new"), \ "k": ("silent rightbelow " . float2nr(winheight('%') * (1 - g:dfm_height) / 2 - 1) . " split new"), \ } if (s:dfm_enabled == 0) let s:dfm_enabled = 1 for key in keys(l:margins) execute l:margins[key] . " | wincmd " . key endfor for key in ['NonText', 'VertSplit', 'StatusLine', 'StatusLineNC'] execute 'hi ' . key . ' ctermbg=NONE guibg=NONE guifg=bg cterm=NONE term=NONE' endfor set wrap | set linebreak set statusline=foo map j gj map k gk else let s:dfm_enabled = 0 for key in keys(l:margins) execute "wincmd " . key . " | close " endfor set nowrap | set nolinebreak unmap j unmap k endif endfunction nmap <silent> <Leader>z :call ToggleDistractionFreeMode()<CR>
Tento skript lze načíst z .vimrc příkazem autocommand, a to jen pro vybrané typy souborů:
augroup __ascii__ au! au BufRead,BufNewFile *.txt set tw=72 formatoptions+=t foldmethod=indent au BufRead,BufNewFile *.txt set foldclose=all foldnestmax=1 tabstop=4 au BufRead,BufNewFile *.txt so df.vim augroup END
15. Easy režim
Easy režim (příkaz evim) je pochopitelně plně podporován a jeho nastavení nemá vliv na způsob zobrazení textů při editaci (a naopak). Díky evimu je tedy možné Vim používat jako nemodální editor (samozřejmě do určité míry, protože striktně nemodální není žádný editor).
16. Další pluginy pro Vim s podobnou funkcí
Existují pochopitelně i další pluginy pro Vim, které podobné funkce nabízí. Pravděpodobně nejpoužívanějším pluginem tohoto typu je qoyo.vim, jehož repositář i s popisem naleznete na GitHubu na adrese https://github.com/junegunn/goyo.vim. Alternativně je možné použít i LiteDFM, viz též https://github.com/bilalq/lite-dfm.
Obrázek 18: Pro delší práci je možná vhodnější tmavé pozadí – s naším pluginem je plně kompatibilní jakékoli barevné schéma.
17. Odkazy na Internetu
- Textové editory pro tvůrčí psaní
https://www.root.cz/clanky/textove-editory-pro-tvurci-psani/ - Seriál Textový editor Vim jako IDE
https://www.root.cz/serialy/textovy-editor-vim-jako-ide/ - Články s nálepkou „Vim“ na Rootu
https://www.root.cz/n/vim/ - goyo.vim
https://github.com/junegunn/goyo.vim - LiteDFM
https://github.com/bilalq/lite-dfm - distraction-free-writing-vim
https://github.com/laktek/distraction-free-writing-vim - Distraction Free Writing with Vim
http://www.laktek.com/2012/09/05/distraction-free-writing-with-vim/ - Distraction Free Vim
http://thedarnedestthing.com/distraction%20free%20vim - Vim – The Distraction Free Editor
https://matthewsetter.com/vim-the-distraction-free-editor/ - Distraction free writing in Vim
https://zserge.com/posts/vim-distraction-free/ - Distraction-free writing with vim
https://www.hamvocke.com/blog/distraction-free-writing/ - tablign na PyPi
https://pypi.org/project/tablign/ - tablign na GitHubu
https://github.com/nschloe/tablign - Tables in vim (reddit)
https://www.reddit.com/r/vim/comments/8lyigo/tables_in_vim/ - vim-table-mode (repositář na GitHubu)
https://github.com/dhruvasagar/vim-table-mode - table-mode na Vim.org (starší verze!)
https://www.vim.org/scripts/script.php?script_id=4501 - Smarter Table Editing
https://vim.fandom.com/wiki/Smarter_Table_Editing - Smarter Table Editing II
https://vim.fandom.com/wiki/Smarter_Table_Editing_II - Články o Vimu na Root.cz:
http://www.root.cz/n/vim/clanky/ - Replace and Virtual Replace Modes
https://medium.com/vim-drops/replace-and-virtual-replace-modes-3e841b9161ca - How can I easily create and maintain tables?
https://vi.stackexchange.com/questions/363/how-can-i-easily-create-and-maintain-tables - Vim – the editor
http://www.vim.org/ - 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/ - 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 - Vi Improved
https://wiki.python.org/moin/Vim - Building Vim
http://vim.wikia.com/wiki/Building_Vim - Vim plugins for developers
http://www.linuxtoday.com/upload/vim-plugins-for-developers-140619094010.html - 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 - The NERD tree: A tree explorer plugin for navigating the filesystem
http://www.vim.org/scripts/script.php?script_id=1658 - JavaBrowser : Shows java file class, package in a tree as in IDEs. Java source browser.
http://www.vim.org/scripts/script.php?script_id=588 - snippetsEmu : An attempt to emulate TextMate's snippet expansion
http://www.vim.org/scripts/script.php?script_id=1318 - c.vim : C/C++ IDE key mappings
http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf - Základní základy editoru Vim
http://www.root.cz/clanky/zakladni-zaklady-editoru-vim/ - Jak si přizpůsobit Vim
http://www.root.cz/serialy/jak-si-prizpusobit-vim/ - Taglist (plugin)
http://www.vim.org/scripts/script.php?script_id=273 - Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
http://www.thegeekstuff.com/2009/01/tutorial-make-vim-as-your-cc-ide-using-cvim-plugin/ - c.vim : C/C++ IDE
http://vim.sourceforge.net/scripts/script.php?script_id=213 - The History of Vim
https://jovicailic.org/2014/06/the-history-of-vim/ - Display date-and-time on status line
http://vim.wikia.com/wiki/Display_date-and-time_on_status_line - Vim 8.1 is available!
https://www.vim.org/vim-8.1-released.php - Vim 8.0 is released
https://laravel-news.com/2016/09/vim-8–0-is-released/ - Vim: So long Pathogen, hello native package loading
https://shapeshed.com/vim-packages/ - Asynchronous grep plugin for Vim
https://github.com/ramele/agrep - Run Async Shell Commands in Vim 8.0 / NeoVim and Output to Quickfix Window
https://github.com/skywind3000/asyncrun.vim - :smile command was not backported! #5116
https://github.com/neovim/neovim/issues/5116 - Run :make and :grep in background jobs (experimental)
https://github.com/edkolev/vim-amake - Favorite vim plugins
http://sherifsoliman.com/2016/05/30/favorite-vim-plugins/ - Makejob
http://www.vim.org/scripts/script.php?script_id=5479 - Vim sedm – první část
http://www.root.cz/clanky/vim-sedm-prvni-cast/ - vim (man page)
http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=vim - History of the Text Editor
http://vanstee.me/history-of-the-text-editor.html - Interview with Bill Joy
http://web.cecs.pdx.edu/~kirkenda/joy84.html - 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 - PyRoom
http://pyroom.org/ - PyRoom
https://en.wikipedia.org/wiki/PyRoom - CodeRoom
https://code.google.com/archive/p/coderoom/ - Full-screen writing program
https://en.wikipedia.org/wiki/Full-screen_writing_program - Ghostwriter
https://wereturtle.github.io/ghostwriter/ - JOE – Joe's Own Editor
https://joe-editor.sourceforge.io/4.6/man.html - Distraction Free Editing
https://zim-wiki.org/manual/Plugins/Distraction_Free_Editing.html - Rozsáhlý svět značkovacích jazyků
https://www.root.cz/clanky/rozsahly-svet-znackovacich-jazyku/ - Game of Thrones author George R.R. Martin explains why he writes on a DOS machine
https://www.theverge.com/2014/5/14/5716232/george-r-r-martin-uses-dos-wordstar-to-write - The Social Media (G.R.R. Martin)
https://grrm.livejournal.com/197075.html - WordStar pro DOS
https://en.wikipedia.org/wiki/WordStar#MS-DOS - Emacs, naked
https://bzg.fr/en/emacs-strip-tease.html/ - Capek
http://texteditors.org/cgi-bin/wiki.pl?Capek - Cizek
http://texteditors.org/cgi-bin/wiki.pl?Cizek - Stur
http://texteditors.org/cgi-bin/wiki.pl?Stur