Zsh

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
Observera: Se till att din terminals storlek är minst 72×15 annars kommer zsh-newuser-install inte att köras.

Måttet att göra Zsh till ditt standardskal

Ändra ditt skal till /usr/bin/zsh. Se Kommandoradsskal#Ändra ditt standardskal.

Tips: Om du ersätter bash kan användare vilja flytta en del kod från ~/.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

Tips:

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

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

Obs:

  • $HOME/.profile är inte en del av Zsh:s startfiler och hämtas inte av Zsh såvida inte Zsh anropas som sh eller ksh 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).
Varning: Ta inte bort standardraden i /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.

Tips: Tillämpa ändringarna utan att behöva logga ut och sedan in igen genom att köra 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:

~/.zshrc 
autoload -Uz compinitcompinit 

Ovanstå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:

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

Fö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:

~/.zshrc 
setopt COMPLETE_ALIASES

Fö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:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Varning: 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 eller EDITOR innehåller strängen vi kommer vi-läget att användas, annars kommer Emacs-läget att användas som standard. Ställ in läget explicit med bindkey -e eller bindkey -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_stopfi

Historiesö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:

~/.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}" ]] && bindkey -- "${key}" down-line-or-beginning-search 

Med detta visas endast de tidigare kommandon som matchar den aktuella raden fram till den aktuella markörpositionen när Up eller Down 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 och Meta tillsammans med Up, Down, Left, Right, PageUp, PageDown, Home, End eller Del. 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 och Ctrl+Right för att flytta till början av nästa ord:

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

Prompts

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:

~/.zshrc
autoload -Uz promptinitpromptinit

För att få en lista över tillgängliga prompt-teman körs kommandot:

$ prompt -l

För att använda walters-temat skriver du t.ex:

$ prompt walters

För att förhandsgranska alla tillgängliga teman använder du det här kommandot:

$ prompt -p
Manuellt 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_setup

Om 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_setup

Nu bör du kunna aktivera det med hjälp av:

$ prompt mytheme

Om 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 mytheme 

Anpassad prompt

Tango-view-fullscreen.pngDen här artikeln eller det här avsnittet behöver utökas.Tango-view-fullscreen.png

Anledning: Lägg till ett enkelt färglöst PROMPT 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 prompt RPS1 (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) och SPROMPT, 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.

Obs:

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

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

username@host ~ %

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.

Observera: Detta kommer inte att fungera om du har mer än en zsh-session öppen och försöker 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
Warning: Detta skickar SIGUSR1 till alla 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.
~/.zshrc 
TRAPUSR1() { 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 alla zsh instanser, vilket tar bort behovet av att trycka på enter för att utlösa precmd.

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 av Alt+\:

~/.zshrc
ncmpcppShow() { 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 title

Ett enkelt sätt att få en dynamisk titel är att ställa in titeln i krokfunktionerna precmd och preexec. 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 print när du skriver ut variabler för att förhindra att de tolkas som promptflyktsätt.
  • Använd flaggan q för parameterutvidgning när du skriver ut variabler för att förhindra att de analyseras 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

Terminalemulatorns 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

Observera: Ramverk introducerar en abstraktionsnivå och komplexitet. De kan, och gör det ofta, införa odefinierat beteende. Vid skalbrott bör det första felsökningssteget vara att återgå till det vanliga skalet.

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

Tango-go-next.pngDen här artikeln eller det här avsnittet är en kandidat för att flyttas till #Tips and tricks.Tango-go-next.png

Noter: Den anpassade funktionen som använder 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}
Notera: Pacmans fildatabas är skild från den normala synkroniseringsdatabasen och den måste hämtas med 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
Obs: Pkgfile-databasen kan behöva uppdateras innan detta fungerar. Se pkgfile#Installation för mer information.

Avinstallation

Ändra standardskalet innan du tar bort zsh-paketet.

Varning:

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

Varning: Det rekommenderas starkt att använda vipw(8) när du redigerar /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

Se också

Lämna ett svar

Din e-postadress kommer inte publiceras.