Zsh

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
Opmerking: Zorg ervoor dat de grootte van uw terminal ten minste 72×15 is, anders zal zsh-newuser-install niet draaien.

Zsh uw standaardshell maken

Verander uw shell in /usr/bin/zsh. Zie Command-line shell#Het veranderen van uw standaard shell.

Tip: Als u bash vervangt, willen gebruikers misschien wat code verplaatsen van ~/.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

Tip:

  • 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.
Opmerking:

  • 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.

Opmerking:

  • $HOME/.profile is geen onderdeel van de Zsh opstartbestanden en wordt niet door Zsh opgehaald tenzij Zsh wordt aangeroepen als sh of ksh 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).
Waarschuwing: Verwijder de standaard één regel in /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.

Tip: Pas de veranderingen toe zonder uit te hoeven loggen en dan weer in te hoeven loggen door 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
Waarschuwing: Dit zal Zsh completion scripts commando’s laten uitvoeren met sudo privileges. U moet dit niet inschakelen als u onvertrouwde autocompletion scripts gebruikt.
Opmerking: Deze speciale vorm van context-bewuste completering is alleen beschikbaar voor een klein aantal commando’s.

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

Tango-view-fullscreen.pngDit artikel of gedeelte heeft uitbreiding nodig.Tango-view-fullscreen.png

Reden: Voeg een eenvoudig kleurloos 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.

Opmerking:

  • De kleuren 0-15 kunnen verschillen tussen terminal emulators en hun gebruikte kleurenschema’s.
  • Vele terminal emulators geven vet weer met een fellere kleur.
Tip:

  • 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:

gebruikersnaam@host ~ %

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.

Opmerking: Dit zal niet werken als u meer dan één zsh sessie open heeft, en probeert te 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
Waarschuwing: Dit stuurt SIGUSR1 naar alle draaiende 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.

Tip:

  • 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.
Opmerking:

  • Gebruik niet de -P optie van print 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

Opmerking: Raamwerken introduceren een niveau van abstractie en complexiteit. Ze kunnen, en doen dat vaak, ongedefinieerd gedrag introduceren. In het geval van een shellbreuk moet als eerste stap bij het debuggen worden teruggekeerd naar de gewone shell.
  • 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

Tango-go-next.pngDit artikel of onderdeel is een kandidaat om naar #Tips en trucs.Tango-go-next.png

Opmerkingen te verplaatsen: De aangepaste functie die 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}
Opmerking: De bestanden database van pacman is gescheiden van de normale sync database en deze moet worden opgehaald met 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
Opmerking: Het kan zijn dat de pkgfile database geupdate moet worden voordat dit zal werken. Zie pkgfile#Installation voor details.

Uninstallation

Wijzig de standaard shell voordat u het zsh pakket verwijdert.

Waarschuwing: Het niet volgen van de onderstaande procedure kan ertoe leiden dat gebruikers geen toegang meer hebben tot een werkende shell.

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.

Waarschuwing: Het wordt sterk aangeraden om vipw(8) te gebruiken bij het bewerken van /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

Zie ook

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.