Zsh

Zsh je výkonný shell, který funguje jako interaktivní shell i jako interpret skriptovacího jazyka. Je sice kompatibilní s POSIXovým sh (ne ve výchozím nastavení, pouze při vydání emulate sh), ale nabízí výhody, jako je vylepšené doplňování tabulek a globbing.

V často kladených dotazech k Zsh najdete další důvody, proč Zsh používat.

Instalace

Před spuštěním se uživatelé možná budou chtít podívat, jaký shell se právě používá:

$ echo $SHELL

Instalace balíčku zsh. Pro další definice dokončování nainstalujte také balíček zsh-completions.

Počáteční konfigurace

Ujistěte se, že byl Zsh správně nainstalován, spuštěním následujícího příkazu v terminálu:

$ zsh

Měli byste nyní vidět zsh-newuser-install, který vás provede základní konfigurací. Pokud ji chcete přeskočit, stiskněte q. Pokud jste jej neviděli, můžete jej vyvolat ručně pomocí:

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Poznámka: Ujistěte se, že velikost vašeho terminálu je alespoň 72×15, jinak se zsh-newuser-install nespustí.

Zřízení výchozího shellu Zsh

Změňte svůj shell na /usr/bin/zsh. Viz Příkazový řádek#Změna výchozího shellu.

Tip: Pokud uživatelé nahrazují bash, mohou chtít přesunout některý kód z ~/.bashrc do ~/.zshrc (např. prompt a aliasy) a z ~/.bash_profile do ~/.zprofile (např. kód, který spouští X Window System).

Spouštěcí/vypínací soubory

Tip:

  • Podívejte se na Uživatelskou příručku k Z-Shellu, kde najdete vysvětlení o interaktivním a přihlašovacím shellu a o tom, co umístit do spouštěcích souborů.
  • Mohli byste zvážit zavedení standardní cesty pro konfigurační soubory Zsh.
Poznámka:

  • Pokud není nastaveno $ZDOTDIR, použije se místo toho $HOME.
  • Pokud není v některém ze souborů nastavena volba RCS, nebudou po tomto souboru načteny žádné konfigurační soubory.
  • Pokud není v některém ze souborů nastavena volba GLOBAL_RCS, nebudou po tomto souboru načteny žádné globální konfigurační soubory (/etc/zsh/*).

Při spuštění bude Zsh ve výchozím nastavení číst příkazy z následujících souborů v tomto pořadí, pokud existují.

  • /etc/zsh/zshenv Slouží k nastavení proměnných prostředí pro všechny uživatele; neměl by obsahovat příkazy, které vytvářejí výstup nebo předpokládají, že shell je připojen k TTY. Pokud tento soubor existuje, bude vždy načten, nelze jej přepsat.
  • $ZDOTDIR/.zshenv Slouží k nastavení proměnných prostředí pro všechny uživatele; neměl by obsahovat příkazy, které produkují výstup nebo předpokládají, že shell je připojen k TTY. Pokud tento soubor existuje, bude vždy načten.
  • /etc/zsh/zprofile Slouží k provádění příkazů při spuštění pro všechny uživatele, bude načten při spuštění jako přihlašovací shell. Všimněte si, že v Arch Linuxu obsahuje ve výchozím nastavení jeden řádek, jehož zdrojem je /etc/profile. Než jej budete chtít odstranit, podívejte se na varování níže!
    • /etc/profile Tento soubor by měly při přihlášení zdrojovat všechny shelly kompatibilní s POSIX sh: při přihlášení nastavuje $PATH a další proměnné prostředí a nastavení specifická pro aplikaci (/etc/profile.d/*.sh).
  • $ZDOTDIR/.zprofile Slouží k provádění příkazů při startu pro uživatele, bude načten při spuštění jako přihlašovací shell. Obvykle se používá k automatickému spouštění grafických relací a k nastavení proměnných prostředí pro celou relaci.
  • /etc/zsh/zshrc Slouží k nastavení konfigurace interaktivního shellu a spouštění příkazů pro všechny uživatele, bude načten při spuštění jako interaktivní shell.
  • $ZDOTDIR/.zshrc Slouží k nastavení konfigurace interaktivního shellu uživatele a spouštění příkazů, bude načten při spuštění jako interaktivní shell.
  • /etc/zsh/zlogin Slouží k provádění příkazů pro všechny uživatele na konci úvodního postupu, bude načten při spuštění jako přihlašovací shell.
  • $ZDOTDIR/.zlogin Slouží k provádění příkazů uživatele na konci úvodního postupu, bude načten při spuštění jako přihlašovací shell. Typicky se používá pro automatické spouštění nástrojů příkazového řádku. Neměl by se používat pro autostart grafických relací, protože v tomto okamžiku může relace obsahovat konfiguraci určenou pouze pro interaktivní shell.
  • $ZDOTDIR/.zlogout Slouží k provádění příkazů při ukončení přihlašovacího shellu.
  • /etc/zsh/zlogout Slouží k provádění příkazů pro všechny uživatele při ukončení přihlašovacího shellu.

Viz grafické znázornění.

Poznámka:

  • $HOME/.profile není součástí spouštěcích souborů Zsh a není zdrojem Zsh, pokud není Zsh vyvolán jako sh nebo ksh a spuštěn jako přihlašovací shell. Další podrobnosti o režimech kompatibility sh a ksh naleznete v zsh(1) § COMPATIBILITY.
  • Cesty použité v balíčku Arch zsh se liší od výchozích cest použitých v manuálových stránkách (FS#48992).
Varování: Neodstraňujte výchozí jeden řádek v /etc/zsh/zprofile, jinak to naruší integritu ostatních balíčků, které poskytují některé skripty v /etc/profile.d/.

Konfigurace Zsh

Ačkoli je Zsh použitelný po vybalení z krabice, téměř jistě není nastaven tak, jak by ho většina uživatelů chtěla používat. Vzhledem k obrovskému množství přizpůsobení, která jsou v Zsh k dispozici, však může být konfigurace Zsh náročná a zdlouhavá.

Jednoduchý soubor .zshrc

Níže je uveden ukázkový konfigurační soubor. Poskytuje slušnou sadu výchozích voleb a také příklady mnoha způsobů, kterými lze Zsh přizpůsobit. Chcete-li tuto konfiguraci použít, uložte ji jako soubor s názvem .zshrc.

Tip: Použijte změny, aniž byste se museli odhlašovat a znovu přihlašovat, spuštěním source ~/.zshrc.

Tady je jednoduchý .zshrc:

~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Tím nastavíte výchozí prompt na téma waltersprompt walters

Podrobněji o systému témat promptů viz #Témata promptů.

Konfigurace $PATH

Zsh váže proměnnou PATH na pole path. Jsou automaticky synchronizovány. To nám umožňuje snadno manipulovat s PATH jednoduchou úpravou pole. Podrobnosti najdete v Uživatelské příručce k shellu Z.

Řádek typeset -U PATH path, kde -U znamená unikátní, dává shellu pokyn, aby zahodil duplikáty z $PATH i $path:

~/.zshenv
typeset -U PATH pathpath=("$HOME/.local/bin" /other/things/in/path "$path")export PATH

Doplňování příkazů

Snad nejpřesvědčivější vlastností Zsh jsou jeho pokročilé schopnosti automatického doplňování. Přinejmenším povolte automatické dokončování v .zshrc. Chcete-li povolit automatické dokončování, přidejte do svého ~/.zshrc:

~/.zshrc
autoload -Uz compinitcompinit

Výše uvedená konfigurace zahrnuje doplňování hostitelských jmen ssh/scp/sftp, ale aby tato funkce fungovala, nesmí uživatelé povolit hashování hostitelských jmen ssh (tj.Tj. volbu HashKnownHosts v konfiguraci klienta ssh).

Pro automatické doplňování s rozhraním ovládaným šipkami přidejte následující:

~/.zshrc
zstyle ':completion:*' menu select

Pro aktivaci menu stiskněte dvakrát Tab.

Pro automatické doplňování přepínačů příkazového řádku pro aliasy přidejte následující:

~/.zshrc
setopt COMPLETE_ALIASES

Pro povolení automatického doplňování privilegovaných prostředí v privilegovaných příkazech (např.např. pokud dokončíte příkaz začínající sudo, budou se dokončovací skripty snažit určit i vaše dokončení sudo), zahrňte:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Varování: To umožní skriptům Zsh completion spouštět příkazy s právy sudo. Neměli byste to povolovat, pokud používáte nedůvěryhodné skripty automatického dokončování.
Poznámka: Tento speciální druh kontextového dokončování je k dispozici pouze pro malý počet příkazů.

Vazby klíčů

Zsh nepoužívá readline, místo toho používá vlastní a výkonnější Zsh Line Editor (ZLE). Neprovádí čtení /etc/inputrc ani ~/.inputrc. Přečtěte si článek Bližší pohled na řádkový editor zsh a vytváření vlastních widgetů, kde najdete úvod do konfigurace ZLE.

ZLE má režim Emacs a režim vi. Pokud jedna z proměnných prostředí VISUAL nebo EDITOR obsahuje řetězec vi, bude použit režim vi; v opačném případě bude výchozí režim Emacs. Režim nastavte explicitně pomocí bindkey -e, respektive bindkey -v pro režim Emacs nebo režim vi.

Vazby kláves se přiřazují mapováním escape sekvence odpovídající stisku klávesy na widget ZLE. Dostupné widgety s popisem jejich akcí a výchozími vazbami kláves jsou uvedeny v zshzle(1) § STANDARD WIDGETS a zshcontrib(1) § ZLE FUNCTIONS.

Doporučený způsob nastavení vazeb kláves v Zsh je pomocí řetězcových možností z terminfo(5). Například:

~/.zshrc
# vytvořit hash kompatibilní se zkbd;# přidání dalších klíčů do tohoto hashe viz: man 5 terminfotypeset -g -A keykey="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"# nastavte podle toho klíč}" ]] && bindkey -- "${key}" začátek řádku}" ]] && bindkey -- "${key}" konec řádku}" ]] && bindkey -- "${key}" overwrite-mode}" ]] && bindkey -- "${key}" zpětné mazání znaků}" ]] && bindkey -- "${key}" delete-char}" ]] && bindkey -- "${key}" up-line-or-history}" ]] && bindkey -- "${key}" down-line-or-history}" ]] && bindkey -- "${key}" backward-char}" ]] && bindkey -- "${key}" forward-char}" ]] && bindkey -- "${key}" begin-of-buffer-or-history}" ]] && bindkey -- "${key}" konec bufferu nebo historie}" ]] && bindkey -- "${key}" reverse-menu-complete# Nakonec se ujistěte, že je terminál v režimu aplikace, kdy je zle# aktivní. Teprve pak jsou hodnoty z $terminfo platné.if (( ${+terminfo} && ${+terminfo} )); thenautoload -Uz add-zle-hook-widgetfunction zle_application_mode_start { echoti smkx }function zle_application_mode_stop { echoti rmkx }add-zle-hook-widget -Uz zle-line-init zle_application_mode_startadd-zle-hook-widget -Uz zle-line-finish zle_application_mode_stopfi

History search

Pro použití následujících instrukcí je třeba nastavit pole key a zajistit, aby ZLE vstoupilo do aplikačního režimu; viz #Vazby kláves.

Pro zapnutí vyhledávání v historii přidejte do souboru .zshrc tyto řádky:

~/.zshrc
autoload -Uz up-line-or-beginning-search down-line-or-beginning-searchzle -N up-line-or-beginning-searchzle -N down-line-or-beginning-search}" ]] && bindkey -- "${key}" up-line-nebo-začátek-vyhledávání}" ]] && bindkey -- "${key}" down-line-or-beginning-search

Při tomto postupu se po stisknutí kláves Up nebo Down zobrazí pouze minulé příkazy odpovídající aktuálnímu řádku až po aktuální pozici kurzoru.

Modifikátory Shift, Alt, Ctrl a Meta

Terminály kompatibilní s terminálem Exterm mohou používat rozšířené definice kláves z user_caps(5). Jedná se o kombinace Shift, Alt, Ctrl a Meta spolu s Up, Down, Left, Right, PageUp, PageDown, Home, End nebo Del. Seznam doporučených názvů modifikátorových kláves a kombinací kláves naleznete ve zdrojovém kódu zkbd.

Například pro Ctrl+Left pro přechod na začátek předchozího slova a Ctrl+Right pro přechod na začátek následujícího slova:

~/.zshrc
key="${terminfo}"key="${terminfo}"}". ]] && bindkey --"${key}" zpětné slovo}" ]] && bindkey -- "${key}" forward-word

Prompts

Zsh nabízí možnosti použití motivu promptu nebo, pro uživatele, kteří nejsou spokojeni s motivy (nebo chtějí rozšířit jejich užitečnost), možnost vytvoření vlastního promptu.

Motivy promptu

Motivy promptu jsou rychlý a snadný způsob, jak nastavit barevný prompt v Zsh. Informace o tématech promptů a o tom, jak napsat vlastní téma, najdete v části zshcontrib(1) § PROMPT THEMES.

Chcete-li použít téma, ujistěte se, že je systém témat promptů nastaven na automatické spouštění v .zshrc. To lze provést přidáním těchto řádků do:

~/.zshrc
autoload -Uz promptinitpromptinit

Dostupné motivy promptů zobrazíte spuštěním příkazu:

$ prompt -l

Chcete-li například použít motiv walters, zadejte:

$ prompt walters

Chcete-li zobrazit náhled všech dostupných motivů, použijte tento příkaz:

$ prompt -p
Ruční instalace motivů prompt

Motivy je možné instalovat ručně, bez externích nástrojů správce konfigurace. Pro lokální instalaci nejprve vytvořte složku a přidejte ji do pole fpath, např:

$ mkdir ~/.zprompts$ fpath=("$HOME/.zprompts" "$fpath")

Nyní vytvořte symbolický odkaz na soubor motivu v této složce:

$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup

Pokud si místo toho přejete nainstalovat téma globálně, proveďte:

# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup

Nyní byste jej měli být schopni aktivovat pomocí:

$ prompt mytheme

Pokud vše funguje, můžete odpovídajícím způsobem upravit svůj .zshrc.

Přidávání motivů promptů bez samostatného souboru pro každý z nich

Kromě přidávání motivu promptů prostřednictvím vlastního souboru je možné přidávat motivy z jiného souboru (jako je váš .zshrc), např:

~/.zshrc
# Načíst promptinitautoload -Uz promptinit && promptinit# Definujte témaprompt_mytheme_setup() { PS1="%~%#"}# Přidejte téma do promptůprompt_themes+=( mytheme )# Načtěte témaprompt mytheme

Vlastní prompt

Tango-view-fullscreen.pngTento článek nebo sekce potřebuje rozšíření.Tango-view-fullscreen.png

Důvod: Přidejte jednoduchý bezbarvý PROMPT příklad. (Diskutujte v Diskuse:Zsh#)

Kromě primární levostranné výzvy PS1 (PROMPT, prompt), která je společná všem shellům, podporuje Zsh také pravostrannou výzvu RPS1 (RPROMPT). Právě tyto dvě proměnné budete chtít nastavit na vlastní hodnotu.

Další účelové výzvy, jako jsou PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) a SPROMPT, jsou vysvětleny v zshparam(1) § PARAMETRY POUŽÍVANÉ SHELLEM.

Všechny výzvy lze přizpůsobit pomocí escapů výzvy. Dostupné escapes promptů jsou uvedeny v zshmisc(1) § ROZŠÍŘENÍ PROMPTNÍCH SEKVENCÍ.

Barvy

Zsh nastavuje barvy jinak než Bash, nemusíte používat složité ANSI escape sekvence nebo terminálové možnosti z terminfo(5). Zsh poskytuje pohodlné promptní escapové sekvence pro nastavení barvy popředí, barvy pozadí a dalších vizuálních efektů; jejich seznam a popis najdete v zshmisc(1) § Vizuální efekty.

Barvy lze zadat pomocí celého desetinného čísla, názvu jedné z osmi nejrozšířenějších barev nebo jako # následované trojicí RGB v hexadecimálním formátu. Další podrobnosti viz popis fg=colour v zshzle(1) § CHARACTER HIGHLIGHTING.

Většina terminálů podporuje následující barvy podle názvu:

.

Jméno Číslo
black 0
red 1
green 2
yellow 3
blue 4
magenta 5
cyan 6
white 7

Čísla barev 0-255 pro emulátory terminálu kompatibilní s xtermem 256 barev lze nalézt v xterm-256barevné tabulce.

Při správně nastavené proměnné prostředí TERM lze maximální počet barev podporovaných terminálem zjistit z databáze terminfo(5) pomocí echoti colors. V případě 24bitových barev zkontrolujte také proměnnou prostředí COLORTERM pomocí print $COLORTERM. Pokud vrátí 24bit nebo truecolor, pak váš terminál podporuje 16777216 (224) barev, i když terminfo ukazuje menší číslo.

Poznámka:

  • Barvy 0-15 se mohou mezi emulátory terminálů a jejich používanými barevnými schématy lišit.
  • Mnoho emulátorů terminálů zobrazuje tučné písmo světlejší barvou.

Tip:

  • Příkazem print -P "prompt escapes" lze například otestovat escapované znaky:
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • Pokud používáte 24bitové barvy, možná budete chtít načíst modul zsh/nearcolor v terminálech, které je nepodporují. Např:
    }" -eq '16777216' ]] || zmodload zsh/nearcolor

    Podrobnosti o modulu zsh/nearcolor viz zshmodules(1) § MODUL ZSH/NEARCOLOR.

Příklad

Toto je příklad oboustranné výzvy:

PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# 'RPROMPT=''

A zde je uvedeno, jak se zobrazí:

username@host ~ %

Chcete-li použít barvy z rozsahu 16-255 a 24bitovou pravou barvu, můžete použít číslo od 0 do 255 přiřazené požadované barvě, respektive její hexadecimální kód:

PROMPT='%F{2}%n%f@%F{5}%m%f %F{4}%B%~%b%f %# 'RPROMPT=''
PROMPT='%F{#c0c0c0}%n%f@%F{#008000}%m%f %F{#800080}%B%~%b%f %# 'RPROMPT=''

Příklad .zshrc soubory

  • Chcete-li získat stejné nastavení jako u měsíčních vydání ISO (která standardně používají Zsh), nainstalujte si grml-zsh-config. Obsahuje mnoho vylepšení a pokročilých optimalizací z grml.
  • https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – základní nastavení, s dynamickým promptem a názvem okna/hardinfo.
  • https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc s mnoha funkcemi, určitě se podívejte na komentáře k němu. Významné vlastnosti: funkce potvrzení pro ujištění, že uživatel chce spustit poweroff, restart nebo hibernaci, podpora GIT ve výzvě (provedeno bez vcsinfo), doplňování tabulek pomocí menu, vypisování aktuálně prováděného příkazu do titulku okna a další.

Více viz dotfiles#Uživatelské repozitáře.

Tipy a triky

Autostart X při přihlášení

Viz xinit#Autostart X při přihlášení.

Obnovení nastavení terminálu po abnormálním ukončení programu

Mnoho programů mění stav terminálu a často neobnoví nastavení terminálu při abnormálním ukončení (např. při pádu nebo setkání se SIGINT).

Tento problém lze obvykle vyřešit provedením příkazu reset(1):

$ reset

Následující části popisují způsoby, jak se vyhnout nutnosti ručně resetovat terminál.

Příkaz ttyctl

Příkaz ttyctl lze použít k „zmrazení/odmrazení“ terminálu. Pro zmrazení interaktivního shellu při spuštění použijte následující příkaz:

~/.zshrc
ttyctl -f

Resetování terminálu pomocí escape sekvencí

Alternativní znaková sada pro řádkování může terminál pokazit způsobem, kterému ttyctl nemůže zabránit.

Jednoduchým řešením je vypsat escape sekvence, které resetují terminál, z hákové funkce precmd, takže se provedou vždy před vykreslením výzvy. Například pomocí escape sekvence \e] && (( ${#dirstack} == 0 )); thendirstack=("${(@f)"$(< "$DIRSTACKFILE")"}")}" ]] && cd -- "${dirstack}"fichpwd_dirstack() {print -l -- "$PWD" "${(u)dirstack}" > "$DIRSTACKFILE"}add-zsh-hook -Uz chpwd chpwd_dirstackDIRSTACKSIZE='20'setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME## Remove duplicate entriessetopt PUSHD_IGNORE_DUPS## This reverts the +/- operators.setopt PUSHD_MINUS

Now use

$ dirs -v

to print the dirstack. Use cd -<NUM> se vrátíte do navštívené složky. Za pomlčkou použijte automatické dokončování. To se ukáže jako velmi užitečné, pokud používáte nabídku automatického dokončování.

Poznámka: Tato funkce nebude fungovat, pokud máte otevřeno více relací zsh a pokusíte se cd, kvůli konfliktu při zápisu obou relací do stejného souboru.

cdr

cdr umožňuje změnit pracovní adresář na předchozí pracovní adresář z automaticky udržovaného seznamu. Ukládá všechny záznamy v souborech, které jsou udržovány napříč relacemi a (ve výchozím nastavení) mezi emulátory terminálu v aktuální relaci.

Pokyny k nastavení viz zshcontrib(1) § PAMATOVÁNÍ OBNOVENÝCH KATALOGŮ.

Příkaz Help

Na rozdíl od Bash neumožňuje Zsh vestavěný příkaz help, místo toho poskytuje run-help. Ve výchozím nastavení je run-help aliasem příkazu man, lze jej spustit buď ručně předřazením příkazu, nebo jej lze vyvolat pro aktuálně zadaný příkaz pomocí klávesových zkratek Alt+h nebo Esc h.

Protože ve výchozím nastavení je pouze aliasem příkazu man, bude fungovat pouze na externí příkazy. Chcete-li zlepšit jeho funkčnost, aby fungoval na vestavěných příkazech shellu a dalších funkcích shellu, musíte použít funkci run-help. Více informací o funkci run-help a jejích pomocných funkcích najdete v zshcontrib(1).

Nejprve načtěte funkci run-help a poté odstraňte stávající alias run-help. Pro větší pohodlí lze funkci help aliasovat na funkci run-help. Do svého zshrc přidejte například následující:

autoload -Uz run-help(( ${+aliases} )) && unalias run-helpalias help=run-help

Asistenční funkce je třeba povolit zvlášť:

autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn

Například příkaz run-help git commit nyní otevře manuálovou stránku git-commit(1) místo git(1).

Persistentní rehash

Typicky compinit automaticky nenajde nové spustitelné soubory v $PATH. Například po instalaci nového balíčku by soubory v /usr/bin/ nebyly okamžitě nebo automaticky zahrnuty do dokončení. Aby tedy byly tyto nové spustitelné soubory zahrnuty, bylo by třeba spustit:

$ rehash

Toto "přehrání" lze nastavit tak, aby probíhalo automaticky. Stačí do svého zshrc zahrnout následující:

~/.zshrc
zstyle ':completion:*' rehash true

On-demand rehash

Jako výše, pacman lze však nakonfigurovat pomocí háčků tak, aby si automaticky vyžádal rehash, což nenese výkonnostní postih neustálého rehashování jako výše. Chcete-li tuto funkci povolit, vytvořte adresář /etc/pacman.d/hooks a adresář /var/cache/zsh a poté vytvořte soubor s háčky:

/etc/pacman.d/hooks/zsh.hook
Operation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshWhen = PostTransactionExec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman

To udržuje datum změny souboru /var/cache/zsh/pacman v souladu s datem poslední instalace, aktualizace nebo odstranění balíčku. Pak je třeba zsh přimět k obnovení vlastní mezipaměti příkazů, když zastará, přidáním do ~/.zshrc:

~/.zshrc
zshcache_time="$(date +%s%N) "autoload -Uz add-zsh-hookrehash_precmd() { if ]; then local paccache_time="$(date -r /var/cache/zsh/pacman +%s%N)" if (( zshcache_time < paccache_time )); pak rehash zshcache_time="$paccache_time" fi fi}add-zsh-hook -Uz precmd rehash_precmd

Pokud je precmd háček spuštěn před aktualizací /var/cache/zsh/pacman, dokončení nemusí fungovat, dokud není zahájena nová výzva. Spuštění prázdného příkazu, např. stisknutím enter, by mělo být dostačující.

Alternativní rehash na vyžádání pomocí SIGUSR1

Jako výše, soubor s háčkem však vypadá takto:

/etc/pacman.d/hooks/zsh-rehash.hook
Operation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshDepends = procps-ngWhen = PostTransactionExec = /usr/bin/pkill zsh --signal=USR1
Warning: To odešle SIGUSR1 všem běžícím instancím zsh. Všimněte si, že výchozí chování pro SIGUSR1 je ukončit, takže při prvním nastavení se všechny běžící instance zsh všech uživatelů (včetně přihlašovacích shellů) ukončí, pokud nezaslaly níže uvedenou past.
~/.zshrc
TRAPUSR1() { rehash }

Výše uvedenou past funkce lze nahradit pastí seznamu trap 'rehash' USR1. Rozdíly mezi typy pastí viz zshmisc(1) § Trap Functions.

Tato metoda okamžitě rehashvyvolá všechny instance zsh, čímž odstraní nutnost stisknout enter pro spuštění precmd.

Vazba klávesy na aplikaci ncurses

Vazba aplikace ncurses na stisk klávesy, která však nepřijme interakci. Použijte proměnnou BUFFER, aby to fungovalo. Následující příklad umožňuje uživatelům otevřít ncmpcpp pomocí Alt+\:

~/.zshrc
ncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;

\a. Například:

$ print -n '\e]2;My xterm title\a'

nastaví nadpis na

My xterm title

Jednoduchý způsob, jak mít dynamický nadpis, je nastavit nadpis v hákových funkcích precmd a preexec. Seznam dostupných hákových funkcí a jejich popis najdete v části zshmisc(1) § Hook Functions.

Pomocí print -P můžete navíc využít escapování promptů Zsh.

Tip:

  • Tisk titulku lze rozdělit do více příkazů, pokud jdou za sebou.
  • GNU Screen posílá titulek xtermu na hardstatus (%h). Pokud chcete použít řetězcové escapování programu Screen (např. pro barvy), měli byste hardstatus nastavit pomocí escape sekvence \e_\e\. Jinak při použití řetězcových escapů v \e]2;\a získá emulátor terminálu zkreslený titulek, protože není schopen interpretovat řetězcové escapové znaky programu Screen.
Poznámka:

  • Při tisku proměnných nepoužívejte volbu -P print, abyste zabránili jejich vyhodnocení jako promptních escapů.
  • Při tisku proměnných používejte příznak rozšíření parametrů q, abyste zabránili jejich parsování jako escape sekvencí.
~/.zshrc
autoload -Uz add-zsh-hookfunction xterm_title_precmd () {print -Pn -- '\e]2;%n@%m %~\a'] && print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-}\e\'}function xterm_title_preexec () {print -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1}\a"] && { print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-} %# ' && print -n -- "${(q)1}\e\\"; }}if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz preexec xterm_title_preexecfi

Titulek karty terminálového emulátoru

Některé terminálové emulátory a multiplexery podporují nastavení názvu karty. Sekvence escape závisí na terminálu:

Terminál Sekvence escape Popis
GNU Screen \ek\e\ Název okna (%t).
Konzola \e]30;\a Název karty konzoly.

Detekce prostředí shellu

Podívejte se do úložiště o detekci prostředí shellu pro testy na detekci prostředí shellu. To zahrnuje přihlašovací/interaktivní shell, relaci Xorg, TTY a relaci SSH.

Ekvivalent /dev/tcp: ztcp

Použijte modul zsh/net/tcp:

$ zmodload zsh/net/tcp

Můžete nyní navazovat spojení TCP:

$ ztcp example.com 80

Zkratka pro ukončení shellu na částečném příkazovém řádku

Ve výchozím nastavení Ctrl+d neukončí shell, pokud je příkazový řádek vyplněn, toto to napravuje:

.zshrc
exit_zsh() { exit }zle -N exit_zshbindkey '^D' exit_zsh

Rozšíření třetích stran

Konfigurační rámce

Poznámka: Rámce zavádějí úroveň abstrakce a složitosti. Mohou zavádět a často také zavádějí nedefinované chování. V případě rozbití shellu by prvním krokem ladění měl být návrat k prostému shellu.

  • oh-my-zsh – Populární, komunitou řízený framework pro správu konfigurace Zsh. Obsahuje spoustu užitečných funkcí, pomocníků, zásuvných modulů a témat.

https://github.com/ohmyzsh/ohmyzsh || oh-my-zsh-gitAUR

  • Prezto – Konfigurační framework pro Zsh. Dodává se s moduly, obohacuje prostředí rozhraní příkazového řádku o rozumné výchozí hodnoty, aliasy, funkce, automatické dokončování a motivy výzev.

https://github.com/sorin-ionescu/prezto || prezto-gitAUR

  • ZIM – Konfigurační rámec s bleskovou rychlostí a modulárními rozšířeními. Zim se velmi snadno přizpůsobuje a přichází s bohatou sadou modulů a funkcí bez kompromisů v rychlosti nebo funkčnosti.

https://github.com/zimfw/zimfw || zsh-zim-gitAUR

Správci zásuvných modulů

  • Antibody – Správce zásuvných modulů zaměřený na výkon podobně jako Antigen.

https://github.com/getantibody/antibody || antibodyAUR

  • zinit (dříve „zplugin“) – Flexibilní správce zásuvných modulů Zsh s čistou cestou fpath, reporty, správou doplňování, turbo režimem

https://github.com/zdharma/zinit || zsh-zplugin-gitAUR

  • Antigen – Správce zásuvných modulů pro Zsh, inspirovaný oh-my-zsh a vundle. ABANDONED

https://github.com/zsh-users/antigen || antigen-gitAUR

  • zgen – Lehký a jednoduchý správce zásuvných modulů pro Zsh. ABANDONED

https://github.com/tarjoilija/zgen || zgen-gitAUR

  • zplug – Správce zásuvných modulů nové generace pro Zsh. ABANDONED

https://github.com/zplug/zplug || zplugAUR

Zvýrazňování syntaxe a autosugesce podobná nástroji Fish

Fish poskytuje velmi výkonné zvýrazňování syntaxe shellu a autosugesci. Chcete-li obojí používat v Zsh, můžete si nainstalovat zsh-syntax-highlighting, zsh-autosuggestions a nakonec ze svého zshrc zdrojovat jeden nebo oba poskytované skripty:

source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

Obsluha „příkaz nenalezen“

Tango-go-next.pngTento článek nebo sekce je kandidátem na přesunutí do #Tipy a triky.Tango-go-next.png

Poznámky: Vlastní funkce používající pacman -F není „rozšířením třetí strany“. Do této sekce patří pouze věci z pkgfile. (Diskutujte v Diskuse:Zsh#)

pacman -F „příkaz nenalezen“ handler

Pacman obsahuje funkci pro vyhledávání balíčků obsahujících soubor. Následující obslužná rutina „command-not-found“ použije pacman přímo k vyhledání odpovídajících balíčků, když je spuštěn neznámý příkaz.

~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: příkaz nenalezen: Pak hledejte balíčkyfiles=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if ((( ${#files} )); thenprintf '\r%s may be found in following packages:\n' "$cmd "local res=() repo package version filefor file in "$files"; dores=("${(0)file}")repo="$res "package="$res "version="$res "file="$res "printf ' %s/%s %s: /%s\n' "$repo" "$balík" "$verze" "$soubor "doneelseprintf '\n'fireturn 127}
Poznámka: Databáze souborů programu pacman je oddělena od běžné synchronizační databáze a je třeba ji načíst pomocí pacman -Fy. Podrobnosti naleznete v části pacman#Vyhledání balíčku, který obsahuje konkrétní soubor.

obsluha pkgfile „příkaz nenalezen“

pkgfile obsahuje soubor skriptu Zsh, který poskytuje funkci command_not_found_handler, která automaticky prohledá databázi pkgfile při zadání nerozpoznaného příkazu.

Pro její aktivaci je třeba skript zdrojovat. Například:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
Pozn: Před spuštěním této funkce může být nutné aktualizovat databázi pkgfile. Podrobnosti naleznete v části pkgfile#Instalace.

Odinstalace

Před odebráním balíčku zsh změňte výchozí shell.

Varování: Nedodržení níže uvedeného postupu může mít za následek, že uživatelé již nebudou mít přístup k funkčnímu shellu.

Spusťte následující příkaz:

$ chsh -s /bin/bash user

Použijte jej pro každého uživatele, který má zsh nastaven jako přihlašovací shell (v případě potřeby včetně roota). Po dokončení můžete balíček zsh odstranit.

Případně změňte výchozí shell zpět na Bash úpravou /etc/passwd jako root.

Upozornění: Při editaci /etc/passwd se důrazně doporučuje použít vipw(8), protože pomáhá zabránit neplatným zápisům a/nebo syntaktickým chybám.

Například změňte následující:

username:x:1000:1000:Full Name,,,:/home/username:/usr/bin/zsh

Na toto:

username:x:1000:1000:Full Name,,,:/home/username:/bin/bash

Viz také

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.