Zsh is een krachtige shell die zowel als interactieve shell en als interpreter van scripttalen werkt. Hoewel het compatibel is met de POSIX sh (niet standaard, alleen met emulate sh
), biedt het voordelen zoals verbeterde tab completion en globbing.
De Zsh FAQ biedt meer redenen om Zsh te gebruiken.
Installatie
Voordat gebruikers beginnen, willen ze misschien zien welke shell momenteel wordt gebruikt:
$ echo $SHELL
Installeer het zsh pakket. Installeer ook het pakket zsh-completions voor aanvullende aanvullingsdefinities.
Initiële configuratie
Zorg ervoor dat Zsh correct is geïnstalleerd door het volgende in een terminal uit te voeren:
$ zsh
U zou nu zsh-newuser-install moeten zien, dat u door een basisconfiguratie zal leiden. Als u dit wilt overslaan, druk dan op q
. Als u het niet zag, kunt u het handmatig oproepen met:
$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Zsh uw standaardshell maken
Verander uw shell in /usr/bin/zsh
. Zie Command-line shell#Het veranderen van uw standaard shell.
~/.bashrc
naar ~/.zshrc
(b.v. de prompt en de aliassen) en van ~/.bash_profile
naar ~/.zprofile
(b.v. de code die het X Window System start).Opstart/Sluit bestanden
- Zie A User’s Guide to the Z-Shell voor uitleg over interactieve en login shells, en wat je in je opstart bestanden moet zetten.
- Je zou kunnen overwegen een standaard pad te implementeren voor je Zsh configuratie bestanden.
- Als
$ZDOTDIR
niet is ingesteld, wordt$HOME
in plaats daarvan gebruikt. - Als optie
RCS
niet is ingesteld in een van de bestanden, zullen er geen configuratiebestanden worden gelezen na dat bestand.
Bij het opstarten zal Zsh standaard commando’s lezen uit de volgende bestanden in deze volgorde, mits ze bestaan.
-
/etc/zsh/zshenv
Gebruikt voor het instellen van omgevingsvariabelen voor alle gebruikers; het mag geen commando’s bevatten die uitvoer produceren of veronderstellen dat de shell verbonden is met een TTY. Als dit bestand bestaat wordt het altijd gelezen, dit kan niet worden opgeheven. -
$ZDOTDIR/.zshenv
Gebruikt voor het instellen van gebruikers omgevingsvariabelen; het mag geen commando’s bevatten die uitvoer produceren of aannemen dat de shell is aangesloten op een TTY. Als dit bestand bestaat, wordt het altijd gelezen. -
/etc/zsh/zprofile
Gebruikt voor het uitvoeren van commando’s bij het starten voor alle gebruikers, wordt gelezen bij het starten als een login-shell. Merk op dat op Arch Linux, het standaard één regel bevat die/etc/profile
als bron heeft. Zie de waarschuwing hieronder voordat u dat wilt verwijderen!-
/etc/profile
Dit bestand moet door alle POSIX sh-compatibele shells worden opgehaald bij het inloggen: het stelt$PATH
en andere omgevingsvariabelen en applicatiespecifieke (/etc/profile.d/*.sh
) instellingen in bij het inloggen.
-
-
$ZDOTDIR/.zprofile
Wordt gebruikt voor het uitvoeren van gebruikerscommando’s bij het starten, wordt gelezen bij het starten als een login-shell. Wordt meestal gebruikt voor het automatisch starten van grafische sessies en voor het instellen van sessie-omgevingsvariabelen. -
/etc/zsh/zshrc
Wordt gebruikt voor het instellen van de interactieve shell-configuratie en het uitvoeren van opdrachten voor alle gebruikers, wordt gelezen bij het starten als een interactieve shell. -
$ZDOTDIR/.zshrc
Wordt gebruikt voor het instellen van de interactieve shell-configuratie van de gebruiker en het uitvoeren van opdrachten, wordt gelezen bij het starten als een interactieve shell. -
/etc/zsh/zlogin
Gebruikt voor het uitvoeren van commando’s voor alle gebruikers aan het einde van de initiële voortgang, wordt gelezen bij het starten als een login-shell. -
$ZDOTDIR/.zlogin
Gebruikt voor het uitvoeren van commando’s voor de gebruiker aan het einde van de initiële voortgang, wordt gelezen bij het starten als een login-shell. Wordt meestal gebruikt voor het automatisch opstarten van opdrachtregel-utilities. Mag niet worden gebruikt voor het automatisch starten van grafische sessies, omdat de sessie op dat moment configuraties kan bevatten die alleen bedoeld zijn voor een interactieve shell. -
$ZDOTDIR/.zlogout
Wordt gebruikt voor het uitvoeren van commando’s als een login-shell wordt afgesloten. -
/etc/zsh/zlogout
Wordt gebruikt voor het uitvoeren van commando’s voor alle gebruikers als een login-shell wordt afgesloten.
Zie de grafische voorstelling.
-
$HOME/.profile
is geen onderdeel van de Zsh opstartbestanden en wordt niet door Zsh opgehaald tenzij Zsh wordt aangeroepen alssh
ofksh
en wordt gestart als een login-shell. Voor meer details over de sh en ksh compatibiliteitsmodi, zie zsh(1) § COMPATIBILITY. - De paden die gebruikt worden in Arch’s zsh pakket zijn anders dan de standaard paden die gebruikt worden in de man pages (FS#48992).
/etc/zsh/zprofile
niet, anders zal het de integriteit van andere pakketten breken die sommige scripts in /etc/profile.d/
.Zsh configureren
Hoewel Zsh bruikbaar is uit de doos, is het bijna zeker niet ingesteld zoals de meeste gebruikers het zouden willen gebruiken. Maar door de enorme hoeveelheid maatwerk die beschikbaar is in Zsh, kan het configureren van Zsh een ontmoedigende en tijdrovende ervaring zijn.
Simple .zshrc
Hieronder staat een voorbeeld van een configuratiebestand. Het biedt een fatsoenlijke set standaardopties en geeft ook voorbeelden van de vele manieren waarop Zsh kan worden aangepast. Om deze configuratie te gebruiken slaat u het op als een bestand met de naam .zshrc
.
source ~/.zshrc
.Hier is een eenvoudige .zshrc
:
~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Dit stelt de standaard prompt in op het walters themeprompt walters
Zie #Prompt themes voor meer details over het prompt theme systeem.
$PATH configureren
Zsh bindt de PATH
variabele aan een path
array. Ze worden automatisch gesynchroniseerd. Dit stelt ons in staat om PATH
gemakkelijk te manipuleren door eenvoudigweg de matrix te wijzigen. Zie A User’s Guide to the Z-Shell voor details.
De regel typeset -U PATH path
, waar de -U
staat voor uniek, instrueert de shell om duplicaten van zowel $PATH
als $path
weg te gooien:
~/.zshenv
typeset -U PATH pathpath=("$HOME/.local/bin" /other/things/in/path "$path")export PATH
Commando voltooiing
De meest overtuigende eigenschap van Zsh is misschien wel de geavanceerde autocompletion mogelijkheden. Schakel op zijn minst autoaanvullen in .zshrc
in. Om autocompletion in te schakelen, voegt u het volgende toe aan uw ~/.zshrc
:
~/.zshrc
autoload -Uz compinitcompinit
De bovenstaande configuratie bevat ssh/scp/sftp hostnamen completering, maar om deze mogelijkheid te laten werken, moeten gebruikers ssh’s hostnaam hashing niet inschakelen (d.w.z.d.w.z. optie HashKnownHosts
in de configuratie van de ssh-client).
Voor autocompletion met een pijltjestoets-gestuurde interface, voegt u het volgende toe aan:
~/.zshrc
zstyle ':completion:*' menu select
Om het menu te activeren, drukt u tweemaal op Tab
.
Voor het automatisch aanvullen van commandoregel-switches voor aliassen, voegt u het volgende toe aan:
~/.zshrc
setopt COMPLETE_ALIASES
Om het automatisch aanvullen van bevoorrechte omgevingen in bevoorrechte commando’s in te schakelen (bijv.b.v. als u een commando voltooit dat begint met sudo, zullen voltooiingsscripts ook proberen uw voltooiingen met sudo te bepalen), include:
~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Key bindings
Zsh gebruikt geen readline, in plaats daarvan gebruikt het zijn eigen en krachtigere Zsh Line Editor (ZLE). Het leest geen /etc/inputrc
of ~/.inputrc
. Lees Een nadere beschouwing van de zsh line editor en het maken van aangepaste widgets voor een introductie in de configuratie van ZLE.
ZLE heeft een Emacs mode en een vi mode. Als een van de VISUAL
of EDITOR
omgevingsvariabelen de string vi
bevat, dan wordt de vi mode gebruikt; anders wordt standaard de Emacs mode gebruikt. Stel de mode expliciet in met bindkey -e
of bindkey -v
respectievelijk voor Emacs mode of vi mode.
Toetsenbindingen worden toegewezen door een escape-sequentie die overeenkomt met een toetsaanslag toe te wijzen aan een ZLE widget. De beschikbare widgets, met beschrijvingen van hun acties en hun standaard toetsenbindingen, staan opgesomd in zshzle(1) § STANDAARD WIDGETS en zshcontrib(1) § ZLE FUNCTIONS.
De aanbevolen manier om toetsenbindingen in Zsh in te stellen is door string mogelijkheden van terminfo(5) te gebruiken. Bijvoorbeeld:
~/.zshrc
# maak een hash aan die compatibel is met zkbd;# om andere sleutels aan deze hash toe te voegen, zie: 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}"# setup key accordingly}" ]] && bindkey -- "${key}" begin-van-regel}" ]] && bindkey -- "${key}" end-of-line}" ]] && bindkey -- "${key}" overschrijf-mode}" ]] && bindkey -- "${key}" backward-delete-char}" ]] && 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-van-buffer-of-history}" ]] && bindkey -- "${key}" einde-van-buffer-of-history}" ]] && bindkey -- "${key}" reverse-menu-complete# Zorg er ten slotte voor dat de terminal zich in de toepassingsmodus bevindt, wanneer zle# actief is. Alleen dan zijn de waarden uit $terminfo geldig.indien (( ${+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
Historie zoeken
U moet de key
array instellen en ervoor zorgen dat ZLE in application mode komt om de volgende instructies te gebruiken; zie #Key bindings.
Om geschiedenis zoeken in te schakelen voegt u deze regels toe aan .zshrc
bestand:
~/.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-or-beginning-search-zle -N down-line-or-beginning-search}" ]] && bindkey -- "${key}" down-line-or-beginning-search
Door dit te doen, zullen alleen de afgelopen commando’s die overeenkomen met de huidige regel tot aan de huidige cursorpositie worden getoond wanneer Up
of Down
toetsen worden ingedrukt.
Shift, Alt, Ctrl en Meta modifiers
xterm-compatibele terminals kunnen uitgebreide toets-definities van user_caps(5) gebruiken. Dit zijn combinaties van Shift
, Alt
, Ctrl
en Meta
samen met Up
, Down
, Left
, Right
, PageUp
, PageDown
, Home
, End
of Del
. Raadpleeg de zkbd broncode voor een lijst van aanbevolen namen voor de modificatietoetsen en toetsencombinaties.
Voorbeeld, voor Ctrl+Left
om naar het begin van het vorige woord te gaan en Ctrl+Right
om naar het begin van het volgende woord te gaan:
~/.zshrc
key="${terminfo}"key="${terminfo}"}" ]] && bindkey -- "${key}" backward-word}" ]] && bindkey -- "${key}" forward-word
Prompts
Zsh biedt de mogelijkheid om een prompt thema te gebruiken of, voor gebruikers die ontevreden zijn over de thema’s (of hun bruikbaarheid willen uitbreiden), de mogelijkheid om een eigen prompt te bouwen.
Prompt thema’s
Prompt thema’s zijn een snelle en eenvoudige manier om een gekleurde prompt in Zsh op te zetten. Zie zshcontrib(1) § PROMPT THEMES voor informatie over prompt thema’s en hoe u uw eigen thema kunt schrijven.
Om een thema te gebruiken, moet u ervoor zorgen dat het prompt thema systeem is ingesteld op autoload in .zshrc
. Dit kan worden gedaan door deze regels toe te voegen aan:
~/.zshrc
autoload -Uz promptinitpromptinit
De beschikbare prompt thema’s worden opgesomd door het commando uit te voeren:
$ prompt -l
Om bijvoorbeeld het walters
thema te gebruiken, voert u in:
$ prompt walters
Om een voorbeeld van alle beschikbare thema’s te zien, gebruikt u dit commando:
$ prompt -p
Handmatig installeren van prompt thema’s
Het is mogelijk om thema’s handmatig te installeren, zonder externe configuratie manager tools. Voor een lokale installatie maakt u eerst een map aan en voegt deze toe aan de fpath
array, bijv:
$ mkdir ~/.zprompts$ fpath=("$HOME/.zprompts" "$fpath")
Nu maakt u een symbolische link van uw themabestand in deze map:
$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup
Als u in plaats daarvan een thema globaal wilt installeren, doe dan:
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup
Nu zou u het moeten kunnen activeren met:
$ prompt mytheme
Als alles werkt, kunt u uw .zshrc
dienovereenkomstig aanpassen.
Prompt thema’s toevoegen zonder een apart bestand voor elk
Naast het toevoegen van een prompt thema via zijn eigen bestand, is het mogelijk om thema’s toe te voegen vanuit een ander bestand (zoals uw .zshrc
), bijv:
~/.zshrc
# Laad promptinitautoload -.Uz promptinit && promptinit# Definieer het themeprompt_mytheme_setup() { PS1="%~%#"}# Voeg het thema toe aan promptsysprompt_themes+=( mytheme )# Laad het themeprompt mytheme
Aangepaste prompt
Dit artikel of gedeelte heeft uitbreiding nodig.
PROMPT
voorbeeld toe. (Bespreek in Talk:Zsh#)Naast een primaire linkszijdige prompt PS1
(PROMPT
, prompt
) die voor alle shells geldt, ondersteunt Zsh ook een rechtszijdige prompt RPS1
(RPROMPT
). Deze twee variabelen zijn degene die u op een aangepaste waarde wilt zetten.
Andere prompts voor speciale doeleinden, zoals PS2
(PROMPT2
), PS3
(PROMPT3
), PS4
(PROMPT4
), RPS1
(RPROMPT
), RPS2
(RPROMPT2
) en SPROMPT
, worden uitgelegd in zshparam(1) § PARAMETERS GEBRUIKT DOOR DE SHELL.
Alle prompts kunnen worden aangepast met prompt escapes. De beschikbare prompt escapes staan opgesomd in zshmisc(1) § UITBREIDING VAN PROMPT SEQUENCES.
Colors
Zsh stelt kleuren anders in dan Bash, u hoeft geen ingewikkelde ANSI escape sequenties of terminal mogelijkheden van terminfo(5) te gebruiken. Zsh biedt handige prompt escapes om de voorgrondkleur, achtergrondkleur en andere visuele effecten in te stellen; zie zshmisc(1) § Visuele effecten voor een lijst van hen en hun beschrijvingen.
Kleuren kunnen worden opgegeven met een decimaal geheel getal, de naam van een van de acht meest ondersteunde kleuren of als een # gevolgd door een RGB-triplet in hexadecimaal formaat. Zie de beschrijving van fg=colour in zshzle(1) § CHARACTER HIGHLIGHTING voor meer details.
De meeste terminals ondersteunen de volgende kleuren bij naam:
Naam | Nummer |
---|---|
black |
0 |
red |
1 |
green |
2 |
yellow |
3 |
blue |
4 |
magenta |
5 |
cyan |
6 |
white |
7 |
Kleurnummers 0-255 voor terminalemulators die compatibel zijn met xterm 256 kleuren zijn te vinden in de xterm-256-kleurenkaart.
Met een correct ingestelde TERM omgevingsvariabele kan het ondersteunde maximum aantal kleuren van de terminal worden gevonden in de terminfo(5) database met echoti colors
. In het geval van 24-bits kleuren, controleert u ook de COLORTERM omgevingsvariabele met print $COLORTERM
. Als deze 24bit
of truecolor
retourneert, dan ondersteunt uw terminal 16777216 (224) kleuren, zelfs als terminfo een kleiner getal laat zien.
- De kleuren 0-15 kunnen verschillen tussen terminal emulators en hun gebruikte kleurenschema’s.
- Vele terminal emulators geven vet weer met een fellere kleur.
- Prompt escapes kunnen getest worden met commando
print -P "prompt escapes"
, bijvoorbeeld:$ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
- Als u 24-bits kleuren gebruikt, wilt u misschien de module
zsh/nearcolor
laden in terminals die deze niet ondersteunen. Bijv:}" -eq '16777216' ]] || zmodload zsh/nearcolor
Zie zshmodules(1) § THE ZSH/NEARCOLOR MODULE voor details over de
zsh/nearcolor
module.
Voorbeeld
Dit is een voorbeeld van een tweezijdige prompt:
PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# 'RPROMPT=''
En dit is hoe het zal worden weergegeven:
Om kleuren uit het 16-255 bereik en 24-bit true color te gebruiken, kunt u het getal van 0 tot 255 toekennen aan de gewenste kleur en zijn hexadecimale kleurcode, respectievelijk:
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=''
Sample .zshrc bestanden
- Om dezelfde setup te krijgen als de maandelijkse ISO uitgaven (die standaard Zsh gebruiken), installeer grml-zsh-config. Het bevat de vele tweaks en geavanceerde optimalisaties van grml.
- https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – basis setup, met dynamische prompt en window title/hardinfo.
- https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc met meerdere mogelijkheden, bekijk zeker ook de commentaren erop. Opmerkelijke functies: bevestig functie om er zeker van te zijn dat de gebruiker de poweroff, reboot of hibernate wil uitvoeren, ondersteuning voor GIT in prompt (gedaan zonder vcsinfo), tab aanvullen met menu, afdrukken van huidige uitgevoerde commando in de titelbalk van het venster en meer.
Zie dotfiles#User repositories voor meer.
Tips en truuks
Autostart X bij login
Zie xinit#Autostart X bij login.
Restore terminal settings after a program exits abnormally
Veel programma’s veranderen de terminal status, en vaak worden de terminal settings niet hersteld bij abnormaal afsluiten (b.v. bij crashen of tegenkomen van SIGINT).
Dit kan gewoonlijk worden opgelost door reset(1) uit te voeren:
$ reset
De volgende secties beschrijven manieren om de noodzaak te vermijden om de terminal handmatig te resetten.
Het ttyctl commando
Het ttyctl commando kan worden gebruikt om de terminal te “bevriezen/ontvriezen”. Om de interactieve shell te bevriezen bij het opstarten, gebruikt u het volgende:
~/.zshrc
ttyctl -f
De terminal opnieuw instellen met escape-reeksen
Een andere tekenset voor lijntekeningen kan de terminal verpesten op een manier die ttyctl niet kan voorkomen.
Een eenvoudige oplossing is om de escape-reeksen die de terminal resetten uit te voeren vanuit de precmd
hook-functie, zodat ze elke keer worden uitgevoerd voordat de prompt wordt getekend. Bijvoorbeeld, gebruik de escape-sequentie \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>
om terug te gaan naar een bezochte map. Gebruik autocompletion na het streepje. Dit is erg handig als u het autocompletion menu gebruikt.
cd
, vanwege een conflict in beide sessies die naar hetzelfde bestand schrijven.cdr
cdr staat u toe om de werkdirectory te veranderen naar een vorige werkdirectory uit een lijst die automatisch wordt bijgehouden. Het slaat alle ingangen op in bestanden die worden bijgehouden tussen sessies en (standaard) tussen terminal emulators in de huidige sessie.
Zie zshcontrib(1) § HERINNERING VAN RECENTE DIRECTORIES voor instellingsinstructies.
Help commando
In tegenstelling tot Bash, heeft Zsh geen ingebouwd help
commando, in plaats daarvan biedt het run-help
. Standaard is run-help
een alias voor man
, het kan handmatig worden uitgevoerd door het aan een commando toe te voegen of het kan worden opgeroepen voor het huidige getypte commando met de sneltoetsen Alt+h
of Esc
h
.
Omdat het standaard slechts een alias is voor man, zal het alleen werken op externe commando's. Om de functionaliteit te verbeteren, zodat het werkt op shell builtins en andere shell functies, dient u de run-help
functie te gebruiken. Zie zshcontrib(1) voor meer informatie over de run-help
en zijn assistent functies.
Laad eerst de run-help
functie en verwijder dan de bestaande run-help
alias. Voor het gemak kan help
worden gealiased naar run-help
. Voeg bijvoorbeeld het volgende toe aan uw zshrc
:
autoload -Uz run-help(( ${+aliases} )) && unalias run-helpalias help=run-help
Hulpfuncties moeten afzonderlijk worden ingeschakeld:
autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn
Het run-help git commit
commando opent nu bijvoorbeeld de man page git-commit(1) in plaats van git(1).
Persistent rehash
Typisch zal compinit niet automatisch nieuwe uitvoerbare bestanden vinden in de $PATH
. Bijvoorbeeld, nadat u een nieuw pakket hebt geïnstalleerd, zouden de bestanden in /usr/bin/
niet onmiddellijk of automatisch worden opgenomen in de voltooiing. Dus, om deze nieuwe uitvoerbare bestanden op te nemen, zou men uitvoeren:
$ rehash
Deze 'rehash' kan worden ingesteld om automatisch te gebeuren. Neem simpelweg het volgende op in uw zshrc
:
~/.zshrc
zstyle ':completion:*' rehash true
On-demand rehash
Zoals hierboven, maar pacman kan worden geconfigureerd met haken om automatisch een rehash
aan te vragen, wat niet het prestatieverlies oplevert van constant rehashen zoals hierboven. Om dit in te schakelen, maakt u de /etc/pacman.d/hooks
directory aan, en een /var/cache/zsh
directory, maak dan een hook bestand aan:
/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
Dit houdt de wijzigingsdatum van het bestand /var/cache/zsh/pacman
consistent met de laatste keer dat een pakket werd geïnstalleerd, geüpgraded of verwijderd. Vervolgens moet zsh
worden overgehaald om zijn eigen commando-cache te vernieuwen wanneer deze verouderd is, door aan uw ~/.zshrc
:
~/.zshrc
zshcache_time="$(datum +%s%N) "autoload -Uz add-zsh-hookrehash_precmd() { if ]; then local paccache_time="$(datum -r /var/cache/zsh/pacman +%s%N)" if (( zshcache_time < paccache_time )); dan rehash zshcache_time="$paccache_time" fi}add-zsh-hook -Uz precmd rehash_precmd
Als de precmd
-haak wordt getriggerd voordat /var/cache/zsh/pacman
is bijgewerkt, werkt voltooiing mogelijk niet totdat een nieuwe prompt wordt gestart. Het uitvoeren van een leeg commando, bijvoorbeeld door op enter
te drukken, zou voldoende moeten zijn.
Alternatief on-demand rehash met behulp van SIGUSR1
Net als hierboven, maar het hook-bestand ziet er als volgt uit:
/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
instanties. Merk op dat het standaard gedrag voor SIGUSR1 beëindigen is, dus wanneer u dit voor het eerst configureert, zullen alle draaiende zsh
instanties van alle gebruikers (inclusief login shells) beëindigen als ze de val hieronder niet hebben opgevangen.~/.zshrc
TRAPUSR1() { rehash }
De functie val hierboven kan worden vervangen door een lijst val trap 'rehash' USR1
. Zie zshmisc(1) § Trap Functies voor verschillen tussen soorten vallen.
Deze methode zal onmiddellijk rehash
alle zsh
instanties, waardoor de noodzaak om op enter te drukken om precmd
te triggeren verdwijnt.
Bind toets aan ncurses toepassing
Bind een ncurses toepassing aan een toetsaanslag, maar het zal geen interactie accepteren. Gebruik de variabele BUFFER
om het te laten werken. Het volgende voorbeeld laat gebruikers ncmpcpp openen met Alt+\
:
~/.zshrc
ncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;
\a
. Bijvoorbeeld:
$ print -n '\e]2;My xterm title\a'
zal de titel instellen op
My xterm title
Een eenvoudige manier om een dynamische titel te hebben is om de titel in te stellen in de precmd
en preexec
hook functies. Zie zshmisc(1) § Haak Functies voor een lijst van beschikbare haak functies en hun beschrijvingen.
Door print -P
te gebruiken kunt u extra voordeel halen uit Zsh’s prompt escapes.
- Titel afdrukken kan worden opgesplitst in meerdere commando’s, zolang ze opeenvolgend zijn.
- GNU Screen stuurt de xterm titel naar de hardstatus (
%h
). Als je de string escapes van Screen wilt gebruiken (b.v. voor kleuren) moet je de hardstatus instellen met de\e_
\e\
escape-sequence. Anders zal, als string escapes worden gebruikt in\e]2;
\a
, de terminal emulator een vervormde titel krijgen omdat deze niet in staat is om de string escapes van Screen te interpreteren.
- Gebruik niet de
-P
optie vanprint
bij het afdrukken van variabelen om te voorkomen dat deze worden geparseerd als prompt escapes. - Gebruik de parameteruitbreidingsvlag
q
bij het afdrukken van variabelen om te voorkomen dat ze worden geparseerd als escape-sequenties.
~/.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{-}%m\005{-}'}functie 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}"; }}if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz prexec xterm_title_preexecfi
Terminal emulator tab title
Sommige terminal emulators en multiplexers ondersteunen het instellen van de titel van het tabblad. De escape-sequenties zijn afhankelijk van de terminal:
Terminal | Escape-sequenties | Beschrijving |
---|---|---|
GNU-scherm | \ek \e\ |
Venster-titel van het scherm (%t ). |
Konsole | \e]30; \a |
Konsole’s tabblad titel. |
Shell omgevingsdetectie
Zie een archief over shell omgevingsdetectie voor tests om de shell omgeving te detecteren. Dit omvat login/interactieve shell, Xorg-sessie, TTY en SSH-sessie.
/dev/tcp equivalent: ztcp
Gebruik de zsh/net/tcp
module:
$ zmodload zsh/net/tcp
U kunt nu TCP verbindingen opzetten:
$ ztcp example.com 80
Shortcut om shell af te sluiten op gedeeltelijke commandoregel
Normaal sluit Ctrl+d
uw shell niet als de commandoregel gevuld is, dit herstelt het:
.zshrc
exit_zsh() { exit }zle -N exit_zshbindkey '^D' exit_zsh
Uitbreidingen van derden
Configuratieraamwerken
- oh-my-zsh – Een populair, door de gemeenschap aangestuurd raamwerk voor het beheren van uw Zsh-configuratie. Het wordt geleverd met een heleboel handige functies, helpers, plugins en thema’s.
https://github.com/ohmyzsh/ohmyzsh || oh-my-zsh-gitAUR
- Prezto – Een configuratieframework voor Zsh. Het wordt geleverd met modules, die de omgeving van de opdrachtregelinterface verrijken met verstandige standaardinstellingen, aliassen, functies, automatisch aanvullen en prompt-thema’s.
https://github.com/sorin-ionescu/prezto || prezto-gitAUR
- ZIM – Een configuratieframework met razendsnelle en modulaire uitbreidingen. Zim is zeer eenvoudig aan te passen en wordt geleverd met een rijke set modules en functies zonder afbreuk te doen aan snelheid of functionaliteit.
https://github.com/zimfw/zimfw || zsh-zim-gitAUR
Plugin managers
- Antibody – Een prestatiegerichte plugin manager die vergelijkbaar is met Antigen.
https://github.com/getantibody/antibody || antibodyAUR
- zinit (voorheen “zplugin”) – Flexibele Zsh-plugin manager met schoon fpath, rapporten, voltooiingsbeheer, turbomodus
https://github.com/zdharma/zinit || zsh-zplugin-gitAUR
- Antigen – Een plugin manager voor Zsh, geïnspireerd door oh-my-zsh en vundle. ABANDONED
https://github.com/zsh-users/antigen || antigen-gitAUR
- zgen – Een lichtgewicht en eenvoudige plugin manager voor Zsh. ABANDONED
https://github.com/tarjoilija/zgen || zgen-gitAUR
- zplug – Een nieuwe generatie plugin manager voor Zsh. ABANDONED
https://github.com/zplug/zplug || zplugAUR
Fish-achtige syntax highlighting en autosuggesties
Fish biedt zeer krachtige shell syntax highlighting en autosuggesties. Om beide in Zsh te gebruiken, kun je zsh-syntax-highlighting en zsh-autosuggestions installeren, en tenslotte een of beide van de meegeleverde scripts uit je zshrc halen:
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
De “commando niet gevonden” handler
Dit artikel of onderdeel is een kandidaat om naar #Tips en trucs.
pacman -F
gebruikt, is geen “extensie van derden”. Alleen pkgfile-dingen horen in deze sectie thuis. (Bespreek in Talk:Zsh#)pacman -F “command not found” handler
pacman bevat functionaliteit om naar pakketten te zoeken die een bestand bevatten. De volgende command-not-found handler zal pacman direct gebruiken om te zoeken naar overeenkomende pakketten wanneer een onbekend commando wordt uitgevoerd.
~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: commando niet gevonden: %s' "$cmd" # printf 'command not found asap, then search for packagesfiles=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if (( ${#files} )); thenprintf '\r%s may be found in the following packages:\‖"$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""$package""$version""$file "doneelseprintf '\n'fireturn 127}
pacman -Fy
. Zie pacman#Search for a package that contains a specific file voor details.pkgfile “command not found” handler
pkgfile bevat een Zsh script bestand dat een command_not_found_handler
functie levert die automatisch de pkgfile database zal doorzoeken wanneer een niet-herkend commando wordt ingevoerd.
U moet het script broncode geven om het in te schakelen. Bijvoorbeeld:
~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
Uninstallation
Wijzig de standaard shell voordat u het zsh pakket verwijdert.
Run het volgende commando:
$ chsh -s /bin/bash user
Gebruik het voor elke gebruiker met zsh ingesteld als hun login shell (inclusief root indien nodig). Als het klaar is, kan het zsh pakket worden verwijderd.
Als alternatief, verander de standaard shell terug naar Bash door /etc/passwd
als root te bewerken.
/etc/passwd
, omdat het ongeldige invoer en/of syntaxisfouten helpt voorkomen.Voorbeeld, verander het volgende:
username:x:1000:1000:Full Name,,,:/home/username:/usr/bin/zsh
In dit:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bash