Zsh är ett kraftfullt skal som fungerar både som ett interaktivt skal och som en tolk för skriptspråk. Samtidigt som det är kompatibelt med POSIX sh (inte som standard, endast om emulate sh
utfärdas), erbjuder det fördelar som förbättrad tabkomplettering och globbing.
The Zsh FAQ erbjuder fler anledningar till att använda Zsh.
Installation
För att börja kanske användarna vill se vilket skal som för tillfället används:
$ echo $SHELL
Installera zsh-paketet. För ytterligare kompletteringsdefinitioner, installera även paketet zsh-completions.
Initiell konfiguration
Säkerställ att Zsh har installerats korrekt genom att köra följande i en terminal:
$ zsh
Du bör nu få se zsh-newuser-install, som kommer att guida dig genom en grundläggande konfiguration. Om du vill hoppa över detta trycker du på q
. Om du inte såg det kan du anropa det manuellt med:
$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Måttet att göra Zsh till ditt standardskal
Ändra ditt skal till /usr/bin/zsh
. Se Kommandoradsskal#Ändra ditt standardskal.
~/.bashrc
till ~/.zshrc
(t.ex. prompten och alias) och från ~/.bash_profile
till ~/.zprofile
(t.ex. koden som startar X Window System).Start/avstängningsfiler
- Se A User’s Guide to the Z-Shell för en förklaring om interaktiva och inloggningsskalor och vad du ska lägga in i dina startfiler.
- Du kan överväga att implementera en standardsökväg för dina Zsh-konfigurationsfiler.
- Om
$ZDOTDIR
inte är inställt, används$HOME
istället. - Om alternativet
RCS
inte är inställt i någon av filerna kommer inga konfigurationsfiler att läsas efter den filen. - Om alternativet
GLOBAL_RCS
inte är inställt i någon av filerna kommer inga globala konfigurationsfiler (/etc/zsh/*
) att läsas efter den filen.
När Zsh startar kommer Zsh att läsa kommandon från följande filer i den här ordningen som standard, förutsatt att de finns.
-
/etc/zsh/zshenv
Används för att ställa in miljövariabler för alla användare; den bör inte innehålla kommandon som producerar utdata eller förutsätter att skalet är anslutet till en TTY. När denna fil finns kommer den alltid att läsas, detta kan inte åsidosättas. -
$ZDOTDIR/.zshenv
Används för att ställa in miljövariabler för alla användare; den bör inte innehålla kommandon som ger utdata eller förutsätter att skalet är anslutet till en TTY. När denna fil finns kommer den alltid att läsas. -
/etc/zsh/zprofile
Används för att utföra kommandon vid start för alla användare, kommer att läsas när den startas som ett inloggningsskal. Observera att på Arch Linux innehåller den som standard en rad med källkod/etc/profile
. Se varningen nedan innan du vill ta bort den!-
/etc/profile
Den här filen bör hämtas av alla POSIX sh-kompatibla skal vid inloggning: den ställer in$PATH
och andra miljövariabler och programspecifika (/etc/profile.d/*.sh
) inställningar vid inloggning.
-
-
$ZDOTDIR/.zprofile
Används för att exekvera användarens kommandon vid start, kommer att läsas när du startar som ett inloggningsskal. Används vanligtvis för att autostarta grafiska sessioner och för att ställa in miljövariabler för hela sessionen. -
/etc/zsh/zshrc
Används för att ställa in interaktiva skalkonfigurationer och utföra kommandon för alla användare, kommer att läsas när det startas som ett interaktivt skal. -
$ZDOTDIR/.zshrc
Används för att ställa in användarens interaktiva skalkonfiguration och utföra kommandon, kommer att läsas när det startas som ett interaktivt skal. -
/etc/zsh/zlogin
Används för att exekvera kommandon för alla användare i slutet av det inledande förloppet, kommer att läsas när man startar som ett inloggningsskal. -
$ZDOTDIR/.zlogin
Används för att exekvera användarens kommandon i slutet av det inledande förloppet, kommer att läsas när man startar som ett inloggningsskal. Används vanligtvis för att autostarta kommandoradsverktyg. Bör inte användas för autostart av grafiska sessioner, eftersom sessionen då kan innehålla konfiguration som endast är avsedd för ett interaktivt skal. -
$ZDOTDIR/.zlogout
Används för att utföra kommandon när ett inloggningsskal avslutas. -
/etc/zsh/zlogout
Används för att utföra kommandon för alla användare när ett inloggningsskal avslutas.
Se den grafiska representationen.
-
$HOME/.profile
är inte en del av Zsh:s startfiler och hämtas inte av Zsh såvida inte Zsh anropas somsh
ellerksh
och startas som ett inloggningsskal. För mer information om kompatibilitetslägena sh och ksh se zsh(1) § COMPATIBILITY. - Sökvägarna som används i Arch’s zsh-paket skiljer sig från de standardvägar som används i man-sidorna (FS#48992).
/etc/zsh/zprofile
, annars kommer det att bryta integriteten hos andra paket som tillhandahåller vissa skript i /etc/profile.d/
.Konfigurera Zsh
Och även om Zsh kan användas direkt ur paketet är det nästan säkert inte konfigurerat på det sätt som de flesta användare skulle vilja använda det. Men på grund av den stora mängden anpassningar som finns tillgängliga i Zsh kan konfigurering av Zsh vara en skrämmande och tidskrävande upplevelse.
Enkla .zshrc
Underst finns en exempelkonfigurationsfil. Den ger en hygglig uppsättning standardalternativ samt ger exempel på många sätt som Zsh kan anpassas på. För att använda den här konfigurationen kan du spara den som en fil med namnet .zshrc
.
source ~/.zshrc
.Här är en enkel .zshrc
:
~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Detta kommer att ställa in standardprompten till walters-tematprompt walters
Se #Prompt-teman för mer information om prompt-temasystemet.
Konfigurera $PATH
Zsh binder PATH
-variabeln till en path
-array. De synkroniseras automatiskt. Detta gör att vi enkelt kan manipulera PATH
genom att helt enkelt ändra arrayen. Se A User’s Guide to the Z-Shell för mer information.
Raden typeset -U PATH path
, där -U
står för unik, instruerar skalet att kasta bort dubbletter från både $PATH
och $path
:
~/.zshenv
typeset -U PATH pathpath=("$HOME/.local/bin" /other/things/in/path "$path")export PATH
Kommandokomplettering
Den kanske mest övertygande egenskapen i Zsh är dess avancerade möjligheter till automatisk komplettering. Aktivera åtminstone autokomplettering i .zshrc
. För att aktivera autokomplettering lägger du till följande i din ~/.zshrc
:
~/.zshrcautoload -Uz compinitcompinitOvanstående konfiguration inkluderar komplettering av värdnamn för ssh/scp/sftp, men för att den här funktionen ska fungera får användarna inte aktivera ssh:s hashing av värdnamn (i.dvs. alternativ
HashKnownHosts
i konfigurationen av ssh-klienten).För autokomplettering med ett piltangentstyrt gränssnitt, lägg till följande i:
~/.zshrczstyle ':completion:*' meny selectFör att aktivera menyn trycker du på
Tab
två gånger.För autokomplettering av kommandoradsväxlar för alias lägger du till följande i:
~/.zshrcsetopt COMPLETE_ALIASESFör att aktivera autokomplettering av privilegierade miljöer i privilegierade kommandon (t.ex.t.ex. om du slutför ett kommando som börjar med sudo, kommer kompletteringsskripten också att försöka fastställa dina kompletteringar med sudo), inkludera:
~/.zshrczstyle ':completion::complete:*' gain-privileges 1Varning: Detta kommer att låta Zsh completion scripts köra kommandon med sudo privilegier. Du bör inte aktivera detta om du använder otillförlitliga autokompletteringsskript.Obs: Denna speciella typ av kontextmedveten komplettering är endast tillgänglig för ett litet antal kommandon.Nyckelbindningar
Zsh använder inte readline, utan använder istället sin egen och mer kraftfulla Zsh Line Editor (ZLE). Den läser inte
/etc/inputrc
eller~/.inputrc
. Läs A closer look at the zsh line editor and creating custom widgets för en introduktion till ZLE-konfiguration.ZLE har ett Emacs-läge och ett vi-läge. Om en av miljövariablerna
VISUAL
ellerEDITOR
innehåller strängenvi
kommer vi-läget att användas, annars kommer Emacs-läget att användas som standard. Ställ in läget explicit medbindkey -e
ellerbindkey -v
för Emacs-läge respektive vi-läge.Tangentbindningar tilldelas genom att en escape-sekvens som matchar ett tangenttryckande mappas till en ZLE-widget. De tillgängliga widgetarna, med beskrivningar av deras åtgärder och deras standardtangentbindningar, listas i zshzle(1) § STANDARD WIDGETS och zshcontrib(1) § ZLE FUNKTIONER.
Det rekommenderade sättet att ställa in tangentbindningar i Zsh är att använda strängkapaciteter från terminfo(5). Till exempel:
~/.zshrc# skapa en zkbd-kompatibel hash;# för att lägga till andra nycklar till denna 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}"# ställ in nyckeln i enlighet med detta}" ]] && 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# Slutligen, se till att terminalen är i applikationsläge när zle är# aktiv. Endast då är värdena från $terminfo giltiga.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ökning
Du måste konfigurera arrayen
key
och se till att ZLE går in i tillämpningsläge för att kunna använda följande instruktioner; se #Tangentbindningar.För att aktivera historiesökning lägg till dessa rader i
.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-search}" ]] && bindkey -- "${key}" up-line-or-beginning-search}" ]] && bindkey -- "${key}" down-line-or-beginning-searchMed detta visas endast de tidigare kommandon som matchar den aktuella raden fram till den aktuella markörpositionen när
Up
ellerDown
tangenterna trycks in.Shift, Alt, Ctrl och Meta-modifierare
xterm-kompatibla terminaler kan använda utökade tangentdefinitioner från user_caps(5). Dessa är kombinationer av
Shift
,Alt
,Ctrl
ochMeta
tillsammans medUp
,Down
,Left
,Right
,PageUp
,PageDown
,Home
,End
ellerDel
. Se källan zkbd för en lista över rekommenderade namn för modifieringstangenter och tangentkombinationer.Till exempel, för
Ctrl+Left
för att flytta till början av föregående ord ochCtrl+Right
för att flytta till början av nästa ord:~/.zshrckey="${terminfo}"key="${terminfo}"}"" ]] && bindkey -- "${key}" backward-word}" ]] && bindkey -- "${key}" forward-wordPrompts
Zsh erbjuder alternativen att använda ett prompt-tema eller, för användare som är missnöjda med temana (eller vill utöka deras användbarhet), möjligheten att bygga en egen prompt.
Prompt-teman
Prompt-teman är ett snabbt och enkelt sätt att sätta upp en färgad prompt i Zsh. Se zshcontrib(1) § PROMPT THEMES för information om promptteman och hur du skriver ditt eget tema.
För att använda ett tema måste du se till att prompttemasystemet är inställt på autoload i
.zshrc
. Detta kan göras genom att lägga till dessa rader i:~/.zshrcautoload -Uz promptinitpromptinitFör att få en lista över tillgängliga prompt-teman körs kommandot:
$ prompt -lFör att använda
walters
-temat skriver du t.ex:$ prompt waltersFör att förhandsgranska alla tillgängliga teman använder du det här kommandot:
$ prompt -pManuellt installera promptteman
Det är möjligt att installera teman manuellt, utan externa konfigurationshanteringsverktyg. För en lokal installation skapar du först en mapp och lägger till den i arrayen
fpath
, t.ex.:$ mkdir ~/.zprompts$ fpath=("$HOME/.zprompts" "$fpath")Skapa nu en symbolisk länk till din temafil i den här mappen:
$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setupOm du istället vill installera ett tema globalt gör du så här:
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setupNu bör du kunna aktivera det med hjälp av:
$ prompt mythemeOm allt fungerar kan du redigera din
.zshrc
i enlighet med detta.Lägga till prompt-teman utan en separat fil för var och en
Inom att lägga till ett prompt-tema via en egen fil är det möjligt att lägga till teman från en annan fil (som din
.zshrc
), t.ex.:~/.zshrc# Ladda promptinitautoload -Uz promptinit && promptinit# Definiera tematprompt_mytheme_setup() { PS1="%~%# "}# Lägg till temat i promptsysprompt_themes+=( mytheme )# Ladda tematprompt mythemeAnpassad prompt
Den här artikeln eller det här avsnittet behöver utökas.
Anledning: Lägg till ett enkelt färglöstPROMPT
exempel. (Diskutera i Talk:Zsh#)Utöver en primär vänstersidig prompt
PS1
(PROMPT
,prompt
) som är gemensam för alla shells har Zsh även stöd för en högersidig promptRPS1
(RPROMPT
). Det är dessa två variabler som du vill ställa in till ett anpassat värde.Andra prompter för speciella ändamål, såsom
PS2
(PROMPT2
),PS3
(PROMPT3
),PS4
(PROMPT4
),RPS1
(RPROMPT
),RPS2
(RPROMPT2
) ochSPROMPT
, förklaras i zshparam(1) § PARAMETERS USED BY THE SHELL.Alla prompter kan anpassas med prompt escapes. De tillgängliga promptflyktsekvenserna listas i zshmisc(1) § EXPANSION OF PROMPT SEQUENCES.
Colors
Zsh ställer in färger på ett annat sätt än Bash, du behöver inte använda invecklade ANSI-flyktsekvenser eller terminalfunktioner från terminfo(5). Zsh tillhandahåller bekväma prompt-eskapeer för att ställa in förgrundsfärg, bakgrundsfärg och andra visuella effekter; se zshmisc(1) § Visuella effekter för en lista över dem och deras beskrivningar.
Färger kan specificeras med hjälp av ett decimalt heltal, namnet på en av de åtta mest använda färgerna eller som ett # följt av en RGB-triplett i hexadecimalt format. Se beskrivningen av fg=colour i zshzle(1) § CHARACTER HIGHLIGHTING för mer information.
De flesta terminaler har stöd för följande färger:
Namn | Nummer |
---|---|
black |
0 |
red |
1 |
green |
2 |
yellow |
3 |
blue |
4 |
magenta |
5 |
cyan |
6 |
white |
7 |
Färgnummer 0-255 för terminalemulatorer som är kompatibla med xterm 256 färger finns i xterm-256-färgdiagram.
Med en korrekt inställd TERM-miljövariabel kan terminalens stödda maximala antal färger hittas från databasen terminfo(5) med hjälp av echoti colors
. När det gäller 24-bitarsfärger, kontrollera även miljövariabeln COLORTERM med print $COLORTERM
. Om den returnerar 24bit
eller truecolor
har din terminal stöd för 16777216 (224) färger även om terminfo visar ett mindre antal.
- Färgerna 0-15 kan skilja sig åt mellan terminalemulatorer och deras använda färgscheman.
- Många terminalemulatorer visar fetstil med en ljusare färg.
- Prompt escapes kan testas med kommandot
print -P "prompt escapes"
, t.ex:$ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
- Om du använder 24-bitarsfärger kanske du vill ladda modulen
zsh/nearcolor
i terminaler som inte stöder dem. T.ex:}" -eq '16777216' ]] || zmodload zsh/nearcolor
Se zshmodules(1) § THE ZSH/NEARCOLOR MODULE för detaljer om
zsh/nearcolor
-modulen.
Exempel
Det här är ett exempel på en dubbelsidig prompt:
PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# 'RPROMPT=''
Och så här kommer den att visas:
För att använda färger från intervallet 16-255 och 24-bitars äkta färg kan du använda siffran från 0 till 255 som tilldelats den önskade färgen respektive dess hexadecimala färgkod:
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=''
Exempel .zshrc-filer
- För att få samma inställning som de månatliga ISO-utgåvorna (som använder Zsh som standard) installerar du grml-zsh-config. Den innehåller de många finjusteringar och avancerade optimeringar från grml.
- https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – grundinställning, med dynamisk prompt och fönstertitel/hardinfo.
- https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc med flera funktioner, se till att kolla in kommentarerna till den. Noterbara funktioner: bekräftelsefunktion för att säkerställa att användaren vill köra poweroff, reboot eller hibernate, stöd för GIT i prompten (görs utan vcsinfo), tabkomplettering med meny, utskrift av aktuellt exekverat kommando i fönstrets titellista med mera.
Se dotfiles#User repositories för mer.
Tips och tricks
Autostart av X vid inloggning
Se xinit#Autostart av X vid inloggning.
Restorera terminalinställningar efter att ett program avslutas onormalt
Många program ändrar terminaltillståndet och ofta återställs inte terminalinställningarna när de avslutas onormalt (t.ex. när de kraschar eller stöter på SIGINT).
Detta kan vanligtvis lösas genom att utföra reset(1):
$ reset
De följande avsnitten beskriver sätt att undvika behovet av att manuellt återställa terminalen.
Ttyctl-kommandot
Ttyctl-kommandot kan användas för att ”frysa/frysa upp” terminalen. För att frysa det interaktiva skalet vid start använder du följande:
~/.zshrc
ttyctl -f
Inställer terminalen med escape-sekvenser
Alternativa linjeteckensättningar kan ställa till det för terminalen på ett sätt som ttyctl inte kan förhindra.
En enkel lösning är att ge ut escape-sekvenserna som återställer terminalen från precmd
hook-funktionen, så att de exekveras varje gång innan prompten ritas. Använd till exempel escape-sekvensen \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>
för att gå tillbaka till en besökt mapp. Använd autokomplettering efter bindestrecket. Detta visar sig vara mycket praktiskt om du använder autokompletteringsmenyn.
cd
, på grund av en konflikt i att båda sessionerna skriver till samma fil. cdr
cdr gör det möjligt för dig att ändra arbetskatalogen till en tidigare arbetskatalog från en lista som upprätthålls automatiskt. Den lagrar alla poster i filer som upprätthålls mellan sessioner och (som standard) mellan terminalemulatorer i den aktuella sessionen.
Se zshcontrib(1) § REMEMBERING RECENT DIRECTORIES för inställningsinstruktioner.
Hjälp-kommando
Till skillnad från Bash aktiverar inte Zsh något inbyggt help
-kommando, istället tillhandahåller den run-help
. Som standard är run-help
ett alias till man
, det kan antingen exekveras manuellt genom att sätta det före ett kommando eller så kan det anropas för det aktuella kommandot med tangentbordsgenvägarna Alt+h
eller Esc
h
.
Då det som standard bara är ett alias till man, kommer det bara att fungera på externa kommandon. För att förbättra dess funktionalitet, så att den fungerar på shell builtins och andra shellfunktioner, måste du använda funktionen run-help
. Se zshcontrib(1) för mer information om run-help
och dess hjälpfunktioner.
Lad först in run-help
-funktionen och ta sedan bort det befintliga run-help
-aliaset. För enkelhetens skull kan help
ha ett alias till run-help
. Lägg till exempel till följande i din zshrc
:
autoload -Uz run-help(( ${+aliases} )) && unalias run-helpalias help=run-help
Assistansfunktioner måste aktiveras separat:
autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn
Till exempel kommer kommandot run-help git commit
nu att öppna man-sidan git-commit(1) i stället för git(1).
Persistent rehash
Typiskt sett kommer compinit inte att hitta nya körbara filer automatiskt i $PATH
. När du till exempel installerar ett nytt paket kommer filerna i /usr/bin/
inte omedelbart eller automatiskt att inkluderas i slutförandet. För att få dessa nya körbara filer inkluderade skulle man alltså köra:
$ rehash
Denna "rehash" kan ställas in så att den sker automatiskt. Inkludera helt enkelt följande i din zshrc
:
~/.zshrc
zstyle ':completion:*' rehash true
On-demand rehash
Som ovan, men pacman kan konfigureras med hooks för att automatiskt begära en rehash
, vilket inte ger upphov till prestandaförlusterna av konstant rehashing som ovan. För att aktivera detta skapar du katalogen /etc/pacman.d/hooks
och en katalog /var/cache/zsh
och skapar sedan 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
Detta håller modifieringsdatumet för filen /var/cache/zsh/pacman
i överensstämmelse med den senaste gången ett paket installerades, uppgraderades eller togs bort. Sedan måste zsh
övertalas att återskapa sin egen kommandocache när den blir inaktuell, genom att lägga till 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
Om precmd
hook utlöses innan /var/cache/zsh/pacman
uppdateras, kan det hända att slutförandet inte fungerar förrän en ny prompt initieras. Att köra ett tomt kommando, t.ex. genom att trycka på enter
, bör vara tillräckligt.
Alternativt on-demand rehash med hjälp av SIGUSR1
Som ovan, men hookfilen ser ut så här:
/etc/pacman.d/hooks/zsh-rehash.hook
Operation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshDepends = procps-ngWhen = PostTransactionExec = /usr/bin/pkill zsh --signal=USR1
zsh
instanser som körs. Observera att standardbeteendet för SIGUSR1 är terminate så när du konfigurerar detta för första gången kommer alla zsh
-instanser som körs av alla användare (inklusive inloggningsskal) att terminera om de inte har fått tag på fällan nedan.~/.zshrcTRAPUSR1() { rehash }Funktionsfällan ovan kan ersättas med en listfälla
trap 'rehash' USR1
. Se zshmisc(1) § Trap Functions för skillnader mellan olika typer av traps.Denna metod kommer att omedelbart
rehash
allazsh
instanser, vilket tar bort behovet av att trycka på enter för att utlösaprecmd
.Bind tangent till ncurses-applikation
Bind en ncurses-applikation till en tangenttryckning, men den accepterar inte interaktion. Använd variabeln
BUFFER
för att få det att fungera. Följande exempel låter användare öppna ncmpcpp med hjälp avAlt+\
:~/.zshrcncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;
\a
. Till exempel:$ print -n '\e]2;My xterm title\a'kommer att ställa in titeln till
My xterm titleEtt enkelt sätt att få en dynamisk titel är att ställa in titeln i krokfunktionerna
precmd
ochpreexec
. Se zshmisc(1) § Hook Functions för en lista över tillgängliga hook-funktioner och deras beskrivningar.Genom att använda
print -P
kan du dessutom dra fördel av Zsh:s prompt escapes.Tips:
- Titelutskrift kan delas upp i flera kommandon så länge de är sekventiella.
- GNU Screen skickar xterm-titeln till hardstatus (
%h
). Om du vill använda Skärmens strängarmeringar (t.ex. för färger) bör du ställa in hardstatus med flyktsekvensen\e_
\e\
. Om strängflyktsätt används i\e]2;
\a
kommer terminalemulatorn annars att få en förvrängd titel på grund av att den inte kan tolka Skärmens strängflyktsätt.Notera:
- Använd inte
-P
-alternativet i- Använd flaggan
q
för parameterutvidgning när du skriver ut variabler för att förhindra att de analyseras 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_preexecfiTerminalemulatorns fliktitel
Vissa terminalemulatorer och multiplexer har stöd för att ställa in titeln på fliken. Escape-sekvenserna beror på terminalen:
Terminal | Escape-sekvenser | Beskrivning |
---|---|---|
GNU Screen | \ek \e\ |
Skärmens fönstertitel (%t ). |
Konsole | \e]30; \a |
Konsolens fliktitel. |
Detektering av skalmiljön
Se ett arkiv om detektering av skalmiljön för tester för att upptäcka skalmiljön. Detta inkluderar inloggning/interaktivt skal, Xorg-session, TTY och SSH-session.
/dev/tcp motsvarighet: ztcp
Använd modulen zsh/net/tcp
:
$ zmodload zsh/net/tcp
Du kan nu upprätta TCP-anslutningar:
$ ztcp example.com 80
Kortslutning för att avsluta skalet på en partiell kommandorad
Som standard stänger Ctrl+d
inte skalet om kommandoraden är fylld, detta åtgärdar detta:
.zshrc
exit_zsh() { exit }zle -N exit_zshbindkey '^D' exit_zsh
Tillägg från tredje part
Konfigurationsramverk
- oh-my-zsh – Ett populärt, gemenskapsdrivet ramverk för att hantera din Zsh-konfiguration. Det levereras tillsammans med ett ton användbara funktioner, hjälpmedel, plugins och teman.
https://github.com/ohmyzsh/ohmyzsh || oh-my-zsh-gitAUR
- Prezto – Ett konfigurationsramverk för Zsh. Det levereras med moduler som berikar kommandoradsgränssnittsmiljön med vettiga standardvärden, alias, funktioner, automatisk komplettering och prompt-teman.
https://github.com/sorin-ionescu/prezto || prezto-gitAUR
- ZIM – Ett konfigurationsramverk med fantastisk snabbhet och modulära tillägg. Zim är mycket lätt att anpassa och kommer med en rik uppsättning moduler och funktioner utan att kompromissa med hastighet eller funktionalitet.
https://github.com/zimfw/zimfw || zsh-zim-gitAUR
Pluginhanterare
- Antibody – En prestandafokuserad pluginhanterare liknande Antigen.
https://github.com/getantibody/antibody || antibodyAUR
- zinit (tidigare ”zplugin”) – Flexibel Zsh-pluginhanterare med ren fpath, rapporter, kompletteringshantering, turboläge
|| zsh-zplugin-gitAUR
- Antigen – En pluginhanterare för Zsh, inspirerad av oh-my-zsh och vundle. ABANDONED
https://github.com/zsh-users/antigen || antigen-gitAUR
- zgen – En lätt och enkel hantering av insticksprogram för Zsh. ABANDONED
https://github.com/tarjoilija/zgen || zgen-gitAUR
- zplug – En nästa generations hantering av insticksprogram för Zsh. ABANDONED
https://github.com/zplug/zplug || zplugAUR
Fish-liknande syntaxmarkering och autosuggestioner
Fish ger mycket kraftfull syntaxmarkering och autosuggestioner för skalet. För att använda båda i Zsh kan du installera zsh-syntax-highlighting, zsh-autosuggestions och slutligen källsortera ett eller båda de tillhandahållna skripten från din zshrc:
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
Hanteraren för ”command not found”
Den här artikeln eller det här avsnittet är en kandidat för att flyttas till #Tips and tricks.
pacman -F
är inte ett ”tillägg från tredje part”. Endast pkgfile-grejer hör hemma i det här avsnittet. (Diskutera i Talk:Zsh#)pacman -F ”command not found” handler
pacman innehåller funktionalitet för att söka efter paket som innehåller en fil. Följande handläggare för ”command not found” använder pacman direkt för att söka efter matchande paket när ett okänt kommando utförs.
~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: command not found: %s' "$cmd" # skriv ut kommandot som inte hittas så fort som möjligt, sök sedan efter paketfiles=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if (( ${{#files} )); thenprintf '\r%s kan finnas i följande paket:\n' "$cmd "local res=() repo package version filefor file in "$files"; dores=("${(0)file}")repo="$res "package="$res "version="$res "file="$res "printf ' %s/%s %s: /%s\n' "$repo" "$package" "$version" "$file "doneelseprintf '\n'fireturn 127}
pacman -Fy
. Se pacman#Sök efter ett paket som innehåller en specifik fil för mer information. pkgfile ”command not found” handler
pkgfile innehåller en Zsh-skriptfil som tillhandahåller en command_not_found_handler
funktion som automatiskt kommer att söka i pkgfile-databasen när man skriver in ett oigenkänt kommando.
Du måste källsortera skriptet för att aktivera det. Till exempel:
~/.zshrc
källa /usr/share/doc/pkgfile/command-not-found.zsh
Avinstallation
Ändra standardskalet innan du tar bort zsh-paketet.
$ chsh -s /bin/bash user
Skynda följande kommando:
$ chsh -s /bin/bash user
Använd det för varje användare som har zsh inställt som sitt inloggningsskal (inklusive root om det behövs). När det är klart kan zsh-paketet tas bort.
Alternativt kan du ändra standardskalet tillbaka till Bash genom att redigera /etc/passwd
som root.
/etc/passwd
eftersom det hjälper till att förhindra ogiltiga poster och/eller syntaxfel.Förändra till exempel följande:
username:x:1000:1000:Full Name,,,:/home/username:/usr/bin/zsh
till detta:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bash