Zsh

Zsh er en kraftfuld shell, der fungerer både som en interaktiv shell og som en fortolker af scriptingsprog. Selv om den er kompatibel med POSIX sh (ikke som standard, kun hvis der udstedes emulate sh), tilbyder den fordele såsom forbedret tabulatorudfyldning og globbing.

Den ofte stillede spørgsmål om Zsh giver flere grunde til at bruge Zsh.

Installation

Hvor de begynder, vil brugerne måske se, hvilken shell der i øjeblikket bruges:

$ echo $SHELL

Installer zsh-pakken. For yderligere færdiggørelsesdefinitioner skal du også installere pakken zsh-completions.

Initial configuration

Sørg for, at Zsh er blevet installeret korrekt ved at køre følgende i en terminal:

$ zsh

Du bør nu se zsh-newuser-install, som vil guide dig gennem en grundlæggende konfiguration. Hvis du vil springe dette over, skal du trykke på q. Hvis du ikke så det, kan du kalde det manuelt med:

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Bemærk: Sørg for, at din terminal har en størrelse på mindst 72×15, ellers vil zsh-newuser-install ikke køre.

Makke Zsh til din standard shell

Opnå din shell til /usr/bin/zsh. Se Kommando-linje shell#Ændring af din standard shell.

Tip: Hvis du erstatter bash, vil brugere måske flytte noget kode fra ~/.bashrc til ~/.zshrc (f.eks. prompt og aliaser) og fra ~/.bash_profile til ~/.zprofile (f.eks. den kode, der starter X Window System).

Start/nedlukningsfiler

Tip:

  • Se A User’s Guide to the Z-Shell for at få en forklaring på interaktive og login-shells, og hvad du skal sætte i dine opstartsfiler.
  • Du kan overveje at implementere en standardsti til dine Zsh-konfigurationsfiler.
Bemærk:

  • Hvis $ZDOTDIR ikke er angivet, bruges $HOME i stedet.
  • Hvis indstilling RCS ikke er angivet i nogen af filerne, vil ingen konfigurationsfiler blive læst efter den pågældende fil.
  • Hvis indstilling GLOBAL_RCS ikke er angivet i nogen af filerne, vil ingen globale konfigurationsfiler (/etc/zsh/*) blive læst efter den pågældende fil.

Når Zsh starter, vil Zsh som standard læse kommandoer fra følgende filer i denne rækkefølge, forudsat at de findes.

  • /etc/zsh/zshenv Bruges til at indstille miljøvariabler for alle brugere; den bør ikke indeholde kommandoer, der producerer output eller antager, at shell’en er tilsluttet en TTY. Når denne fil findes, vil den altid blive læst, dette kan ikke tilsidesættes.
  • $ZDOTDIR/.zshenv Bruges til at indstille brugerens miljøvariabler; den bør ikke indeholde kommandoer, der producerer output eller antager, at shell’en er tilsluttet en TTY. Når denne fil findes, vil den altid blive læst.
  • /etc/zsh/zprofile Bruges til at udføre kommandoer ved start for alle brugere, vil blive læst ved start som en login shell. Bemærk venligst, at på Arch Linux indeholder den som standard én linje, som kilder /etc/profile. Se advarsel nedenfor, før du ønsker at fjerne den!
    • /etc/profile Denne fil bør anvendes af alle POSIX sh-kompatible skaller ved login: den opstiller $PATH og andre miljøvariabler og programspecifikke (/etc/profile.d/*.sh) indstillinger ved login.
  • $ZDOTDIR/.zprofile Bruges til at udføre brugerens kommandoer ved start, vil blive læst, når den starter som loginskal. Bruges typisk til autostart af grafiske sessioner og til at indstille miljøvariabler for hele sessionen.
  • /etc/zsh/zshrc Bruges til at indstille interaktiv shellkonfiguration og udføre kommandoer for alle brugere, vil blive læst ved start som en interaktiv shell.
  • $ZDOTDIR/.zshrc Bruges til at indstille brugerens interaktive shellkonfiguration og udføre kommandoer, vil blive læst ved start som en interaktiv shell.
  • /etc/zsh/zlogin Bruges til at udføre kommandoer for alle brugere ved afslutningen af det indledende forløb, vil blive læst, når den starter som en login shell.
  • $ZDOTDIR/.zlogin Bruges til at udføre brugerens kommandoer ved afslutningen af det indledende forløb, vil blive læst, når den starter som en login shell. Typisk brugt til autostart af kommandolinjeværktøjer. Bør ikke bruges til autostart af grafiske sessioner, da sessionen på dette tidspunkt kan indeholde konfiguration, der kun er beregnet til en interaktiv shell.
  • $ZDOTDIR/.zlogout Bruges til at udføre kommandoer, når en login shell afsluttes.
  • /etc/zsh/zlogout Bruges til at udføre kommandoer for alle brugere, når en login shell afsluttes.

Se den grafiske repræsentation.

Bemærk:

  • $HOME/.profile er ikke en del af Zsh-startfilerne og er ikke hentet af Zsh, medmindre Zsh påkaldes som sh eller ksh og startes som en loginskal. For flere detaljer om sh- og ksh-kompatibilitetstilstandene henvises til zsh(1) § COMPATIBILITY.
  • Stierne, der bruges i Arch’s zsh-pakke, er forskellige fra standardstierne, der bruges i man-siderne (FS#48992).
Advarsel: Fjern ikke standard en linje i /etc/zsh/zprofile, ellers vil det bryde integriteten af andre pakker, som leverer nogle scripts i /etc/profile.d/.

Konfigurer Zsh

Men selv om Zsh kan bruges ud af boksen, er den næsten sikkert ikke sat op på den måde, som de fleste brugere gerne vil bruge den. Men på grund af den enorme mængde af tilpasningsmuligheder, der er tilgængelige i Zsh, kan det være en skræmmende og tidskrævende oplevelse at konfigurere Zsh.

Enkle .zshrc

Nedenfor er der en eksempelkonfigurationsfil medtaget. Den indeholder et anstændigt sæt standardindstillinger og giver desuden eksempler på mange måder, hvorpå Zsh kan tilpasses. Hvis du vil bruge denne konfiguration, skal du gemme den som en fil med navnet .zshrc.

Tip: Anvend ændringerne uden at du behøver at logge ud og derefter ind igen ved at køre source ~/.zshrc.

Her er en simpel .zshrc:

~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Dette indstiller standardprompten til walters-temaetprompt walters

Se #Prompt-temaer for at få flere oplysninger om prompt-temasystemet.

Konfigurering af $PATH

Zsh binder PATH-variablen til et path-array. De er automatisk synkroniseret. Dette giver os mulighed for nemt at manipulere PATH ved blot at ændre arrayet. Se A User’s Guide to the Z-Shell for nærmere oplysninger.

Retten typeset -U PATH path, hvor -U står for unique, instruerer skallen om at kassere dubletter fra både $PATH og $path:

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

Kommandofuldførelse

Den måske mest overbevisende funktion i Zsh er de avancerede muligheder for autokomplettering. Du skal i det mindste aktivere autokomplettering i .zshrc. For at aktivere autokomplettering skal du tilføje følgende til din ~/.zshrc:

~/.zshrc 
autoload -Uz compinitcompinit 

Overstående konfiguration omfatter ssh/scp/sftp-værtsnavnekomplettering, men for at denne funktion kan fungere, må brugerne ikke aktivere ssh's hostname hashing (i.dvs. indstilling HashKnownHosts i ssh-klientkonfigurationen).

For autokomplettering med en piletaststyret grænseflade skal du tilføje følgende til:

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

For at aktivere menuen skal du trykke på Tab to gange.

For at få autokomplettering af kommandolinjeskifter for aliaser skal du tilføje følgende til:

~/.zshrc 
setopt COMPLETE_ALIASES 

For at aktivere autokomplettering af privilegerede miljøer i privilegerede kommandoer (f.eks.f.eks. hvis du fuldfører en kommando, der starter med sudo, vil fuldførelsesscripts også forsøge at bestemme dine fuldførelser med sudo), skal du inkludere:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Advarsel: Dette vil lade Zsh completion scripts køre kommandoer med sudo privilegier. Du bør ikke aktivere dette, hvis du bruger ikke betroede autokompletteringsscripts.
Bemærk: Denne specielle form for kontekstbevidst færdiggørelse er kun tilgængelig for et lille antal kommandoer.

Key bindings

Zsh bruger ikke readline, i stedet bruger den sin egen og mere kraftfulde Zsh Line Editor (ZLE). Den læser ikke /etc/inputrc eller ~/.inputrc. Læs Et nærmere kig på zsh line editor og oprettelse af brugerdefinerede widgets for at få en introduktion til ZLE-konfiguration.

ZLE har en Emacs-tilstand og en vi-tilstand. Hvis en af VISUAL eller EDITOR miljøvariablerne indeholder strengen vi, vil vi-tilstanden blive anvendt; ellers vil den som standard være Emacs-tilstanden. Indstil tilstanden eksplicit med bindkey -e eller bindkey -v for henholdsvis Emacs-tilstand eller vi-tilstand.

Tastebindinger tildeles ved at mappe en escape-sekvens, der matcher et tastetryk, til en ZLE-widget. De tilgængelige widgets, med beskrivelser af deres handlinger og deres standardtastebindinger, er listet i zshzle(1) § STANDARD WIDGETS og zshcontrib(1) § ZLE FUNCTIONS.

Den anbefalede måde at indstille tastebindinger i Zsh er ved at bruge string capabilities fra terminfo(5). For eksempel:

~/.zshrc
# oprette en zkbd-kompatibel hash;# for at tilføje andre nøgler til denne hash, se: 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}"key="${terminfo}"#opsæt nøglen i overensstemmelse hermed}" ]] && bindkey -- "${key}" beginning-of-line}" ]] && bindkey -- "${key}" end-of-line}" ]] && bindkey -- "${key}" overwrite-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}" beginning-of-buffer-or-history}" ]] && bindkey -- "${key}" end-of-buffer-or-history}" ]] && bindkey -- "${key}}" reverse-menu-complete# Endelig skal du sikre dig, at terminalen er i applikationstilstand, når zle er# aktiv. Kun da er værdierne fra $terminfo gyldige.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

Historiesøgning

Du skal oprette arrayet key og sørge for, at ZLE går ind i applikationstilstand for at kunne bruge følgende instruktioner; se #Tastebindinger.

For at aktivere historiesøgning tilføjes disse linjer til .zshrc filen:

~/.zshrc 
autoload -Uz up-line-or-beginning-search down-line-or-beginning-searchzle -N up-line-or-beginning-searchzle -N down-line-or-beginning-searchzle -N down-line-or-beginning-search}" ]] && bindkey -- "${key}" up-line-or-beginning-search}" ]] && bindkey -- "${key}}" down-line-or-beginning-search 

Derved vises kun de tidligere kommandoer, der passer til den aktuelle linje op til den aktuelle markørposition, når der trykkes på Up eller Down tasterne.

Shift, Alt, Ctrl og Meta-modifikatorer

xterm-kompatible terminaler kan bruge udvidede tastedefinitioner fra user_caps(5). Disse er kombinationer af Shift, Alt, Ctrl og Meta sammen med Up, Down, Left, Right, PageUp, PageDown, Home, End eller Del. Se zkbd-kilden for at få en liste over anbefalede navne for modificeringstasterne og tastekombinationer.

For eksempel for Ctrl+Left til at gå til begyndelsen af det foregående ord og Ctrl+Right til at gå til begyndelsen af det næste ord:

~/.zshrc 
key="${terminfo}"key="${terminfo}"}"" ]] && bindkey -- "${key}" backward-word}" ]] && bindkey -- "${key}" forward-word 

Prompts

Zsh tilbyder mulighederne for at bruge et prompt-tema eller, for brugere, der er utilfredse med temaerne (eller ønsker at udvide deres anvendelighed), muligheden for at bygge en brugerdefineret prompt.

Prompttemaer

Prompttemaer er en hurtig og nem måde at opsætte en farvet prompt i Zsh på. Se zshcontrib(1) § PROMPT THEMES for oplysninger om prompt-temaer og hvordan du skriver dit eget tema.

For at bruge et tema skal du sørge for, at prompt-temasystemet er indstillet til autoload i .zshrc. Dette kan gøres ved at tilføje disse linjer til:

~/.zshrc
autoload -Uz promptinitpromptinit 

De tilgængelige prompt-temaer vises ved at køre kommandoen:

$ prompt -l

For at bruge walters-temaet skal du f.eks. indtaste:

$ prompt walters

For at få vist alle tilgængelige temaer, skal du bruge denne kommando:

$ prompt -p
Manuel installation af prompt-temaer

Det er muligt at installere temaer manuelt uden eksterne konfigurationshåndteringsværktøjer. For en lokal installation skal du først oprette en mappe og tilføje den til arrayet fpath, f.eks.:

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

Opret nu et symbolsk link til din temafil i denne mappe:

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

Hvis du i stedet ønsker at installere et tema globalt, gør du:

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

Nu skulle du kunne aktivere det ved hjælp af:

$ prompt mytheme

Hvis alt fungerer, kan du redigere din .zshrc i overensstemmelse hermed.

Tilføjelse af prompt-temaer uden en separat fil for hvert enkelt

Ud over at tilføje et prompt-tema via sin egen fil, er det muligt at tilføje temaer fra en anden fil (som din .zshrc), f.eks:

~/.zshrc
# Indlæs promptinitautoload -Uz promptinit && promptinit# Definer temaetprompt_mytheme_setup() { PS1="%~%#"}# Tilføj temaet til promptsysprompt_themes+=( mytheme )# Indlæs temaetprompt mytheme

Krystet prompt

Tango-view-fullscreen.pngDenne artikel eller afsnit har brug for udvidelse.Tango-view-fullscreen.png

Årsag: Tilføj et simpelt farveløst PROMPT eksempel. (Diskuteres i Talk:Zsh#)

Ud over en primær venstrevendt prompt PS1 (PROMPT, prompt), der er fælles for alle shells, understøtter Zsh også en højrevendt prompt RPS1 (RPROMPT). Det er disse to variabler, som du ønsker at indstille til en brugerdefineret værdi.

Andre prompter til særlige formål, såsom PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) og SPROMPT, er forklaret i zshparam(1) § PARAMETRE BRUGT AF SKALEN.

Alle prompter kan tilpasses med prompt-eskap. De tilgængelige prompt escapes er angivet i zshmisc(1) § EXPANSION OF PROMPT SEQUENCES.

Colors

Zsh indstiller farver anderledes end Bash, du behøver ikke at bruge indviklede ANSI escape-sekvenser eller terminalfunktioner fra terminfo(5). Zsh tilbyder praktiske prompt-eskapes til at indstille forgrundsfarven, baggrundsfarven og andre visuelle effekter; se zshmisc(1) § Visuelle effekter for en liste over dem og deres beskrivelser.

Farver kan angives ved hjælp af et decimalt heltal, navnet på en af de otte mest almindeligt understøttede farver eller som et # efterfulgt af en RGB-triplet i hexadecimalt format. Se beskrivelsen af fg=colour i zshzle(1) § CHARACTER HIGHLIGHTING for flere detaljer.

De fleste terminaler understøtter følgende farver ved navn:

Navn Nummer
black 0
red 1
green 2
yellow 3
blue 4
magenta 5
cyan 6
white 7

Farvetal 0-255 for terminalemulatorer, der er kompatible med xterm 256 farver, kan findes i xterm-256-farvetabel.

Med en korrekt indstillet TERM-miljøvariabel kan terminalens understøttede maksimale antal farver findes fra terminfo(5)-databasen ved hjælp af echoti colors. I tilfælde af 24-bit farver skal du også kontrollere COLORTERM-miljøvariablen med print $COLORTERM. Hvis den returnerer 24bit eller truecolor, så understøtter din terminal 16777216 (224) farver, selv om terminfo viser et mindre antal.

Bemærk:

  • Farverne 0-15 kan variere mellem terminalemulatorer og deres anvendte farveskemaer.
  • Mange terminalemulatorer viser fed med en lysere farve.
Tip:

  • Prompt escapes kan testes med kommandoen print -P "prompt escapes", f.eks:
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • Hvis du bruger 24-bit farver, skal du måske indlæse zsh/nearcolor modulet i terminaler, der ikke understøtter dem. F.eks:
    }" -eq '16777216' ]] || zmodload zsh/nearcolor

    Se zshmodules(1) § THE ZSH/NEARCOLOR MODULE for detaljer om zsh/nearcolor-modulet.

Eksempel

Dette er et eksempel på en tosidet prompt:

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

Og her er hvordan den vises:

brugernavn@host ~ %

For at bruge farver fra intervallet 16-255 og 24-bit ægte farver, kan du bruge tallet fra 0 til 255, der er tildelt den ønskede farve, og dens hexadecimale farvekode:

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=''

Eksempel .zshrc-filer

    • For at få den samme opsætning som de månedlige ISO-udgivelser (som bruger Zsh som standard) skal du installere grml-zsh-config. Den indeholder de mange tweaks og avancerede optimeringer fra grml.
    • https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – grundlæggende opsætning, med dynamisk prompt og vinduestitel/hardinfo.
    • https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc med flere funktioner, sørg for at tjekke kommentarer til den. Bemærkelsesværdige funktioner: bekræftelsesfunktion for at sikre, at brugeren ønsker at køre poweroff, reboot eller hibernate, understøttelse af GIT i prompten (gøres uden vcsinfo), fanefuldførelse med menu, udskrivning af den aktuelle udførte kommando i vinduets titellinje og mere.

    Se dotfiles#User repositories for mere.

    Tips og tricks

    Autostart X ved login

    Se xinit#Autostart X ved login.

    Gendan terminalindstillinger efter at et program afsluttes unormalt

    Mange programmer ændrer terminaltilstanden, og ofte gendanner de ikke terminalindstillingerne ved unormal afslutning (f.eks. ved nedbrud eller ved at støde på SIGINT).

    Dette kan typisk løses ved at udføre reset(1):

$ reset

De følgende afsnit beskriver måder at undgå behovet for at nulstille terminalen manuelt.

Ttyctl-kommandoen

Ttyctl-kommandoen kan bruges til at “fryse/affryse” terminalen. Hvis du vil fryse den interaktive shell ved start, skal du bruge følgende:

~/.zshrc 
ttyctl -f 

Indstilling af terminalen med escape-sekvenser

Alternate linedrawing-tegnsæt kan ødelægge terminalen på en måde, som ttyctl ikke kan forhindre.

En simpel løsning er at udstede de escape-sekvenser, der nulstiller terminalen fra precmd hook-funktionen, så de udføres hver gang, før prompten tegnes. For eksempel ved at bruge flugtsekvensen \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> for at gå tilbage til en besøgt mappe. Brug autokomplettering efter bindestregen. Dette viser sig at være meget praktisk, hvis du bruger autokompletteringsmenuen.

Bemærk: Dette vil ikke fungere, hvis du har mere end én zsh-session åben og forsøger at cd, på grund af en konflikt i begge sessioner, der skriver til den samme fil.

cdr

cdr giver dig mulighed for at ændre arbejdsmappen til en tidligere arbejdsmappe fra en liste, der vedligeholdes automatisk. Den gemmer alle poster i filer, der vedligeholdes på tværs af sessioner og (som standard) mellem terminalemulatorer i den aktuelle session.

Se zshcontrib(1) § REMEMBERING RECENT DIRECTORIES for opsætningsinstruktioner.

Help-kommando

I modsætning til Bash aktiverer Zsh ikke en indbygget help-kommando, i stedet tilbyder den run-help. Som standard er run-help et alias til man, den kan enten udføres manuelt ved at sætte den foran en kommando, eller den kan påkaldes for den aktuelt indtastede kommando med tastaturgenvejene Alt+h eller Esc h.

Da den som standard blot er et alias til man, vil den kun virke på eksterne kommandoer. For at forbedre dens funktionalitet, så den virker på shell-buildins og andre shell-funktioner, skal du bruge run-help-funktionen. Se zshcontrib(1) for flere oplysninger om run-help og dens hjælpefunktioner.

Først indlæses run-help-funktionen og derefter fjernes det eksisterende run-help-alias. For nemheds skyld kan help have et alias til run-help. Tilføj f.eks. følgende til din zshrc:

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

Assistentfunktioner skal aktiveres separat:

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

For eksempel vil kommandoen run-help git commit nu åbne man-siden git-commit(1) i stedet for git(1).

Persistent rehash

Typisk vil compinit ikke automatisk finde nye eksekverbare filer i $PATH. Når du f.eks. har installeret en ny pakke, vil filerne i /usr/bin/ ikke straks eller automatisk blive inkluderet i færdiggørelsen. For at få disse nye eksekverbare filer medtaget, skal man således køre:

$ rehash

Denne "rehash" kan indstilles til at ske automatisk. Du skal blot inkludere følgende i din zshrc:

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

On-demand rehash

Som ovenfor, men pacman kan konfigureres med hooks til automatisk at anmode om en rehash, hvilket ikke medfører den ydelsesmæssige straf ved konstant rehashing som ovenfor. For at aktivere dette skal du oprette en /etc/pacman.d/hooks-mappe og en /var/cache/zsh-mappe og derefter oprette en hook-fil:

/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

Dette holder ændringsdatoen for filen /var/cache/zsh/pacman i overensstemmelse med den sidste gang, en pakke blev installeret, opgraderet eller fjernet. Derefter skal zsh overtales til at genindlæse sin egen kommandocache, når den bliver forældet, ved at tilføje til din ~/.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 )); then rehash zshcache_time="$paccache_time" fi fi fi}add-zsh-hook -Uz precmd rehash_precmd

Hvis precmd hook udløses, før /var/cache/zsh/pacman er opdateret, virker færdiggørelsen muligvis ikke, før en ny prompt er igangsat. Det bør være tilstrækkeligt at køre en tom kommando, f.eks. ved at trykke på enter.

Alternativ on-demand rehash ved hjælp af SIGUSR1

Som ovenfor, men hook-filen ser således ud:

/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
Advarsel: Dette sender SIGUSR1 til alle kørende zsh-instanser. Bemærk, at standardadfærden for SIGUSR1 er terminate, så når du først konfigurerer dette, vil alle kørende zsh-instanser for alle brugere (herunder login-shells) blive termineret, hvis de ikke har fundet nedenstående trap.
~/.zshrc 
TRAPUSR1() { rehash }

Funktions-trappen ovenfor kan erstattes med en liste-trap trap 'rehash' USR1. Se zshmisc(1) § Trap-funktioner for forskelle mellem typer af traps.

Denne metode vil straks rehash alle zsh instanser, hvilket fjerner behovet for at trykke på enter for at udløse precmd.

Bind tast til ncurses-program

Bind et ncurses-program til et tastetryk, men det vil ikke acceptere interaktion. Brug BUFFER-variablen for at få det til at virke. Følgende eksempel lader brugere åbne ncmpcpp ved hjælp af Alt+\:

~/.zshrc 
ncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;\a. For eksempel: 
$ print -n '\e]2;My xterm title\a'

vil sætte titlen til

My xterm title

En enkel måde at få en dynamisk titel på er at sætte titlen i hook-funktionerne precmd og preexec. Se zshmisc(1) § Hook-funktioner for en liste over tilgængelige hook-funktioner og deres beskrivelser.

Gennem at bruge print -P kan du desuden drage fordel af Zsh's prompt-eskapes.

Tip:

  • Titeludskrivning kan deles op i flere kommandoer, så længe de er sekventielle.
  • GNU Screen sender xterm-titlen til hardstatus (%h). Hvis du ønsker at bruge Screen's string escapes (f.eks. for farver), skal du indstille hardstatus med flugtsekvensen \e_\e\. Hvis der ellers anvendes string escapes i \e]2;\a, vil terminalemulatoren få en forvrænget titel, fordi den ikke er i stand til at fortolke Skærmens string escapes.
Bemærk:

  • Brug ikke -P-indstillingen af print, når du udskriver variabler, for at forhindre, at de bliver analyseret som prompt escapes.
  • Brug parameterudvidelsesflaget q ved udskrivning af variabler for at forhindre, at de analyseres som escape-sekvenser.
~/.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\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\e\\\"; }}if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz preexec xterm_title_preexecfi

Terminalemulatorfanebladets titel

Nogle terminalemulatorer og multiplexere understøtter indstillingen af fanebladets titel. Escape-sekvenserne afhænger af terminalen:

Terminal Escape-sekvenser Beskrivelse
GNU-skærm \ek\e\ Skærmens vinduestitel (%t).
Konsol \e]30;\a Konsollens fanetitel.

Detektion af shellmiljø

Se et opslagsværk om detektion af shellmiljø for test til at detektere shellmiljøet. Dette omfatter login/interaktiv shell, Xorg-session, TTY- og SSH-session.

/dev/tcp svarer til: ztcp

Brug zsh/net/tcp-modulet:

$ zmodload zsh/net/tcp

Du kan nu oprette TCP-forbindelser:

$ ztcp example.com 80

Kortvej til at afslutte shell på delvis kommandolinje

Som standard vil Ctrl+d ikke lukke din shell, hvis kommandolinjen er fyldt, dette retter det:

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

Tredjepartsudvidelser

Konfigurationsrammer

Bemærk: Rammer introducerer et abstraktions- og kompleksitetsniveau. De kan indføre, og gør det ofte, udefineret adfærd. I tilfælde af brud på en shell bør det første fejlfindingstrin være at vende tilbage til den almindelige shell.
  • oh-my-zsh – En populær, fællesskabsdrevet ramme til administration af din Zsh-konfiguration. Det leveres med et væld af nyttige funktioner, hjælpere, plugins, temaer.

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

  • Prezto – En konfigurationsramme for Zsh. Det leveres med moduler, der beriger kommandolinjeinterfacemiljøet med fornuftige standardindstillinger, aliaser, funktioner, automatisk udfyldelse og prompt-temaer.

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

  • ZIM – En konfigurationsramme med lynhurtig hastighed og modulære udvidelser. Zim er meget nem at tilpasse og leveres med et rigt sæt moduler og funktioner uden at gå på kompromis med hastighed eller funktionalitet.

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

Plugin managers

  • Antibody – En præstationsfokuseret plugin manager i lighed med Antigen.

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

  • zinit (tidligere “zplugin”) – Fleksibel Zsh plugin manager med ren fpath, rapporter, completion management, turbo mode

|| zsh-zplugin-gitAUR

  • Antigen – En plugin manager for Zsh, inspireret af oh-my-zsh og vundle. ABANDONED

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

  • zgen – En let og enkel plugin-manager til Zsh. ABANDONED

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

  • zplug – En næste generation af plugin-manager til Zsh. ABANDONED

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

Fish-lignende syntaksmarkering og autosuggestioner

Fish giver meget kraftfuld syntaksmarkering og autosuggestioner i skallen. For at bruge begge dele i Zsh kan du installere zsh-syntax-highlighting, zsh-autosuggestions og endelig kilde en eller begge de medfølgende scripts fra din zshrc:

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

“Command not found”-håndteringen

Tango-go-next.pngDenne artikel eller afsnit er en kandidat til at blive flyttet til #Tips and tricks.Tango-go-next.png

Noter: Den brugerdefinerede funktion, der bruger pacman -F, er ikke en “udvidelse fra tredjepart”. Kun pkgfile-ting hører hjemme i dette afsnit. (Diskuteres i Talk:Zsh#)

pacman -F “command not found” handler

pacman indeholder funktionalitet til at søge efter pakker, der indeholder en fil. Følgende kommando-ikke-fundet-håndtering vil bruge pacman direkte til at søge efter matchende pakker, når der udføres en ukendt kommando.

~/.zshrc 
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: kommando ikke fundet: %s' "$cmd" # print 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:\n' "$cmd "local res=() repo pakke version filefor file i "$files"; dores=("${(0)file}")repo="$res "package="$res "version="$res "file="$res "printf ' %s/%s %s %s: /%s\n' "$repo" "$package" "$version" "$file "doneelseprintf '\n'fireturn 127} 
Bemærk: Fildatabasen i pacman er adskilt fra den normale synkroniseringsdatabase, og den skal hentes ved hjælp af pacman -Fy. Se pacman#Search for a package that contains a specific file for detaljer.

pkgfile "command not found" handler

pkgfile indeholder en Zsh-scriptfil, der indeholder en command_not_found_handler funktion, der automatisk vil søge i pkgfile-databasen, når der indtastes en ikke-genkendt kommando.

Du skal kildekode scriptet for at aktivere det. For eksempel:

~/.zshrc 
source /usr/share/doc/pkgfile/command-not-found.zsh 
Bemærk: Det kan være nødvendigt at opdatere pkgfile-databasen, før dette vil fungere. Se pkgfile#Installation for detaljer.

Afinstallation

Ændre standardskal før fjernelse af zsh-pakken.

Advarsel: Hvis nedenstående procedure ikke følges, kan det medføre, at brugere ikke længere har adgang til en fungerende shell.

Kør følgende kommando:

$ chsh -s /bin/bash user

Brug den for alle brugere, der har zsh indstillet som deres login shell (herunder root, hvis det er nødvendigt). Når du er færdig, kan zsh-pakken fjernes.

Alternativt kan du ændre standardskal tilbage til Bash ved at redigere /etc/passwd som root.

Advarsel: Det anbefales kraftigt at bruge vipw(8), når du redigerer /etc/passwd, da det hjælper med at forhindre ugyldige indtastninger og/eller syntaksfejl.

For eksempel kan du ændre følgende:

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

til dette:

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

See also

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.