Spacemacs: to nejlepší z editorů Emacs a Vim

11. 2. 2021
Doba čtení: 25 minut

Sdílet

Dnes se zaměříme na popis frameworku Spacemacs, což je – poněkud zjednodušeně řečeno – sada konfiguračních skriptů a balíčků, které jsou určeny pro uživatelsky příjemné ovládání slavného textového editoru Emacs.

Obsah

1. Spacemacs: to nejlepší z Emacsu a Vimu

2. Instalace Emacsu

3. Instalace Spacemacsu

4. První spuštění Spacemacsu s volbou způsobu ovládání

5. Instalace dalších podpůrných balíčků

6. Konfigurační soubory Spacemacsu

7. Základní editační příkazy v režimu Vimu

8. Práce s registry (registers)

9. Použití značek (marks)

10. Uživatelská makra

11. Proč se vlastně Spacemacs jmenuje Spacemacs?

12. Základní operace se soubory

13. Práce s okny, přechody mezi okny

14. Spacemacs a slavný Org-mode

15. Instalace Org-mode

16. Nové menu dostupné v režimu Org-mode

17. Obsah pokračování tohoto článku

18. Předchozí články o Emacsu

19. Odkazy na Internetu

1. Spacemacs: synergie mezi Emacsem a Vimem

„The best editor is neither Emacs nor Vim, it's Emacs *and Vim!*.“

I přesto, že v současnosti existuje poměrně velké množství programátorských textových editorů postavených na moderních technologiích (jmenujme například Atom, Sublime Text 2, Light Table či projekt Kakoune), stále mnoho uživatelů – ať již se jedná o programátory, administrátory, testery atd. – používá dnes již klasické editory Vim a Emacs. Ostatně není se čemu divit, protože jak ve Vimu, tak i v Emacsu lze s texty pracovat velmi efektivně a navíc je možné si mnohé úlohy plně zautomatizovat, například prostým opakováním příkazu, použitím uživatelských maker, mapováním kláves či dokonce vytvořením složitějších skriptů/pluginů.

Navíc Emacs nabízí i takové pokročilé technologie, jakou je slavný režim Org. Mezi uživateli Vimu a Emacsu se vedly mnohdy epické bitvy, ovšem v posledním desetiletí naopak můžeme vidět snahu o integraci možností obou editorů; typicky se jedná o kombinaci modálního Vimu s rozšiřitelností Emacsu. Pravděpodobně nejpokročilejší (a současně i nejsnáze použitelnou) kombinací možností Vimu a Emacsu je projekt nazvaný Spacemacs, který navíc umožňuje použití menu (vyvolávaného implicitně mezerníkem) s mnemotechnickými zkratkami, tj. bez nutnosti používat mnohdy poměrně těžkopádné kombinace Ctrl+Alt+… Cílem tohoto článku je seznámit čtenáře se samotnou existencí Spacemacsu a se základy jeho ovládání. Podrobnějším popisem tohoto velmi užitečného nástroje se budeme zabývat až v navazujícím článku.

Obrázek 1: Spuštění textového editoru Emacs se zobrazením hypertextového souboru s nápovědou s plnohodnotným grafickým uživatelským rozhraním.

Důležité upozornění: v současnosti se používá několik typů textových editorů, v jejichž názvu objevíme slovo Emacs. Jedná se například o MicroEMACS a jeho varianty, z nichž jedna je používána a udržována Linusem Torvaldsem. Dnes se ovšem zaměříme na popis možností GNU Emacsu, i když popisovaný režim by měl být funkční i v XEmacsu (pokud ho ještě někdo používá namísto GNU Emacsu). Všechny popisované funkce je samozřejmě možné použít jak tehdy, když je GNU Emacs spuštěn s plnohodnotným grafickým uživatelským rozhraním, tak i v případě, že používáte GNU Emacs spuštěný v terminálu, například s využitím balíčku emacs-nox (nox = no X).

2. Instalace Emacsu

Spacemacs není – i když by se to mohlo podle některých komentářů zdát – forkem Emacsu, jedná se skutečně „pouze“ o sadu konfiguračních skriptů a režimů určených pro klasický Emacs. To mj. znamená, že ještě před instalací Spacemacsu je nutné nainstalovat samotný Emacs (nikoli však XEmacs, i když teoreticky i taková kombinace by byla možná). Samotný Emacs se nainstaluje s využitím balíčkovacího nástroje příslušné distribuce Linuxu.

To konkrétně znamená, že u distribucí založených na RPM/DNF se použije příkaz:

# dnf install emacs
 
Last metadata expiration check: 0:07:07 ago on Tue 09 Feb 2021 07:47:43 AM EST.
Package emacs-1:27.1-2.fc32.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
Poznámka: předchozí příkaz byl spuštěn na Fedoře 32 Server, kde je Emacs evidentně součástí základní instalace systému (ovšem Vim taktéž).

U systémů založených na .deb balíčcích se pro instalaci Emacsu použije příkaz:

$ sudo apt-get install emacs
 
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  emacs-bin-common emacs-common emacs-el emacs-gtk imagemagick-6-common
  liblqr-1-0 libm17n-0 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libotf0
  m17n-db
Suggested packages:
  mailutils emacs-common-non-dfsg ncurses-term m17n-docs
  libmagickcore-6.q16-6-extra
The following NEW packages will be installed:
  emacs emacs-bin-common emacs-common emacs-el emacs-gtk imagemagick-6-common
  liblqr-1-0 libm17n-0 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libotf0
  m17n-db
0 upgraded, 12 newly installed, 0 to remove and 401 not upgraded.
Need to get 36,5 MB of archives.
After this operation, 146 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
 
...
...
...
Install dictionaries-common for emacs
install/dictionaries-common: Byte-compiling for emacsen flavour emacs
Setting up emacs (1:26.3+1-1ubuntu2) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for libc-bin (2.31-0ubuntu9) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for install-info (6.7.0.dfsg.2-5) ...
Processing triggers for desktop-file-utils (0.24+linuxmint1) ...

Obrázek 2: Pokud vám grafické uživatelské rozhraní u textových editorů z nějakého důvodu nevyhovuje a dáváte přednost použití terminálu, je možné Emacs startovat s volbou -nw nebo –no-window-system. Pokud se Emacs spouští například vzdáleně z textové konzole, samozřejmě se přepne do čistě textového rozhraní.

3. Instalace Spacemacsu

Po instalaci samotného Emacsu a jeho základním otestování (pro naše potřeby pouze postačuje editor spustit a následně ukončit klávesovou zkratkou Ctrl+X Ctrl+C, která se v dokumentaci označuje C-x C-c) přikročíme k instalaci Spacemacsu. V případě, že byl Emacs právě čistě nainstalován, je instalace Spacemacsu snadná. Můžeme k ní použít archiv se všemi potřebnými soubory, jenž je dostupný na adrese https://github.com/syl20bnr/spa­cemacs/archive/master.zip:

$ wget https://github.com/syl20bnr/spacemacs/archive/master.zip
 
--2021-02-06 09:35:45--  https://github.com/syl20bnr/spacemacs/archive/master.zip
Resolving github.com (github.com)... 140.82.113.3
Connecting to github.com (github.com)|140.82.113.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/syl20bnr/spacemacs/zip/master [following]
--2021-02-06 09:35:46--  https://codeload.github.com/syl20bnr/spacemacs/zip/master
Resolving codeload.github.com (codeload.github.com)... 140.82.113.10
Connecting to codeload.github.com (codeload.github.com)|140.82.113.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘master.zip’
 
master.zip              [  <=>               ]   6.85M  18.8MB/s    in 0.4s
 
2021-02-06 09:35:47 (18.8 MB/s) - ‘master.zip’ saved [7188146]

Tento archiv následně rozbalíme a jeho obsah přesuneme do adresáře ~/.emacs.d/.

Alternativně lze instalaci provést naklonováním Git repositáře se Spacemacsem, opět s tím, že se získané soubory (resp. celá adresářová struktura) mají uložit do adresáře ~/.emacs.d:

$ git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
Poznámka: pokud máte svůj Emacs již nakonfigurovaný, je vhodné si původní obsah adresáře ~/.emacs.d před provedením předchozích kroků zazálohovat.

4. První spuštění Spacemacsu s volbou způsobu ovládání

Při prvním spuštění Spacemacsu se (kromě loga resp. alternativně jeho ASCII podoby) nejprve zobrazí otázka, jaký režim ovládání textového editoru má být nastaven jako výchozí. K dispozici je ovládání odvozené od Evil mode, tedy ovládání do značné míry připomínající textový editor Vim, ovšem s mnoha dalšími úpravami a vylepšeními. Alternativně je možné použít ovládání, které vychází ze samotného Emacsu. Třetím (konfigurovatelným) režimem je takzvaný hybridní režim, který primárně vychází z Vimu, ovšem ve vkládacím režimu (insert mode) se používají některé zkratky Emacsu.

Dotaz na výchozí způsob ovládání editoru se zobrazí jak v grafickém uživatelském prostředí, tak i při spuštění Emacsu v terminálu:

Obrázek 3: Nastavení výchozího způsobu ovládání v grafickém uživatelském rozhraní.

Obrázek 4: Nastavení výchozího způsobu ovládání v textovém terminálu. Všechny důležité informace jsou zobrazeny, i když možná ne v tak přehledné podobě, jako v případě použití GUI.

5. Instalace dalších podpůrných balíčků

V dalším kroku se instalační skript Spacemacsu zeptá, jaká distribuce s balíčky má být použita. Opět viz přiložené screenshoty:

Obrázek 5: Výběr distribuce s podpůrnými balíčky.

Ihned poté se zahájí instalace podpůrných balíčků, která může nějakou dobu trvat (přibližně desítky sekund). Vše je pochopitelně plně funkční jak při použití grafického uživatelského rozhraní, tak i „obyčejného“ terminálu:

Obrázek 6: Průběh instalace balíčků v GUI.

Obrázek 7: Dokončení instalace balíčků v GUI.

Obrázek 8: Průběh instalace balíčků v textovém terminálu.

Obrázek 9: Dokončení instalace balíčků v textovém terminálu.

Po dokončení instalace podpůrných balíčků je již Spacemacs připraven k použití.

6. Konfigurační soubory Spacemacsu

Poznámka: Spacemacs lze ihned začít používat bez nutnosti dalších úprav. K této kapitole je možné se v případě potřeby vrátit později.

V průběhu instalace se v domácím adresáři vytvoří dvojice souborů nazvaná .spacemacs a .spacemacs.env. První z těchto souborů slouží pro nastavení vlastností textového editoru i celého prostředí Spacemacsu, druhý soubor obsahuje jména i hodnoty proměnných prostředí (environment variables). Pro nastavení resp. přesněji řečeno pro úpravu konfigurace je důležitější první ze zmíněných souborů, tedy soubor nazvaný .spacemacs, jehož editací lze kdykoli změnit chování Spacemacsu. Pro otevření tohoto souboru můžeme použít příkaz vyvolaný klávesami SPC f e d, tedy mezerník následovaný stiskem klávesy „f“, poté „e“ a nakonec „d“ (více informací bude uvedeno později; možná to není na první pohled patrné, ale „f“ a „e“ jsou snadno zapamatovatelnými mnemotechnickými zkratkami).

Pravděpodobně nejdůležitější volba souvisí se samotným ovládáním textového editoru. Tato volba se mění nastavením proměnné dotspacemacs-editing-style. Lze nastavit ovládání do značné míry kompatibilní s Vimem ('vim), se samotným Emacsem ('emacs) nebo již výše zmíněné hybridní ovládání ('hybrid):

;; One of `vim', `emacs' or `hybrid'.
;; `hybrid' is like `vim' except that `insert state' is replaced by the
;; `hybrid state' with `emacs' key bindings. The value can also be a list
;; with `:variables' keyword (similar to layers). Check the editing styles
;; section of the documentation for details on available variables.
;; (default 'vim)
dotspacemacs-editing-style 'hybrid
Poznámka: apostrofy jsou v tomto případě nutné, neboť zabraňují Emacs LISPu ve vyhodnocení daného symbolu.

Poměrně důležitá je i volba nazvaná dotspacemacs-scratch-buffer-persistent, která určuje, zda bude obsah scratch bufferu zachován i při opuštění editoru (to je potenciálně velmi užitečné, protože mnohdy právě tento buffer obsahuje „stav práce“ vývojáře):

;; If non-nil, *scratch* buffer will be persistent. Things you write down in
;; *scratch* buffer will be saved and restored automatically.
dotspacemacs-scratch-buffer-persistent nil

V dalším textu se navíc budeme zabývat funkcí mezerníku, tedy klávesy Space, která se v Emacsu označuje symbolem SPC. Tato klávesa slouží jako prefix u mnoha příkazů, ovšem v případě potřeby je možné ji změnit na jinou klávesu:

;; The leader key (default "SPC")
dotspacemacs-leader-key "SPC"

Další nastavení se týká takzvaných vrstev (layers), kterým se budeme věnovat později. Jednotlivé vrstvy je možné jednoduše odkomentovat nebo zakomentovat:

;; List of configuration layers to load.
dotspacemacs-configuration-layers
'(clojure
  python
  ;; ----------------------------------------------------------------
  ;; Example of useful layers you may want to use right away.
  ;; Uncomment some layer names and press `SPC f e R' (Vim style) or
  ;; `M-m f e R' (Emacs style) to install them.
  ;; ----------------------------------------------------------------
  ;; auto-completion
  ;; better-defaults
  emacs-lisp
  ;; git
  helm
  ;; lsp
  ;; markdown
  multiple-cursors
  ;; org
  ;; (shell :variables
  ;;        shell-default-height 30
  ;;        shell-default-position 'bottom)
  ;; spell-checking
  ;; syntax-checking
  ;; version-control
  treemacs)
Poznámka: výše zobrazený stav vrstev byl získán z nově nainstalovaného Smacemacsu, ve kterém byl otevřen zdrojový soubor v Pythonu. Při prvním otevření tohoto souboru se zobrazil dotaz, jestli se má příslušná vrstva s konfigurací pro Python povolit či nikoli:

Obrázek 10: Povolení vrstvy s vylepšením editace souborů v Pythonu.

7. Základní editační příkazy v režimu Vimu

Poznámka: v této kapitole i v několika navazujících kapitolách se setkáme s jedním problémem – různou terminologií používanou ve Vimu a v Emacsu. Týká se to převážně termínů režim (mode) a stav (status). Ve Vimu se totiž používá termín režim (mode) pro rozlišení mezi zadáváním základních editačních příkazů (normal mode), vkládáním příkazů na příkazovou řádku (command mode), vkládáním nového textu (insert mode) atd. – viz následující obrázek se zobrazením základních režimů Vimu. V Emacsu je však slovo režim/mode použito pro jiné účely (například samotný plugin Evil, na kterém je Spacemacs částečně postaven, přináší nový evil-mode, blíže viz například Major-Modes), takže se namísto toho pro označení režimu Vi/Vimu používá slovo stav/state (normal state, insert state, …).

Obrázek 11: Režimy Vimu a způsob přechodu mezi nimi s využitím různých klávesových zkratek.

V případě, že bylo po instalaci Spacemacsu povoleno ovládání ve stylu editoru Vim, se po otevření bufferu (souboru) textový editor Emacs přepne do výchozího – normálního – stavu (normal state), tj. je možné zadávat prakticky všechny editační příkazy, které znáte z Vimu (emulace je v tomto případě provedena na skutečně velmi dobré úrovni). Podporovány jsou samozřejmě i všechny operátory Vimu, dokonce včetně ROT13:

Operátor Význam Stručný popis
c change změna textu (delete a následný přechod do vkládacího režimu)
d delete vymazání textu
y yank kopie textu do registru
! filter filtrace přes externí příkaz
> shift right posun textu doprava o shiftwidth
< shift left posun textu doleva o shiftwidth
g~ swap case změna malých písmen na velké a naopak
gu lowercase změna na malá písmena (mínusky)
gU Uppercase změna na velká písmena (verzálky)
gq format zformátování textu
g? ROT13 rotace ASCII znaků o 13 pozic dopředu (režim modulo)
= indent změna zarovnání textu

Pro přepnutí do stavu vkládání se používají běžné příkazy a, A, i, I, o, O, c, R (stav přepisu) atd. Aktuálně nastavený stav je zobrazen na stavovém řádku každého bufferu (navíc je barevně zvýrazněn). Jedná se o zápis [N], [V], [I], [R] atd. Při zapnutí stavu psaní nového textu se navíc (v závislosti na konfigurace) objeví zpráva „– INSERT –“, podobně jako v samotném Vimu. Totéž platí pro režim vizuálního výběru bloků: „– VISUAL –“.

Klávesová zkratka C-SPC (neboli Ctrl+Space), která v Emacsu slouží pro nastavení značky, dostala poněkud odlišný význam – zapíná režim vizuálního výběru bloku (i když se stále vypisuje hlášení „Mark activated“). Je to vlastně logické, protože typické editační operace v Emacsu probíhají mezi pozicí kurzoru a nastavenou značkou (tzv. region) a ve Vimu pro vizuálně vybraný blok (tj. mezi začátkem bloku a pozicí kurzoru).

8. Práce s registry (registers)

Užitečným a často používaným nástrojem nabízeným textovým editorem Vim i režimem Evil (= Spacemacs při nastavení ovládání podobné Vimu) jsou takzvané registry. Jedná se o proměnné pojmenované jedním znakem, které v první řadě slouží pro kopii či přenos editovaných textů pomocí příkazů c (change), s (substitute), d (delete), y (yank) a p (paste), což vlastně znamená, že registry lze využít ve funkci pojmenovaných schránek (clipboard). Podobně jako v případě dále zmíněných značek, existují registry naplňované uživatelem a registry, jejichž obsah je měněn textovým editorem automaticky při provádění různých operací. Jména a význam některých důležitých registrů můžete najít v následující tabulce:

Registr Význam
a-z registry, které je možné přímo měnit uživatelem
0 použitý při příkazu yank (kopie textu)
1–9 registry naplňované automaticky příkazy d a c (delete, change)
% není ve výchozím nastavení přímo použit
: registr obsahující poslední příkaz, vhodné při vyvolání tohoto příkazu jako makra
= není ve výchozím nastavení přímo použit
/ registr obsahující posledně vyhledávaný řetězec (resp. text odpovídající regulárnímu výrazu)
" implicitní registr pro operace c, d, s nebo y
implicitní registr pro operace, které mění menší část textu, než je jeden textový řádek

Obrázek 12: Zobrazení registrů (registers, resp. přesněji řečeno evil-registers).

9. Použití značek (marks)

Další užitečnou věcí, kterou ve Vimu a samozřejmě i ve Spacemacsu najdeme, jsou takzvané značky (marks). Nejedná se však o značky vytvářené externími nástroji a ukládané většinou do souboru pojmenovaného tags, ale o interní seznam pozic kurzoru (jakési „špendlíky“ zapíchnuté do důležitých míst) v souboru, na které se lze během editace vrátit, nebo na něž se lze odkazovat. Podobnou funkcionalitu nabízí i mnohé další programátorské textové editory, ovšem u nich se většinou jedná o maximálně deset značek, zatímco ve Vimu může být značek mnohem více, protože každé značce je přiřazeno jednopísmenné označení.

Obrázek 13: Zobrazení značek (marks, resp. přesněji řečeno evil-marks).

V rámci jednoho souboru lze lokálně používat značky pojmenované malými písmeny az, zatímco značky pojmenované velkými písmeny A až Z si „pamatují“ i jméno souboru, v němž jsou definovány, tudíž se jedná o značky globální. Speciální význam mají značky se jmény 0 až 9 (naplňované většinou při ukončování Vimu či Emacsu) a taktéž v některých případech velmi užitečná značka ". Významy některých jmen značek (ve skutečnosti jich je ještě mnohem více) jsou vypsány v následující tabulce:

Jméno značky Definice značky Význam
a-z manuálně značky lokální v rámci souboru
A-Z manuálně značky globální, ke značce je připojeno i jméno souboru
" automaticky pozice kurzoru při zavření bloku
^ automaticky pozice kurzoru, na níž se kurzor naposledy nacházel ve vkládacím režimu

Práce se značkami je v mnoha ohledech velmi jednoduchá, ostatně všechny důležité příkazy najdete v následující tabulce:

Příkaz Význam
:marks výpis všech právě aktivních značek
:marks značka výpis vybrané značky
ma – mz definice lokální značky a-z
mA – mZ definice globální značky A-Z
'a – 'z skok na řádek, kde je značka definovaná (jedná se o příkaz pohybu kurzoru!)
'A – 'Z skok na soubor a řádek, kde je značka definovaná
`a – `z skok na přesné místo, kde je značka definovaná (jedná se o příkaz pohybu kurzoru!)
'A – 'Z skok na přesné místo (řádek i sloupec), kde je značka definovaná

10. Uživatelská makra

Ve Vimu je možné definovat uživatelská makra, jejichž definice se uloží do zvoleného pracovního registru (definice makra obsahuje sekvenci stisknutých kláves, takže zde s výhodou využijeme především operátory zkombinované s příkazy pro pohyb v textu). Pro záznam makra se používá klávesová zkratka q[registr], například qa. Vim v tomto případě na stavový řádek vypíše slovo recording. V Emacsu je tomu nepatrně jinak, protože se namísto toho napíše zpráva:

Defining kbd macro...

Ukončení záznamu makra je provedeno pouze klávesou q. Ve Vimu se po zadání tohoto příkazu makro uloží do pracovního registru a slovo recording ze stavového řádku zmizí. Emacs (samozřejmě přepnutý do režimu evil) pracuje podobně, pouze navíc na stavový řádek vypíše zprávu:

Keyboard macro defined

Uživatelská makra lze přeložit do maker běžných v Emacsu. Postup je následující:

Makro vytvoříme běžným způsobem, tj. například qagU3wq pro převod tří slov na velká písmena. Následně zadáme příkaz:

:name-last-kbd-macro

a doplníme vhodné jméno makra, například „upcase3words“.

V posledním kroku si můžeme makro vypsat popř. vložit do souborů init.el či .emacs:

:insert-kbd-macro

Měl by se vypsat tento text:

(fset 'upcase3words
   "gU3w")
Poznámka: při zadávání příkazů :name-last-kbd-macro a :insert-kbd-macro je možné použít automatické doplnění zbytku názvu s využitím klávesy Tab.

11. Proč se vlastně Spacemacs jmenuje Spacemacs?

Dostáváme se ke druhé polovině dnešního článku, takže je dobré si konečně položit otázku, která se vlastně sama nabízí: proč se vlastně Spacemacs jmenuje Spacemacs? Druhá část názvu je zřejmá – odkazuje se na Emacs, ale proč se na začátku vyskytuje slovo „space“? Spacemacs sice uživatelům nabízí ovládání podobné Vimu, ovšem přidává k němu ještě další klávesu – mezerník neboli space. Ten je ve Vimu ve výchozím nastavení použit pro posun kurzoru doprava, tedy pro stejnou operaci, jakou poskytuje klávesa l nebo kurzorová šipka.

Mezerníkem se zobrazí menu s (většinou) mnemotechnickými zkratkami, například w pro operace s okny, f pro operace se soubory atd. Některé z těchto zkratek si popíšeme v navazujících kapitolách. Mnohé zkratky vedou k zobrazení dalšího pod-menu.

Poznámka: ve skutečnosti je přidání tohoto menu velmi dobrým krokem, které může Emacs (a Vim) přiblížit i novým uživatelům, a to právě díky použití mnemotechnických zkratek, které obchází původní mnohdy ad-hoc zkratky používané oběma zmíněnými textovými editory.

Obrázek 14: Menu zobrazené po stisku mezerníku.

Obrázek 15: Ve skutečnosti je toto menu mnohem rozsáhlejší, což nebylo na malé ploše předchozího okna patrné.

12. Základní operace se soubory

Menu s nabídkou příkazů pro operaci se soubory se zobrazí po SPC f, tedy po stisku klávesy Space následované klávesou f (pochopitelně od slova file):

Klávesa Příkaz
b helm-filtered-bookmarks
c Copy file to new file…
f helm-find-files
h hexl-find-file
i Insert file content…
j dired-jump
l Open file literally…
o Open with external app
r helm-recentf
s Save
t File tree
A Set another file for buffer…
B Find bookmark in file tree
D Delete…
E Open using sudo…
F helm-find-files
J open-junk-file
L helm-locate
R Rename…
S Save all
T Focus current file in file tree
M-t Focus tag in file tree
ESC +prefix
e Emacs/Spacemacs
v Variables
y Yank/Copy
C Convert

Obrázek 16: Menu s nabídkou příkazů pro práci se soubory.

Z těchto příkazů (z nichž většina má asi zřejmý význam) se explicitně musíme zmínit o příkazu File tree, který zobrazí následující speciální buffer s výběrem souborů:

Obrázek 17: Stromová struktura adresáře.

Užitečný je u příkaz dired-jump, který zobrazí seznam souborů s možností jejich přímého výběru:

Obrázek 18: Přímý vizuální výběr souboru ze zobrazeného seznamu.

13. Práce s okny, přechody mezi okny

Ve Vimu se pro práci s okny (tedy „pohledy“ na editované soubory) používají klávesové zkratky začínající na Ctrl+W. Tato možnost zůstala zachována, ovšem navíc je ve Spacemacsu dostupné i menu pro práci s okny, které se vyvolává mnemotechnickou zkratkou SPC w s následujícími příkazy:

Klávesa Příkaz
TAB alternate-window
+ window-layout-toggle
split-window-below
. window-transient-state
/ split-window-right
1 window-split-single-column
2 window-split-double-columns
3 window-split-triple-columns
4 window-split-grid
= balance-windows-area
[ shrink-window-horizontally
] enlarge-window-horizontally
_ maximize-horizontally
b switch-to-minibuffer-window
d delete-window
f follow-mode
h evil-window-left
j evil-window-down
k evil-window-up
l evil-window-right
m maximize-buffer
o other-frame
r rotate-windows-forward
s split-window-below
t current-window-dedication
u winner-undo
v split-window-right
w other-window
x kill-buffer-and-window
{ shrink-window
| maximize-vertically
} enlarge-window
D ace-delete-window
F make-frame
H evil-window-move-far-left
J evil-window-move-very-bottom
K evil-window-move-very-top
L evil-window-move-far-right
M ace-swap-window
R rotate-windows-backward

Obrázek 19: Menu pro práci s okny.

Užitečné jsou například příkazy pro velmi rychlé rozdělení plochy na dva či tři sloupce, popř. na mřížku 2×2 okna: SPC w číslo:

Obrázek 20: Rozdělení plochy editoru do několika oken s různými buffery.

Z Vimu byly částečně převzaty příkazy určené pro přechod kurzoru do jiného okna. Jedná se o zkratku SPC w následovanou klávesou h/j/k/l, tedy klasickými klávesami použitými ve Vi/Vimu pro přesuny kurzoru. Stále je taktéž možné využít původní zkratky Ctrl+W h/j/k/l.

Obrázek 21: Rozdělení plochy editoru na mřížku 2×2 okna klávesovou zkratkou SPC w 4.

Poznámka: mezi prvními devíti okny lze vybírat přímo klávesovou zkratkou SPC číslo.

14. Spacemacs a slavný Org-mode

V tomto článku se nemůžeme alespoň ve stručnosti nezmínit o slavném Org-mode, už jen z toho důvodu, že samotná existence org-mode je dokonce pro mnohé (autora tohoto článku nevyjímaje :-) tou hlavní motivací pro použití Emacsu (a zdaleka se nejedná pouze o programátory). S využitím org-mode je totiž možné pracovat se strukturovanými dokumenty obsahujícími osnovy, poznámky, tabulky, ale i další typy objektů, například i s grafy atd. – a to vše přímo z prostředí textového editoru a se zachováním významu všech editačních příkazů, možnosti ukládání do Gitu (historie, rozdíly) atd. Pro Vim sice existuje podobně koncipovaný projekt nazvaný vim-orgmode, ovšem ten prozatím kvality ani počtu funkcí původního org-mode nedosahuje.

Obrázek 22: Dokument s poznámkami vytvořenými v Org-mode. Povšimněte si použití různých úrovní nadpisů, použití číslovaných seznamů i seznamů s odrážkami a použití textových značek určených pro změnu stylu zobrazení písma.

Obrázek 23: Editace tabulek.

Obrázek 24: Zobrazení kalendáře ve chvíli, kdy je zapotřebí zadat datum, kdy má být úkol (teoreticky) dokončen.

15. Instalace Org-mode

Instalace Org-mode je v případě Spacemacsu až triviálně jednoduchá, protože postačuje upravit soubor .spacemacs, o kterém jsme se zmínili v šesté kapitole. Postačuje pouze odkomentovat jedinou položku org v sekci layers (vrstev), takže by tato položka mohla vypadat následovně:

;; List of configuration layers to load.
dotspacemacs-configuration-layers
'(clojure
  python
  ;; ----------------------------------------------------------------
  ;; Example of useful layers you may want to use right away.
  ;; Uncomment some layer names and press `SPC f e R' (Vim style) or
  ;; `M-m f e R' (Emacs style) to install them.
  ;; ----------------------------------------------------------------
  ;; auto-completion
  ;; better-defaults
  emacs-lisp
  ;; git
  helm
  ;; lsp
  ;; markdown
  multiple-cursors
  org
  ;; (shell :variables
  ;;        shell-default-height 30
  ;;        shell-default-position 'bottom)
  ;; spell-checking
  ;; syntax-checking
  ;; version-control
  treemacs)

Po novém spuštění Spacemacsu dojde k automatickému stažení všech potřebných balíčků – toť vše, žádná další instalace ani konfigurace většinou není zapotřebí.

Obrázek 25: Org-mode prakticky bez problémů zkombinovaný se Spacemacsem.

16. Nové menu dostupné v režimu Org-mode

Po otevření souboru, který má být zpracováván v režimu Org-mode je možné použít nové menu dostupné pod klávesovou zkratkou SPC m. Toto menu je kontextově závislé na hlavním režimu Emacsu a bude tedy odlišné, pokud se editují souboru v Pythonu atd. V režimu Org vypadá toto menu následovně:

Klávesa Příkaz
RET org-ctrl-c-ret
# org-update-statistics-cookies
' org-edit-special
* org-ctrl-c-star
, org-ctrl-c-ctrl-c
org-ctrl-c-minus
a org-agenda
c org-capture
p org-priority
A org-attach
H org-shiftleft
J org-shiftdown
K org-shiftup
L org-shiftright
C-S-h org-shiftcontrolleft
C-S-j org-shiftcontroldown
C-S-k org-shiftcontrolup
C-S-l org-shiftcontrolright
M-RET org-meta-return
b +babel
d +dates
e +export
f +feeds
i +insert
s +trees/subtrees
t +tables
x +text
B +org-brain
C +clocks
T +toggles

Obrázek 26: Menu pro režim Org.

17. Obsah pokračování tohoto článku

Ve druhém článku o Spacemacsu se zaměříme na tři oblasti, které jsou zaměřeny čistě prakticky. Podrobněji si popíšeme práci s projekty psanými v Pythonu, ukážeme si některé praktické způsoby využití Org mode a taktéž se zmíníme o integraci s Gitem.

bitcoin_skoleni

Obrázek 27: Kontextové menu pro Git.

18. Předchozí články o Emacsu

Textovým editorem Emacs jsme se již na stránkách Rootu několikrát zabývali, a to jak v samostatných článcích, tak i ve dvojici seriálů. Popsali jsme si zejména tři potenciálně zajímavé oblasti – režim Evil (jehož význam je patrný z výše uvedeného textu), slavný režim Org a taktéž jsme si popsali všechny důležité vlastnosti Emacs LISPu:

  1. Evil: kombinace editačních příkazů Vimu a síly Emacsu
    https://www.root.cz/clanky/evil-kombinace-editacnich-prikazu-vimu-a-sily-emacsu/
  2. Úpravy Emacsu a tvorba nových modulů s využitím Emacs Lispu
    https://www.root.cz/clanky/upravy-emacsu-a-tvorba-novych-modulu-s-vyuzitim-emacs-lispu/
  3. Úpravy Emacsu a tvorba nových modulů s využitím Emacs Lispu (2)
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-zakladni-konstrukce-jazyka/
  4. Úpravy Emacsu s Emacs Lisp: všemocné makro cl-loop a knihovna dash
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-vsemocne-makro-cl-loop-a-knihovna-dash/
  5. Úpravy Emacsu s Emacs Lisp: možnosti nabízené knihovnou Dash
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-moznosti-nabizene-knihovnou-dash/
  6. Úpravy Emacsu s Emacs Lisp: dokončení popisu Emacs Lispu
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-dokonceni-popisu-emacs-lispu/
  7. Úpravy Emacsu s Emacs Lisp: základní interní datové struktury Emacsu
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-manipulace-se-zakladnimi-datovymi-strukturami-emacsu/
  8. Základy použití režimu org-mode v Emacsu
    https://www.root.cz/clanky/zaklady-pouziti-rezimu-org-mode-v-emacsu/
  9. Pokročilejší možnosti nabízené režimem org-mode v Emacsu
    https://www.root.cz/clanky/po­krocilejsi-moznosti-nabizene-rezimem-org-mode-v-emacsu/

19. Odkazy na Internetu

  1. An Introduction to Spacemacs
    https://spin.atomicobject­.com/2016/08/30/introducti­on-to-spacemacs/
  2. Beginners tutorial (Spacemacs)
    https://github.com/syl20bnr/spa­cemacs/blob/master/doc/BE­GINNERS_TUTORIAL.org
  3. Spacemacs For Noobs (video)
    https://www.youtube.com/wat­ch?v=VBYsa3Kpkz8
  4. Org tutorial
    https://gist.github.com/sa­fijari/d9b1ed8a3f4cd10e632e0­4353c6abdfe
  5. Org layer
    https://www.spacemacs.org/la­yers/+emacs/org/README.html
  6. Spacemacs, Emacs, and Org-mode tips
    https://ontologicalblog.com/spacemacs-emacs-and-org-mode-tips/
  7. Python Development in Spacemacs (video)
    https://www.youtube.com/watch?v=r-BHx7VNX5s
  8. Evil (Emacs Wiki)
    https://www.emacswiki.org/emacs/Evil
  9. Evil (na GitHubu)
    https://github.com/emacs-evil/evil
  10. Evil (na stránkách repositáře MELPA)
    https://melpa.org/#/evil
  11. Evil Mode: How I Switched From VIM to Emacs
    https://blog.jakuba.net/2014/06/23/e­vil-mode-how-to-switch-from-vim-to-emacs.html
  12. GNU Emacs (home page)
    https://www.gnu.org/software/emacs/
  13. GNU Emacs (texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?GnuEmacs
  14. An Introduction To Using GDB Under Emacs
    http://tedlab.mit.edu/~dr/gdbin­tro.html
  15. An Introduction to Programming in Emacs Lisp
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­intr/index.html
  16. 27.6 Running Debuggers Under Emacs
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­macs/Debuggers.html
  17. GdbMode
    http://www.emacswiki.org/e­macs/GdbMode
  18. Emacs (Wikipedia)
    https://en.wikipedia.org/wiki/Emacs
  19. Emacs timeline
    http://www.jwz.org/doc/emacs-timeline.html
  20. Emacs Text Editors Family
    http://texteditors.org/cgi-bin/wiki.pl?EmacsFamily
  21. Vrapper aneb spojení možností Vimu a Eclipse
    https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse/
  22. Vrapper aneb spojení možností Vimu a Eclipse (část 2: vyhledávání a nahrazování textu)
    https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse-cast-2-vyhledavani-a-nahrazovani-textu/
  23. Emacs/Evil-mode – A basic reference to using evil mode in Emacs
    http://www.aakarshnair.com/posts/emacs-evil-mode-cheatsheet
  24. From Vim to Emacs+Evil chaotic migration guide
    https://juanjoalvarez.net/es/de­tail/2014/sep/19/vim-emacsevil-chaotic-migration-guide/
  25. Introduction to evil-mode {video)
    https://www.youtube.com/wat­ch?v=PeVQwYUxYEg
  26. EINE (Emacs Wiki)
    http://www.emacswiki.org/emacs/EINE
  27. EINE (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?EINE
  28. ZWEI (Emacs Wiki)
    http://www.emacswiki.org/emacs/ZWEI
  29. ZWEI (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?ZWEI
  30. Zmacs (Wikipedia)
    https://en.wikipedia.org/wiki/Zmacs
  31. Zmacs (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?Zmacs
  32. TecoEmacs (Emacs Wiki)
    http://www.emacswiki.org/e­macs/TecoEmacs
  33. Micro Emacs
    http://www.emacswiki.org/e­macs/MicroEmacs
  34. Micro Emacs (Wikipedia)
    https://en.wikipedia.org/wi­ki/MicroEMACS
  35. EmacsHistory
    http://www.emacswiki.org/e­macs/EmacsHistory
  36. Seznam editorů s ovládáním podobným Emacsu či kompatibilních s příkazy Emacsu
    http://www.finseth.com/emacs.html
  37. evil-numbers
    https://github.com/cofi/evil-numbers
  38. Debuggery a jejich nadstavby v Linuxu (1.část)
    http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu/
  39. Debuggery a jejich nadstavby v Linuxu (2.část)
    http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-2-cast/
  40. Debuggery a jejich nadstavby v Linuxu (3): Nemiver
    http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-3-nemiver/
  41. Debuggery a jejich nadstavby v Linuxu (4): KDbg
    http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-4-kdbg/
  42. Debuggery a jejich nadstavby v Linuxu (5): ladění aplikací v editorech Emacs a Vim
    https://mojefedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-5-ladeni-aplikaci-v-editorech-emacs-a-vim/
  43. How to configure org-mode in spacemacs
    https://stackoverflow.com/qu­estions/51125978/how-to-configure-org-mode-in-spacemacs
  44. Org mode
    https://orgmode.org/
  45. The Org Manual
    https://orgmode.org/manual/index.html
  46. Kakoune (modální textový editor)
    http://kakoune.org/
  47. Vim-style keybinding in Emacs/Evil-mode
    https://gist.github.com/tro­yp/6b4c9e1c8670200c04c16036805773d8
  48. Emacs – jak začít
    http://www.abclinuxu.cz/clan­ky/navody/emacs-jak-zacit
  49. Programovací jazyk LISP a LISP machines
    https://www.root.cz/clanky/pro­gramovaci-jazyk-lisp-a-lisp-machines/
  50. Evil-surround
    https://github.com/emacs-evil/evil-surround
  51. Spacemacs
    http://spacemacs.org/
  52. Lisp: Common Lisp, Racket, Clojure, Emacs Lisp
    http://hyperpolyglot.org/lisp
  53. Common Lisp, Scheme, Clojure, And Elisp Compared
    http://irreal.org/blog/?p=725
  54. Does Elisp Suck?
    http://irreal.org/blog/?p=675
  55. Emacs pro mírně pokročilé (9): Elisp
    https://www.root.cz/clanky/emacs-elisp/
  56. If I want to learn lisp, are emacs and elisp a good choice?
    https://www.reddit.com/r/e­macs/comments/2m141y/if_i_wan­t_to_learn_lisp_are_emacs_an­d_elisp_a/
  57. Clojure(Script) Interactive Development Environment that Rocks!
    https://github.com/clojure-emacs/cider
  58. An Introduction to Emacs Lisp
    https://harryrschwartz.com/2014/04/08/an-introduction-to-emacs-lisp.html
  59. Emergency Elisp
    http://steve-yegge.blogspot.com/2008/01/emergency-elisp.html
  60. Racket
    https://racket-lang.org/
  61. The Racket Manifesto
    http://felleisen.org/matthi­as/manifesto/
  62. MIT replaces Scheme with Python
    https://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/
  63. Adventures in Advanced Symbolic Programming
    http://groups.csail.mit.e­du/mac/users/gjs/6.945/
  64. Why MIT Switched from Scheme to Python (2009)
    https://news.ycombinator.com/i­tem?id=14167453
  65. Starodávná stránka XLispu
    http://www.xlisp.org/
  66. AutoLISP
    https://en.wikipedia.org/wi­ki/AutoLISP
  67. Seriál PicoLisp: minimalistický a výkonný interpret Lispu
    https://www.root.cz/serialy/picolisp-minimalisticky-a-vykonny-interpret-lispu/
  68. Common Lisp
    https://common-lisp.net/
  69. Getting Going with Common Lisp
    https://cliki.net/Getting%20Started
  70. Online Tutorial (Common Lisp)
    https://cliki.net/online%20tutorial
  71. Guile Emacs
    https://www.emacswiki.org/e­macs/GuileEmacs
  72. Guile Emacs History
    https://www.emacswiki.org/e­macs/GuileEmacsHistory
  73. Guile is a programming language
    https://www.gnu.org/software/guile/
  74. MIT Scheme
    http://groups.csail.mit.e­du/mac/projects/scheme/
  75. SIOD: Scheme in One Defun
    http://people.delphiforum­s.com/gjc//siod.html
  76. CommonLispForEmacs
    https://www.emacswiki.org/e­macs/CommonLispForEmacs
  77. Elisp: print, princ, prin1, format, message
    http://ergoemacs.org/emac­s/elisp_printing.html
  78. Special Forms in Lisp
    http://www.nhplace.com/ken­t/Papers/Special-Forms.html
  79. Basic Building Blocks in LISP
    https://www.tutorialspoin­t.com/lisp/lisp_basic_syn­tax.htm
  80. Introduction to LISP – University of Pittsburgh
    https://people.cs.pitt.edu/~mi­los/courses/cs2740/Lectures/Lis­pTutorial.pdf
  81. Why don't people use LISP
    https://forums.freebsd.org/threads/why-dont-people-use-lisp.24572/

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.