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
Makke Zsh til din standard shell
Opnå din shell til /usr/bin/zsh
. Se Kommando-linje shell#Ændring af din standard shell.
~/.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
- 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.
- 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.
-
$HOME/.profile
er ikke en del af Zsh-startfilerne og er ikke hentet af Zsh, medmindre Zsh påkaldes somsh
ellerksh
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).
/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
.
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
:
~/.zshrcautoload -Uz compinitcompinitOverstå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:
~/.zshrczstyle ':completion:*' menu selectFor 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:
~/.zshrcsetopt COMPLETE_ALIASESFor 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:
~/.zshrczstyle ':completion::complete:*' gain-privileges 1Advarsel: 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
ellerEDITOR
miljøvariablerne indeholder strengenvi
, vil vi-tilstanden blive anvendt; ellers vil den som standard være Emacs-tilstanden. Indstil tilstanden eksplicit medbindkey -e
ellerbindkey -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_stopfiHistoriesø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:~/.zshrcautoload -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-searchDerved vises kun de tidligere kommandoer, der passer til den aktuelle linje op til den aktuelle markørposition, når der trykkes på
Up
ellerDown
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
ogMeta
sammen medUp
,Down
,Left
,Right
,PageUp
,PageDown
,Home
,End
ellerDel
. 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 ogCtrl+Right
til at gå til begyndelsen af det næste ord:~/.zshrckey="${terminfo}"key="${terminfo}"}"" ]] && bindkey -- "${key}" backward-word}" ]] && bindkey -- "${key}" forward-wordPrompts
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:~/.zshrcautoload -Uz promptinitpromptinitDe tilgængelige prompt-temaer vises ved at køre kommandoen:
$ prompt -lFor at bruge
walters
-temaet skal du f.eks. indtaste:$ prompt waltersFor at få vist alle tilgængelige temaer, skal du bruge denne kommando:
$ prompt -pManuel 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_setupHvis du i stedet ønsker at installere et tema globalt, gør du:
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setupNu skulle du kunne aktivere det ved hjælp af:
$ prompt mythemeHvis 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 mythemeKrystet prompt
Denne artikel eller afsnit har brug for udvidelse.
Årsag: Tilføj et simpelt farveløstPROMPT
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 promptRPS1
(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
) ogSPROMPT
, 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.
- Farverne 0-15 kan variere mellem terminalemulatorer og deres anvendte farveskemaer.
- Mange terminalemulatorer viser fed med en lysere farve.
- 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:
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:
~/.zshrcttyctl -fIndstilling 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 -vto 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 atcd
, 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 denrun-help
. Som standard errun-help
et alias tilman
, 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 tastaturgenvejeneAlt+h
ellerEsc
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 omrun-help
og dens hjælpefunktioner.Først indlæses
run-help
-funktionen og derefter fjernes det eksisterenderun-help
-alias. For nemheds skyld kanhelp
have et alias tilrun-help
. Tilføj f.eks. følgende til dinzshrc
:autoload -Uz run-help(( ${+aliases} )) && unalias run-helpalias help=run-helpAssistentfunktioner 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-svnFor 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:$ rehashDenne "rehash" kan indstilles til at ske automatisk. Du skal blot inkludere følgende i din
zshrc
:~/.zshrczstyle ':completion:*' rehash trueOn-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.hookOperation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshWhen = PostTransactionExec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacmanDette holder ændringsdatoen for filen
/var/cache/zsh/pacman
i overensstemmelse med den sidste gang, en pakke blev installeret, opgraderet eller fjernet. Derefter skalzsh
overtales til at genindlæse sin egen kommandocache, når den bliver forældet, ved at tilføje til din~/.zshrc
:~/.zshrczshcache_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_precmdHvis
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.hookOperation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshDepends = procps-ngWhen = PostTransactionExec = /usr/bin/pkill zsh --signal=USR1Advarsel: Dette sender SIGUSR1 til alle kørendezsh
-instanser. Bemærk, at standardadfærden for SIGUSR1 er terminate, så når du først konfigurerer dette, vil alle kørendezsh
-instanser for alle brugere (herunder login-shells) blive termineret, hvis de ikke har fundet nedenstående trap.~/.zshrcTRAPUSR1() { 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
allezsh
instanser, hvilket fjerner behovet for at trykke på enter for at udløseprecmd
.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 afAlt+\
:~/.zshrcncmpcppShow() { 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 titleEn enkel måde at få en dynamisk titel på er at sætte titlen i hook-funktionerne
precmd
ogpreexec
. 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- Brug parameterudvidelsesflaget
q
ved udskrivning af variabler for at forhindre, at de analyseres som escape-sekvenser.~/.zshrcautoload -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_preexecfiTerminalemulatorfanebladets 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_zshTredjepartsudvidelser
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
Denne artikel eller afsnit er en kandidat til at blive flyttet til #Tips and tricks.
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.
~/.zshrccommand_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 afpacman -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:
~/.zshrcsource /usr/share/doc/pkgfile/command-not-found.zshBemæ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 userBrug 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/zshtil dette:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bashSee also