Developer Tools: Terminál setup efektívneho programátora
Dúfam, že vám tento blog ušetrí čas a frustráciu na ceste k dokonalému terminálovému zážitku.
Život je krátky Uvedomím si to zakaždým, keď leziem na skalu, na ktorej centimetre a pevná stoická (priam ataraxická) myseľ rozhodujú o odpovedi na Shakespearovu otázku – byť či nebyť.
Vidím to aj pri pohľade na jej veľké múdre oči farby zelenohnedého lesa niekde na okraji Zázrivej, ktorých pohlaď pri každom stretnutí vyvoláva dojem, že ma vidí po prvý raz a zas na mne objavuje niečo nové. Chvíle, keď si uvedomím, že nechcem stráviť svoj život z veľkej časti prácou, teda programovaním.
Rozhodne však nechcem robiť svoju prácu inak ako na 100 %. Jedným z mojich riešení problému nedostatku času preto bolo zvýšiť svoju efektivitu, pracovať vďaka tomu menej, no zároveň rovnako kvalitne.
Okrem nutnosti stimulácie svojej mysle smerom k lepšej logike sa treba určite zamerať aj na svoj developer's toolkit. A práve o tom je táto séria blogov s prefixom Developer Tools. Konkrétne táto časť sa venuje terminálu a konfigurácii Zsh.
Zdroj: codemyui.com
CLI
S nástupom personálnych počítačov sa začalo bežné CLI nahrádzať grafickou verziou GUI (grafické používateľské rozhranie), ktorá poskytovala omnoho jednoduchšiu interakciu s počítačovým systémom.
V každom prípade stále existujú situácie, pri ktorých je lepšie využívať príkazový riadok alebo teda CLI. Práve preto moderné operačné systémy poskytujú rozhranie virtual terminal (terminal emulator program).
Dôvodom virtuálizácie je, že ide o terminál hosťujúci vo vnútri prostredia GUI. Úloha virtuálneho terminálu je rovnaká ako v skutočnom termináli, čiže zhromažďuje vstupy používateľov, odosiela ich do počítačového systému, prijíma odpovede späť a zobrazuje ich používateľovi.
Na rozdiel od grafického rozhrania, to textové je plne editovateľné a ponúka viacero možností personalizácie. Vzhľad terminálu vie čiastočne odrážať našu osobnosť a pre mňa je to akási vizitka programátora. Všetky dôležité nastavenia sa ukladajú do súboru, takže vieme používať rovnaké prostredie naprieč viacerými operačnými systémami.
Príkazový riadok sa stáva čoraz dôležitejšou súčasťou mojej práce. Používam ho na inštaláciu balíkov z Npm, na testovanie API, verzovanie v Gite, správu serverov, inštaláciu programov a podobne. Niektoré špecifické úlohy, ako sú systémové operácie alebo spúšťanie komplexných skriptov, trvajú vďaka príkazovému riadku kratšie a vedia byť aj jednoduchšie.
Dúfam, že vám tento blog ušetrí čas a frustráciu na ceste k dokonalému terminálovému zážitku.
Terminál emulátor
Okrem toho, ze pri práci používam viacero počítačov a notebookov, využívam aj viacero operačných systémov. Pre Windows 10 používam spolu s WSL Windows Terminál. Na svojich linuxových workstations používam Guake, čo je takzvaný top-down terminál, ktorý sa vysunie po zadaní klávesovej skratky.
Keďže ide o môj personalizovaný setup, pre všestrannosť uvediem aj ďalšie terminály, ktoré podľa mňa stoja za zmienku: Terminator, Hyper , iTerm2 (Mac only) či Tilix. Všetky majú mnoho skvelých funkcií, ako vyhľadávanie, autocomplete, rozdelenie okna na panely (split panels), históriu a mnoho iného.
Zdroj: guake-project.org
The Z Shell
Shell je programovací jazyk (alebo ak chcete – command interpretter), ktorý dané CLI používa. Ide o akúsi komunikačnú vrstvu medzi jadrom OS a používateľom. Ja používam ZSH namiesto štandardného Bash.
Zsh je teda jedným zo shellov pre Unix, ktorý posúva interaktivitu a prispôsobenie (customizáciu) terminálu na ďalšiu úroveň. Zároveň ide o mocný skriptovací jazyk. Z shell alebo Zsh existuje už od roku 1990 (ako ja), má veľkú komunitu, rozmanitú škálu doplnkov a prispievateľov. Funguje na systémoch Linux, Mac, WSL a BSD.
Existujú alternatívy ako Fish, ktoré tiež ponúkajú podobné funkcie, ale ja preferujem Zsh. Hlavne preto, že má v mnohom podobnú syntax ako Bash a zachováva pritom jeho skriptovaciu funkčnosť. Medzi hlavné výhody Zsh patria: vylepšené tab dokončenia, história príkazov, globbing (wild card characters), skratky, manipulácia s premennými a mnoho ďalších funkcií.
Lepšiu predstavu sily tohto shellu získate z videa a tohto listu:
- Netreba používať príkaz “cd" (change directory). Stačí zadať názov adresára, prípadne použiť príkazy - “..” pre zmenu aktuálneho adresára o jednu úroveň vyššie, “...” dve úrovne vyššie, “~” domovský adresár užívateľa, ”/” koreňový adresár.
- Tab dokončovanie pre Git.
- Príkazom “take” vieme súčasne vytvoriť priečinok a zároveň ho zvoliť ako aktuálny pracovný adresár.
- Vďaka príkazu “-” vieme prepínať medzi predošlou a aktuálnou cestou.
- Obsahuje množstvo preddefinovaných aliasov. “Alias” zobrazí všetky dostupné aliasy, v ktorých vieme filtrovať spojením príkazu “grep”. Napríklad “alias | grep git”.
- Vďaka Z pluginu viem zmeniť aktuálnu pracovnú adresu napísaním názvu priečinka bez toho, aby som musel zadať kompletnú adresu.
- Autokorekcia preklepov.
- Rekurzívne cesty. Príklad: /u/lo/b expanduje na /user/local/bin.
- Oprava preklepov a case insensitive.
- Pluginy a témy .
- Syntax highlighting.
- Integrácia s Git-om.
- “!!” vyvolá posledný príkaz. Čo je užitočné, napríklad ak príkaz zlyhá, pretože vyžaduje práva správcu. V takom prípade stačí napísať sudo !!.
- A mnoho iného.
Existujú teda určité výhody, ale aj nevýhody používania Zsh. Medzi najväčšie nevýhody, na ktoré som narazil, patria ťažkosti s inštaláciou pluginov a samotná konfigurácia. Presne kvôli tomu používam Oh My ZSH, ktorý oba problémy eliminuje.
V Opensuse nainštalujeme príkazom ( Installing-ZSH ):
zypper install zsh zsh-completions
Po inštalácii zvolíme Zsh ako default shell.
chsh -s $(which zsh)
Oh My ZSH
Oh My ZSH je framework pre ľahšiu správu Zsh konfigu, no naviac obsahuje množstvo doplnkov a vyše 80 tém. Jednoducho sa inštaluje, má robustnú sadu funkcií a všeobecne je používateľsky zhovievavý.
K podobným účelom je možné využiť aj framework Prezto. Prípadne, niekedy postačí len správca pluginov, ako sú Antigen (nemá nič s testovaním), Zgen alebo Antibody , ktoré vedia uľahčiť kopec roboty s inštaláciou doplnkov.
Samozrejme, keďže ide o framework, jeho prítomnosť nie je nutnosťou a skúsený používateľ s dostatočným časovým grantom si vystačí aj bez neho. Nainštalujeme ho príkazom:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
.zshrc config
V súbore .zshrc sa nachádza väčšina konfigurácie. Nájdeme ho medzi skrytými súbormi v domovskom adresári, čiže “~/.zshrc” (pri WSL je cesta z vonku podobná tejto: C:\Users{user}\AppData\Local\Packages\46932SUSE.openSUSE-Leap-15-1_022rs5jcyhyac\LocalState\rootfs\root/.zshrc).
Oh My ZSH za nás tento súbor vygeneruje spolu s predvolenou konfiguráciou s poliami pre voľbu tém, pluginov, aliasov a rôznych nastavení. Keďže niektoré pluginy vďaka oh-my-zsh netreba inštalovať, stačí ich aktivovať v konfigu.
Pluginy tretích strán zväčša stačí nakopírovať do “ˇ~/.oh-my-zsh/custom/plugins”, poprípade RTFM. Každá zmena vyžaduje reload, napríklad príkazom “source ~/.zshrc”. Dobrým zvykom je ukladať tieto konfiguračné súbory ( dotfiles ) na GIT. Ten môj ukladám na Gist , pričom ním stačí nahradiť svoj .zshrc konfig, nainštalovať (prípadne zakomentovať) potrebné programy a pluginy, a po následnom reloade budeme môcť využívať rovnaké nastavenia a aliasy.
Ako napríklad alias “please”, ktorý som ukradol programátorom z kráľovského dvora. :) Etika nie je moja silná stránka.
Font
Áno, na fonte skutočne zaleží . A to dokonca aj v príkazovom riadku. Tu to možno platí dvojnásobne, keďže budeme potrebovať špeciálny druh fontu.
Powerline fonts sú fonty pre programátorov, ktoré v sebe obsahujú aj glyphs ikony, niektoré špeciálne znaky a navyše podporujú ligatúry) . Príkazmi nižšie nainštalujeme viacero fontov tohto typu, no osobne preferujem FiraCode, poprípade Meslo.
git clone https://github.com/powerline/fonts.git
cd fonts
./install.sh
Zdroj: github.com
Po tejto inštalácii (ktorá nebude fungovať pri WSL ), treba font aktivovať v nastaveniach terminálu, v ktorom chceme font používať.
Windows terminal
Powerlevel10k téma
Nie som odolný voči kráse. Všetky krásne veci si pustím k srdcu, kým mi ho úplne nezničia. Našťastie však existuje téma, ktorá vás zaručene nezradí.
Powerline je statusline (stavový riadok) plugin pre editor Vim, napísaný v jazyku Python. Slúži pre zobrazovanie rôznych užitočných informácií, ako napríklad cesta editovaného súboru, oprávnení či percentuálnu hodnotu aktuálnej pozície v súbore. Vie zobrazovať rôzne farby, symboly a celkovo kontrolovať výstup obsahu, ktorý sa vykresľuje v stavovom riadku.
Okrem editoru Vim však Powerline funguje aj v ďalších aplikáciách, ako Bash alebo Zsh. Práve vďaka tomu ho vieme použiť spolu s niektorými témami, akou je napríklad Powerlevel10k.
Predinštalovaných tém (~/.zshrc/themes) ponúka OhMyZsh množstvo, akurát moja obľúbená Powerlevel10k , samozrejme, chýba.
Treba ju preto nainštalovať:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
A následne pridať do .zshrc riadok:
ZSH_THEME="powerlevel10k/powerlevel10k"
Ihneď po inštalácii by sa mal zobraziť sprievodca nastavení (pokiaľ nie, kedykoľvek ho môžete vyvolať pomocou: p10k configure), ktorý nám pomôže s konfiguráciou .p10k.zsh súboru. Téma teda disponuje vlastným konfiguračným súborom, v ktorom je možné odkomentovať niektoré možnosti, ktoré cez sprievodcu zmeniť nevieme.
Ja však plne využívam sprievodcu a manuálne aktivujem snáď len ram (free RAM), load (CPU) a Laravel version. Presne preto tento file ani nemusím pridávať na Git či Gist.
Zdroj: github.com
Zdroj: github.com
Oh My ZSH Plugins
Pluginy vylepšujú funkčnosť terminálu a rozširujú automatické dopĺňanie tabulátorom pre rôzne programy, ktoré pri developmente používame. Oh My ZSH ich ma dostupných už vyše 260 .
Jedným z nich je integrácia s Gitom, ktorý by mal byt aktívny ihneď po inštalácii. Git plugin za nás dopĺňa príkazy a pridá aj kopu aliasov. Vďaka tomu je práca s Gitom jednoduchšia a nemusíme googliť alebo hľadať v manuáloch zabudnutý príkaz, čo šetrí kopec času.
Nekompletná ukážka zoznamu aliasov, ktoré Git plugin pridal.
Syntax Highlighting Plugin
Doplnok farebne označuje príkazy, ktoré píšeme. Čím vieme rýchlejšie odhaliť preklepy, prÍpadne, že shell daný príkaz nepozná. Dostupnou alternatívou je Fast syntax highlighting.
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestion
Completion plugin
Pridá niekoľko dokončovaní, ktoré zatiaľ nie sú zahrnuté v stable verzii Zsh.
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions
Plus pre podporu selekcie tabom, pridáme tieto riadky do .zshrc:
# Enhanced form of menu completion called `menu selection'
zmodload -i zsh/complist
Zsh-z
ZSH-z je nástroj príkazového riadku, ktorý umožňuje rýchlo preskočiť do adresárov, ktoré sme v minulosti navštívili. Program sleduje čas a frekvenciu strávenú v adresároch. Na základe toho sa snaží uhádnuť, do ktorého adresára chceme vstúpiť, pričom stačí napísať len jeho časť názvu.
git clone https://github.com/agkozak/zsh-z $ZSH_CUSTOM/plugins/zsh-z
Podobne užitočných pluginov je skutočne mnoho, stačí si vybrať tie, ktoré skutočne potrebujeme. Všeobecne platí, že čím viac pluginov, tým väčšia odozva. Takže to rozhodne netreba preháňať.
Terminal tip’s and trick’s
Na záver mi nedalo uviesť krátky zoznam užitočných programov.
- Program Neofetch zobrazí system info
- TLDR je rýchla alternatíva k príkazu “man”
- How2 – Stackowerflow v termináli
- Caniuse-cmd – browser support
- Fast fuzzy finder je ďalší užitočný plugin do Zsh. Ide o interaktívny vyhľadávač, vďaka ktorému vieme rekurzívne vyhľadávať súbory v aktuálnom adresári
- Neovim – lepší, krajší VIM
- Add gitignore – skript, ktorý pomôže pri generovaní .gitignore súborov
- Thefuck – veľmi užitočné pri preklepoch :D Zdroj: github.com
Zdroje & read more:
- My Terminal Setup: iTerm2 + Zsh ???? - DEV Community MAC
- iTerm2 + Oh My Zsh! + Powerlevel10K best terminal combination for Geeks! MAC
- Configure a beautiful terminal on Unix with Zsh LINUX
- Quick Setup of Oh My ZSH! terminal on Ubuntu
- HowTo: My Terminal & Shell setup - Hyper.js + ZSH + starship ☄️???? HYPER
- The Windows Terminal | Nicky blogs WIN
- You’re Missing Out on a Better Mac Terminal Experience
- Jazz Up Your “ZSH” Terminal In Seven Steps — A Visual Guide
- Configuration of a beautiful (efficient) terminal and prompt on OSX in 7minutes
- Terminal 101 — The Setup Guide that will Boost your Workflow
- Your terminal can be much, MUCH more productive ???? | by Ivan ????????????????
- Supercharge your Terminal with Zsh | by Satyajit Sahoo | Callstack Engineers
- https://towardsdatascience.com/the-ultimate-guide-to-your-terminal-makeover-e11f9b87ac99
- Windows Command Prompt