V dalším díle našeho seriálu o produktivitě se podíváme na efektivní práci s počítačem. A věřte, že ač název příspěvku vypadá jako z devadesátých let, tak bude aktuální :). Podíváme se v něm na různé aspekty práce s počítačem, jako je psaní na klávesnici, práce se správcem oken, shellem, editorem atd. Na konci příspěvku pak uvedu odkaz, odkud si můžete stáhnout mé nastavení prostředí a programů.
Ústřední principy
Než se začneme zabývat jednotlivými aspekty práce s počítačem, tak bych rád uvedl ústřední principy, které budou stát za zbytkem příspěvku. Progaming (neplést s programováním) mě naučil jednu důležitou věc: cesta k efektivitě na počítači vede přes následující body:
- Zvládnutí ovládání klávesnice. Zvládat klávesnici je naprosto esenciální. Pokud se při psaní musíte na klávesnici dívat, nemůžete dosáhnout opravdové efektivity. Taktéž neustálé přehazování ruky z klávesnice na myš velmi zdržuje.
- Nastavení prostředí a aplikací. Když jde o efektivitu, tak jdou efekty a grafika stranou. Vhodným nastavením prostředí a aplikací si urychlíte orientaci, protože budete mít před sebou jen to, co je opravdu důležité. Pěkně to ilustruje následující screenshot z Quake III - vypnutí zbytečných detailů (textur okolí) a zvýraznění toho podstatného (soupeře) vám umožní plné soustředění bez rozptylování.
- Používání zkratek. K často prováděným akcím je dobré si nastavit klávesové zkratky a aliasy, abyste urychlili jejich vykonávání. Používání klávesnice vás navíc urychlí - myš mnohdy zdržuje.
- Praxe. Nic nejde hned - je potřeba cvičit a zlepšovat se.
Pojďme se nyní podívat na jednotlivé aspekty práce s počítačem detailněji.
Zvládnutí ovládání klávesnice
Měli byste svou klávesnici velmi dobře ovládat. Základem je tzv. touch typing, kdy dokážete klávesnici ovládat, aniž byste se na ni dívali. To vám umožní plné soustředění na monitor, kdy nemusíte přehazovat zrak z jednoho místa na jiné. S tímto úzce souvisí i psaní všemi deseti, které vám umožní využít všechny vaše prsty :).
Další výhodou zvládnutí práce na klávesnici je, že nebudete muset tolik hýbat rukami (neustálé přehazování rukou z home row na pravou část klávesnice či myš). To jednak urychlí práci a jednak odlehčí vašim rukám, takže budete méně náchylní na RSI apod. Čím dále více si uvědomuji, že když přesunu své prsty z home row na šipky vpravo na klávesnici či myš, tak se tím zdržuji. Proto se snažím tyto pohyby omezit.
V neposlední řadě je dobré si ke všem počítačům, na kterých pracujete sehnat shodnou klávesnici. Nebudete si tak muset neustále zvykat na jinou klávesnici. Např. v práci používám tu stejnou klávesnici, co doma.
Správce oken
Je dobré používat takového správce oken, který vám umožní detailní nastavení prostředí a umožní rychlou práci s aplikacemi. Když jsem začínal s Linuxem, tak jsem dlouhou dobu používal KDE. Z tehdy dostupným správců oken se prostředí podobalo Windows a šlo v něm naklikat všechno možné. Později mi však na něm začalo vadit, že se prostředí neustále měnilo (po KDE 3 přišlo KDE 4, které všechno převrátilo naruby, a i během jednotlivých verzí KDE 4 docházelo ke změnám, které mě otravovaly). Když jsem na něco zvyklý, tak nemám rád násilné změny, protože mě zpomalují a iritují. Další věc, která mi na KDE nevyhovovala, byla zbytečná mohutnost. Díky přítelkyni jsem se však dostal k Fluxboxu, který splňoval všechny mé potřeby: velmi jednoduché prostředí bez zbytečných efektů, které se s postupem času nemění a které je plně konfigurovatelné pomocí textových konfiguračních souborů.
Správce oken by vám měl umožnit rychlé spouštění aplikací (klávesové zkratky), rychlé přepínání mezi okny, plochami a monitory (klávesové zkratky), úpravy oken pomocí klávesových zkratek (maximalizace, přesun na jinou plochu/monitor) a další běžně prováděné akce. Naprosto zásadní je dále podpora pro více ploch, kdy na každé ploše můžete mít rozdělanou práci na jednom projektu či části projektu. Např. v práci běžně používám až 12 ploch. Pokud bych to všechno měl mít na jedné ploše či musel neustále něco vypínat či přepínat, tak by mě to velmi zdržovalo.
Shell
Shell je (minimálně na Linuxu a jiných *nixech) velmi důležitý, protože pomocí něj můžete řídit celý systém a rychle provádět aktivity, které by vám v grafickém uživatelském rozhraní trvaly zbytečně dlouho. Je proto velmi důležité jej mít vhodně nastavený a efektivně jej ovládat. Osobně používám Bash, protože jsem na něj zvyklý a mám jej konfigurovaný. Jiné shelly, jako je např. Zsh, jsou ale určitě taktéž dobrá volba. Hlavní je najít si shell, který si budete moct nakonfigurovat podle svého a budete jej umět používat.
Nyní bych chtěl zmínit pár tipů, jak díky shellu zefektivnit svou práci. První je pohyb. Buď můžete použít defaultní Emacs mód, nebo si zapnout Vi mód (ten používám já). Umožní vám to pohyb v příkazové řádce pomocí stejných kombinací, na které jste zvyklí z editoru (samozřejmě za předpokladu, že používáte jeden z výše zmíněných). Můžete se tak velmi rychle přesouvat po parametrech od příkazů, měnit je, atd. Mnohem rychlejší, než používání šipek. Mrkněte např. na tento (Vi) nebo tento (Emacs) seznam zkratek.
Je dobré se naučit s shellem pracovat a využívat jeho možnosti. V *nixech je spoustu užitečných programů, jejichž používání vám usnadní práci (find
, grep
, sort
, wc
atd.). Dále můžete využívat roury (angl. pipe), cykly (provedení nějaké akce pro všechny zadané soubory) a různé druhy přesměrování. Např. následující příkaz v Bashi spustí dva programy a porovná jejich výstup ve Vimu: vimdiff <(prog1) <(prog2)
. Je proto dobré si možnosti vašeho shellu nastudovat a plně je využívat.
Dalším tipem je projít si možná nastavení vašeho shellu. Např. v Bashi je pomocí shopt
možno měnit jeho chování. Zmíním dvě užitečná nastavení:
autocd
- Umožní vám místocd DIR
psát pouzeDIR
. Tedy např. místocd /etc
stačí psát/etc
. To znamená, že u každé změny adresáře ušetříte tři znaky, což je skvělé.globstar
- Umožní vám používat rekurzivní matchování pomocí**
. Např.ls **/*.log
vám vypíše všechny.log
soubory z aktuálního adresáře a podadresářů. Je to rychlejší, než psátfind . -name '*.log'
.
Je dobré sledovat, které příkazy často používáte a dělat si na ně krátké aliasy či funkce, které zrychlí vaši práci. Čím častěji používaný příkaz, tím je lepší použít kratší alias. Níže uvádím pro představu některé z aliasů a funkcí, které používám:
# Asi nejčastěji používaný alias. Vypíše přehledně obsah aktuálního adresáře. # Doporučuji mít zapnutý barevný výstup, viz níže (např. adresáře budou mít jinou barvu, než soubory). alias l='ls -lA --group-directories-first' # Urychlení přesunu do nadřazených adresářů. alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' # Zkratky pro často spouštěné programy. alias v='vim' alias m='make' alias g='git' alias py='python' alias t='tmux' # Spustí make s danými parametry a následně `make install`. function M() { make "$@" && make install; } # Vytvoření adresáře a následný přesun do něj. function mdc() { mkdir -p "$@" && eval cd "\"\$$#\""; } # Vypíše a seřadí soubory z výstupu grepu. # Použití: vim `grep -r PATTERN | files` function files() { cut -d: -f1 | sort -u; } # Spuštění valgrindu pro detekci paměťových úniků (memory leaks). alias valgrind-leak='valgrind --leak-check=full --show-leak-kinds=all'
Možná se vám to nezdá, ale podobné aliasy představují obrovské urychlení, protože snižují množství znaků, které musíte psát. Další aliasy viz můj .bashrc.
Dále si můžete nastavovat aliasy pro jednotlivé programy. Např. aliasy pro Git jsem zde již popisoval. S jejich využitím můžete např. místo git commit --verbose
psát jen g c
. Můj config pro Git je k dispozici zde.
Mezi další možná nastavení shellu patří barvičky (např. pro ls
, grep
či gcc
). Ty vám umožní ve výstupu zvýraznit to, co je důležité. Mrkněte do sekce Colors
v mém .bashrc.
V závěru sekce o shellu bych chtěl zmínit používání terminálového emulátoru, který umí pracovat s taby (např. Konsole). Souvisejícím skvělým nástrojem je Tmux, který vám umožní si otevřít více oken v rámci jednoho shellu či rozdělit okno s shellem na více částí (viz tento screenshot). Další z mnoha výhod tohoto nástroje je, že po odhlášení z terminálu nepřijdete o spuštěné programy. Můžete si např. na vzdáleném serveru rozdělat práci, odejít domů, na server se připojit a pokračovat v práci, aniž byste přišli o otevřený editor, spuštěné programy atd. Nástroj Screen funguje podobně.
Editor
Pro programátora je výběr editoru stěžejní, protože v něm stráví většinu svého času. Osobně používám a doporučuji (G)Vim, a to z následujících důvodů:
- Rychlost. Pohyb, kopírování, rušení, změny, psaní atd. jsou v něm neuvěřitelně rychlé. Chcete změnit obsah závorek?
cib
(Change In Brackets) Chcete se přesunout na uzavírací závorku, která přísluší k otevírací závorce?%
. Chcete změnit celý obsah řádku?cc
- Rozšiřitelnost. Pro Vim existuje obrovské množství rozšíření (nová funkcionalita, zvýraznění syntaxe pro další programovací jazyky, integrace s jinými nástroji atd.).
- Konfigurovatelnost. Vim je značně nastavitelný, nejen po stránce vzhledu, ale i po stránce přidávání nových klávesových zkratek, maker atd. Další výhodou je, že konfigurační soubor je textový, takže jej můžete snadno přesouvat na jiné systémy.
- Není třeba používat myš. Vše lze udělat přes klávesnici, takže nemusíte pořád přesouvat ruku na myš (zdržuje to).
- hjkl místo šipek. Nemusíte tak měnit pozici rukou z home row, abyste dosáhli na šipky pro pohyb.
- Odolává náporu času. Vim existuje již přes 20 let a stále se vyvíjí. Nejlepší však je, že se nijak zásadně nemění ve smyslu toho, že to, co se naučíte dnes, využijete i za 10 let. Taktéž rozhraní je stabilní.
- Integrace s shellem a jinými nástroji. Vim nabízí přímou integraci s shellem a jinými nástroji. Např. není problém si ve Vimu spustit příkaz v shellu a výstup přímo vložit do editovaného souboru, seřadit si několik řádků pomocí
sort
atd. - Běh v terminálu. Ve Vimu můžete pracovat i na vzdáleném serveru přes SSH. Zkuste si něco podobného s GUI editorem...
- Možnost využití v jiných aplikacích. Spoustu aplikací umožňuje použít Vim (či jeho klávesové zkratky), takže nabyté znalosti můžete využít i u jiných aplikací. Zmíním se o tom později.
- Použití různých nastavení pro různé projekty. Pokud pracujete na více projektech, tak někde mohou používat k odsazení tabelátory, někde mezery atd. Ve Vimu si můžete nastavit, že když pracujete v projektu X, tak se má použít toto nastavení a v projektu Y zase jiné nastavení.
- Univerzálnost. Ve Vimu můžete editovat soubory napsané v libovolných programovacích jazycích. Dokonce v něm lze prohlížet i editovat binárky :).
- Otevření několika souborů na jedné obrazovce. Můžete si okno rozdělit na několik podoken, kdy v každém si otevřete jiný soubor. Nebo třeba stejný soubor na jiném místě. Taktéž si můžete otevřít soubory v tabech (záložkách).
- Nelineární undo. Zatímco ostatní editory mívají jen lineární undo, Vim si uchovává historii ve stromu. Není tak problém něco udělat, dát undo, něco napsat a stále mít možnost se vrátit k původní akci.
- Vizuální blok. Ve Vimu lze označovat text nejen po znacích a řádcích, ale i po blocích. To se při programování velmi hodí.
- Registry. Dají se představit jako několik schránek. Nejste tak omezeni jen jednou schránkou, kterou editory typicky mívají.
- Kontrola pravopisu. Při programování si můžete nechat kontrolovat gramatiku, překlepy apod. v komentářích a řetězcích.
- Skriptování. Vim si můžete rozšiřovat jak ve vestavěném jazyce Vimscript, tak i v dalších jazycích, jako je Python či Ruby.
- Dostupnost. Vim je dostupný na Linuxu, Windows, Mac OS a dalších systémech. Navíc je to editor s otevřeným zdrojovým kódem, takže nehrozí, že bankrot jedné firmy ukončí jeho vývoj.
Pokud chcete vidět Vim v akci, můžete mrknout na toto video :). Pokud by vás zajímalo, jak jsem se k Vimu dostal, mrkněte na tento příspěvek z roku 2009.
Další aplikace
Jak jsem již zmínil v předchozí sekci, Vim lze "integrovat" i do ostatních aplikací. Když pracujete v shellu, tak pro pohyb můžete použít zkratky z Vimu (vi-mode
v Bashi a Zsh). Když pracujete s Gitem, tak se vám pro napsání commit message či provedení interaktivního rebase zobrazí Vim. Do Firefoxu si můžete stáhnout rozšíření It's All Text, které vám umožní editovat textová pole ve Vimu (či jiném editoru). Můžete tak např. editovat wiki stránky ve Vimu, kde budete mít zvýraznění syntaxe, klávesové zkratky, snippety atd. Do Thunderbirdu existuje rozšíření External Editor, které vám umožní psát emaily ve Vimu (či jiném editoru). Pro Firefox můžete dále použít rozšíření Vimperator, které vám jej umožní ovládat jako Vim. Nemusíte tak ani pro prohlížení webu opustit klávesnici.
Konfigurační soubory
Ideální je, pokud vámi využívané aplikace používají textové konfigurační soubory. Jednak to usnadní úpravy nastavení takových aplikací a jednak si pomocí nich můžete jednoduše synchronizovat nastavení na všech počítačích a serverech, kde pracujete (stačí si je hodit někde na net či použít rsync
).
Moje konfigurační soubory jsou k dispozici na GitHubu. Průběžně je doplňuji a aktualizuji. Zkuste na ně mrknout, třeba se vám něco z toho bude hodit (aliasy, nastavení atd.).