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
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.
~/.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
- 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.
- 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í.
-
$HOME/.profile
není součástí spouštěcích souborů Zsh a není zdrojem Zsh, pokud není Zsh vyvolán jakosh
neboksh
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).
/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
.
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
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
Tento článek nebo sekce potřebuje rozšíření.
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.
- 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.
- 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í:
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í.
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
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ě rehash
vyvolá 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.
- 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.
- 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
- 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“
Tento článek nebo sekce je kandidátem na přesunutí do #Tipy a triky.
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}
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
Odinstalace
Před odebráním balíčku zsh změňte výchozí shell.
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.
/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é
.