Hlavní navigace

Programování s editorem Midnight Commanderu

Tomáš Matějíček 29. 3. 2016

Jako programátor oceníte zvýrazňování kódu a navigaci v projektu, tedy automatické skákání na deklarace funkcí či proměnných. Ukážeme si, jak na to v editoru Midnight Commanderu.

Nepatřím k zarytým propagátorům příkazové řádky, ale přesto používám raději konzolové (textové) aplikace místo grafických. Hlavní výhodou je fakt, že textový program snadno spustím i vzdáleně na serveru po SSH z jakéhokoli jiného (grafického i negrafického) systému. Pro správu filesystému i programování jsem si zvykl používat Midnight Commander, což je dle mého názoru nejlepší správce souborů v Linuxu, ne-li snad v celém známém vesmíru, a jeho vestavěný editor.

S navigací v kódu souvisí zobrazení různých souborových typů různými barvami. Ne vždy je praktické oddělovat soubory podle typu do podadresářů, mnohdy může mít větší smysl vše namíchat. Ve vší té změti různých přípon v projektu se člověk pak lépe zorientuje, když má každá přípona svoji barvu. Ve svém terminálu mám v Midnight Commanderu základní barvy pro soubory následující: dva odstíny pro bílou, dva pro zelenou, dva pro červenou, a pak po jednom odstínu pro černou a modrou. Celkem tedy devět barev. Z toho už se dá něco vybrat.

Přiřazení k barvě je nutné provést tak trochu experimentálně, protože barvy můžou být na různých terminálech různé. Vlastní nastavení se provádí v souboru~/.config/mc/filehighlight.ini  – pokud jej nemáte, zkuste zkopírovat vzor z/etc/mc/  nebo /usr/share/mc/ , případně hledejte na webu. Jde o běžný ini soubor, kde do patřičné sekce doplníte vámi žádané koncovky a tím nastavíte barvu. Kupříkladu, na mém terminálu jsou archivní soubory (jako tar) v mc červené, takže pokud chci třeba javascriptové soubory s koncovkou.js také červeně, přidám „js“ do parametru extensions v sekci archive, takto:

[archive]
    extensions=js;gz;bz2;tar;tgz;rpm;Z;rar;zip;arj;cab;lzh;lha;zoo;arc;ark;xz;tbz;tbz2;7z;ace

Kdo chce .html soubory vidět světle bílé, nastaví v sekci directory takto:

[directory]
    type=DIR
    extensions=phtml;html

A tak podobně. Pro své potřeby (PHP-HTML-JS programování) jsem pokryl barvy plně ke své spokojenosti takto:

  • html – světle bílá [directory]
  • php – tmavší zelená [media]
  • js – tmavší červená [archive]
  • css – světle modrá [graph]
  • ico – světle hnědá [doc]

Když už se nám soubory projektu jeví přehlednější, ponořme se do navigace v kódu samotném. Editor Midnight Commanderu podporuje dva druhy skoků. Jednak je to skok po bookmarcích (v rámci toho samého souboru), a pak skok na deklaraci funkce (v rámci více souborů).

Jako bookmark je možné označit libovolný řádek zkratkou Alt+k, a k navigaci pak slouží Alt+i a Alt+j. Toho se dá využít například v případě, že potřebuji v kódu téhož souboru něco vyřešit jinde a pak se vrátit – jednoduše před opuštěním aktuální pozice vložím Alt+k bookmark na aktuální pozici, a pak se můžu libovolně pohybovat po souboru nahoru a dolů. Ve chvíli kdy se chci vrátit stačí Alt+j nebo Alt+i, podle toho jestli jsem nad bookmarkem nebo pod, a Alt+k pro zrušení záložky. Praktické to moc není, ale mnohdy to postačí.

Skoky na deklarace funkcí jsou mnohem praktičtější, jen o trochu komplikovanější na nastavení. Obecně, když už je vše nastaveno jak má, provádí se skok z místa použití funkce na její deklaraci klávesovou zkratkou Alt+Enter, a zpátky se pak lze vrátit stisknutím Alt+Minus. Podle pozice kurzoru na názvu funkce (třeba uprostřed) umí editor nabídnout všechny možnosti (máte-li funkcí, které začínají znaky shodnými až na pozici kurzoru, víc), a uživatel pak může konkrétní funkci, na kterou chce skočit, vybrat z menu. Jakmile jednou do deklarace (a zpět) skočíte, můžete se pak pomocí Alt+Plus a Alt+Minus navigovat tam a zpátky, i když jste už s kurzorem někde úplně jinde.

Bohužel editor sám od sebe neví, ve kterých souborech jsou jaké funkce deklarované, ani jaký jazyk vlastně používáte. Z toho důvodu se vám bez přípravy po Alt+Enter nestane nic. Editor očekává, že mu navigační body připravíte do souboru TAGS, a to programem  ctags.

Program ctags podporuje nesčetnou řadu jazyků a syntaxí, a umožňuje vytvořit soubor TAGS s potřebnými informacemi pro skoky nejen na deklarace funkcí, ale i na deklarace proměnných (v jazycích kde to má smysl) atd. Ovšem příkaz pro vygenerování TAGS může být dost komplikovaný a dlouhý. Proto jsem si pro své potřeby (PHP-HTML-JS programování) připravil bash skript s názvem ccc, který vypadá takto:

#!/bin/bash
ctags \
-e \
--totals=yes \
--tag-relative=yes \
--PHP-kinds=+f-v \
--JavaScript-kinds=+f-v \
*

Pokaždé, když přidám novou funkci do kódu nebo výrazně změním počet řádků v programu, spustím na konzoli příkaz ccc, který v aktuálním adresáři vygeneruje soubor TAGS, s navigací pro kódy v PHP a javascriptu. Obvykle mě nezajímají deklarace proměnných (variables), jen definice funkcí, proto +f-v. A -e  je nutné, protože instruuje ctags, aby vyrobil TAGS soubor ve formátu pro Emacs, kterému Midnight rozumí nejlépe.

Po asi roce používání musím konstatovat, že už si programování bez navigace na deklarace funkcí nedokážu představit, protože extrémně usnadňuje práci, a tedy i život nebohých programátorů. Pokročilá grafická IDE jistě nabídnou mnohem komfortnější možnosti, ale co se textových aplikací týče, nemá u mně editor Midnight Commanderu konkurenci.

Našli jste v článku chybu?

31. 3. 2016 20:24

Teda Vás to nakrklo - myslím si, že autor psal jak používá mcedit on, jak se dá případně použít. Nic víc, nic míň - a Vy jste vystartoval jak čertík. Shodou okolností jsem člověk, kterému mc, a mcedit báječně vyhovuje - na hacking - a rád tu řeknu, že mcedit, a mc je super kombinace - rychlá, funkční a spolehlivá. Že neumí dalších 1000 fíčur emacsu nebo vimu - stejně tyto fíčury pro svou práci používám tak málo často, že je stihnu pokaždé zapomenout. mcedit se používá intuitivně, a pokud každý d…

29. 3. 2016 14:47

kutr (neregistrovaný)

Starověcí egypťané taky postavili pyramidy bez použití benzínových a elektrických strojů apod. To ale neznamená, že bychom to tak měli dělat i my. Přijde mi lepší zvyšovat produktivitu práce pomocí nástrojů a automatizace než pomocí zvýšeného úsilí lidí.

Podnikatel.cz: Přivýdělek u Airbnb nebo Uberu? Čekejte kontrolu

Přivýdělek u Airbnb nebo Uberu? Čekejte kontrolu

Vitalia.cz: Jak koupit Mikuláše a nenaletět

Jak koupit Mikuláše a nenaletět

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Dárky v podnikání. Jak je uplatnit v daních?

Dárky v podnikání. Jak je uplatnit v daních?

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka