Zsh

Zsh on tehokas komentotulkki, joka toimii sekä interaktiivisena komentotulkkina että skriptikielen tulkkina. Vaikka se on yhteensopiva POSIX sh:n kanssa (ei oletusarvoisesti, vain jos antaa emulate sh), se tarjoaa etuja, kuten paremman tabulaattoritäydennyksen ja globbingin.

Zsh FAQ tarjoaa lisää syitä Zsh:n käyttämiseen.

Asennus

Käyttäjät voivat ennen aloittamista haluta nähdä, mikä komentotulkki on tällä hetkellä käytössä:

$ echo $SHELL

Asenna zsh-paketti. Jos haluat lisää täydennysmäärityksiä, asenna myös zsh-completions-paketti.

Alustava konfigurointi

Varmista, että Zsh on asennettu oikein, suorittamalla terminaalissa seuraava:

$ zsh

Siellä pitäisi nyt näkyä zsh-newuser-install, joka opastaa sinut peruskonfiguroinnin läpi. Jos haluat ohittaa tämän, paina q. Jos et nähnyt sitä, voit kutsua sen manuaalisesti komennolla:

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Huomaa: Varmista, että päätteesi koko on vähintään 72×15, muuten zsh-newuser-install ei toimi.

Zsh:n ottaminen oletusarvoiseksi komentosuorittimeksi

Vaihda komentosuorittimeksi /usr/bin/zsh. Katso komentorivin shell#Esimerkkikuoren muuttaminen.

Vinkki: Jos korvaat bashin, käyttäjät saattavat haluta siirtää osan koodista ~/.bashrc:stä ~/.zshrc:aan (esim. kehotteen ja aliakset) ja ~/.bash_profile:stä ~/.zprofile:ään (esim. koodi, joka käynnistää X-ikkunajärjestelmän).

Käynnistys- ja sammutustiedostot

Vihje:

  • Katso A User’s Guide to the Z-Shell -oppaasta selitykset interaktiivisista ja sisäänkirjautuneista kuorista sekä siitä, mitä kannattaa laittaa käynnistystiedostoihin.
  • Voisit harkita vakiopolun käyttöönottoa Zsh:n konfiguraatiotiedostoja varten.
Huomaa:

  • Jos $ZDOTDIR:tä ei ole määritetty, käytetään sen sijaan $HOME.
  • Jos optio RCS ei ole asetettu missään tiedostossa, mitään konfiguraatiotiedostoja ei lueta kyseisen tiedoston jälkeen.
  • Jos optio GLOBAL_RCS ei ole asetettu missään tiedostossa, mitään globaaleja konfiguraatiotiedostoja (/etc/zsh/*) ei lueta kyseisen tiedoston jälkeen.

Käynnistettäessä Zsh lukee oletusarvoisesti komennot seuraavista tiedostoista seuraavassa järjestyksessä edellyttäen, että ne ovat olemassa.

  • /etc/zsh/zshenv Käytetään ympäristömuuttujien asettamiseen kaikille käyttäjille; se ei saisi sisältää komentoja, jotka tuottavat tulostetta tai olettavat, että komentotulkki on liitetty TTY:hen. Kun tämä tiedosto on olemassa, se luetaan aina, tätä ei voi ohittaa.
  • $ZDOTDIR/.zshenv Käytetään käyttäjän ympäristömuuttujien asettamiseen; se ei saisi sisältää komentoja, jotka tuottavat tulostetta tai olettavat, että komentotulkki on liitetty TTY:hen. Kun tämä tiedosto on olemassa, se luetaan aina.
  • /etc/zsh/zprofile Käytetään komentojen suorittamiseen käynnistyksen yhteydessä kaikille käyttäjille, luetaan käynnistettäessä komentotulkkina. Huomaa, että Arch Linuxissa se sisältää oletuksena yhden rivin, jonka lähteet ovat /etc/profile. Katso alla oleva varoitus, ennen kuin haluat poistaa sen!
    • /etc/profile Tämän tiedoston pitäisi olla lähteenä kaikilla POSIX sh-yhteensopivilla kuorilla sisäänkirjautumisen yhteydessä: se asettaa $PATH ja muut ympäristömuuttujat ja sovelluskohtaiset (/etc/profile.d/*.sh) asetukset sisäänkirjautumisen yhteydessä.
  • $ZDOTDIR/.zprofile Käytetään käyttäjän komentojen suorittamiseen käynnistyksen yhteydessä, luetaan käynnistettäessä sisäänkirjautumisen komentosuorittimena. Käytetään tyypillisesti graafisten istuntojen automaattiseen käynnistykseen ja istunnon laajuisten ympäristömuuttujien asettamiseen.
  • /etc/zsh/zshrc Käytetään interaktiivisen komentotulkin asetusten asettamiseen ja komentojen suorittamiseen kaikille käyttäjille, luetaan käynnistettäessä interaktiivisena komentotulkkina.
  • $ZDOTDIR/.zshrc Käytetään käyttäjän interaktiivisen komentotulkin asetusten asettamiseen ja komentojen suorittamiseen, luetaan käynnistettäessä interaktiivisena komentotulkkina.
  • /etc/zsh/zlogin Käytetään kaikkien käyttäjien komentojen suorittamiseen alkuperäisen etenemisen päättyessä, luetaan käynnistettäessä kirjautumiskuorena.
  • $ZDOTDIR/.zlogin Käytetään käyttäjän komentojen suorittamiseen alkuperäisen etenemisen päättyessä, luetaan käynnistettäessä kirjautumiskuorena. Käytetään tyypillisesti komentorivin apuohjelmien automaattiseen käynnistämiseen. Ei pitäisi käyttää graafisten istuntojen automaattiseen käynnistämiseen, koska tässä vaiheessa istunto saattaa sisältää konfiguraatiota, joka on tarkoitettu vain interaktiiviselle komentotulkille.
  • $ZDOTDIR/.zlogout Käytetään komentojen suorittamiseen, kun sisäänkirjautumiskomentotulkki poistuu.
  • /etc/zsh/zlogout Käytetään kaikkien käyttäjien komentojen suorittamiseen, kun sisäänkirjautumiskomentotulkki poistuu.

Katso graafinen esitys.

Huomautus:

  • $HOME/.profile ei ole osa Zsh:n käynnistystiedostoja eikä Zsh:n käyttämä lähde, ellei Zsh:ta kutsuta nimellä sh tai ksh ja käynnistetä sisäänkirjautumiskuorena. Lisätietoja sh- ja ksh-yhteensopivuustiloista on kohdassa zsh(1) § COMPATIBILITY.
  • Archin zsh-paketissa käytetyt polut poikkeavat man-sivuilla käytetyistä oletuspoluista (FS#48992).
Varoitus: Älä poista oletusarvoista yhtä riviä kohdasta /etc/zsh/zprofile, muuten se rikkoo muiden sellaisten pakettien eheyden, jotka tarjoavat joitain skriptejä kohdasta /etc/profile.d/.

Zsh:n konfigurointi

Vaikka Zsh on käyttökelpoinen suoraan laatikosta, sitä ei lähes varmasti ole määritetty niin kuin useimmat käyttäjät haluaisivat sitä käyttää. Mutta koska Zsh:ssä on paljon muokkausmahdollisuuksia, Zsh:n konfigurointi voi olla pelottava ja aikaa vievä kokemus.

Yksinkertainen .zshrc

Alhaalla on esimerkki konfigurointitiedostosta. Se tarjoaa kunnollisen joukon oletusasetuksia sekä antaa esimerkkejä monista tavoista, joilla Zsh:ta voidaan muokata. Jotta voit käyttää tätä konfiguraatiota, tallenna se tiedostoksi nimeltä .zshrc.

Vihje: Ota muutokset käyttöön ilman, että sinun tarvitsee kirjautua ulos ja sitten takaisin sisään ajamalla source ~/.zshrc.

Tässä on yksinkertainen .zshrc:

~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Tämä asettaa oletuskehotteeksi walters-teemaneprompt walters

Katso #Kehotteiden teemat saadaksesi lisätietoja kehotteiden teemajärjestelmästä.

$PATH:n konfigurointi

Zsh sitoo muuttujan PATH muuttujaan path array. Ne synkronoidaan automaattisesti. Näin voimme helposti manipuloida PATH muuttujaa yksinkertaisesti muuttamalla arraya. Katso lisätietoja kohdasta A User’s Guide to the Z-Shell.

Rivillä typeset -U PATH path, jossa -U tarkoittaa uniikkia, komennetaan komentotulkkia hylkäämään kaksoiskappaleet sekä $PATH:stä että $path:stä

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

Komentojen täydentäminen

Zsh:n kenties kiehtovin ominaisuus on sen edistyneet automaattisen täydentämisen mahdollisuudet. Ota ainakin automaattinen täydennys käyttöön kohdassa .zshrc. Ottaaksesi automaattisen täydennyksen käyttöön lisää ~/.zshrc:

~/.zshrc
autoload -Uz compinitcompinit

Ylläoleva konfiguraatio sisältää ssh/scp/sftp-isäntänimien täydennyksen, mutta jotta tämä ominaisuus toimisi, käyttäjät eivät saa ottaa käyttöön ssh:n isäntänimien hashingia (esim.eli vaihtoehtoa HashKnownHosts ssh-asiakkaan konfiguraatiossa).

Automaattista täydennystä nuolinäppäinohjatulla käyttöliittymällä varten lisää seuraava:

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

Valikon aktivoimiseksi paina kahdesti Tab.

Komentorivikytkentöjen automaattista täydentämistä varten aliaksia varten lisää seuraava:

~/.zshrc
setopt COMPLETE_ALIASES

Automaattisen täydentämisen ottamiseksi käyttöön etuoikeutetuissa ympäristöissä etuoikeutetuissa komennoissa (esim.esim. jos täydennät komennon, joka alkaa sudo-komennolla, täydennyskomentosarjat yrittävät määrittää myös sudo-komennon täydennykset), sisällytä:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Warning: Tämä antaa Zsh completion -skriptien suorittaa komentoja sudo-oikeuksilla. Tätä ei kannata ottaa käyttöön, jos käytät epäluotettavia automaattisia täydennyskomentosarjoja.
Huomaa: Tämä erikoislaatuinen asiayhteystietoinen täydennys on käytettävissä vain pienelle määrälle komentoja.

Näppäinsidonnaisuudet

Zsh ei käytä readlinea, sen sijaan se käyttää omaa ja tehokkaampaa Zsh-linjaeditoria (ZLE). Se ei lue /etc/inputrc tai ~/.inputrc. Tutustu ZLE:n konfigurointiin lukemalla Zsh-linjaeditorin tarkempi tarkastelu ja omien widgettien luominen.

ZLE:llä on Emacs-tila ja vi-tila. Jos jokin ympäristömuuttujista VISUAL tai EDITOR sisältää merkkijonon vi, käytetään vi-tilaa; muussa tapauksessa käytetään oletuksena Emacs-tilaa. Aseta tila eksplisiittisesti bindkey -e:llä tai bindkey -v:lla vastaavasti Emacs-tilaa tai vi-tilaa varten.

Näppäinsidonnat määritetään yhdistämällä näppäimen painallusta vastaava pakosarja ZLE-vidgettiin. Käytettävissä olevat widgetit, niiden toimintojen kuvaukset ja oletusnäppäinsidonnaisuudet on lueteltu kohdissa zshzle(1) § STANDARD WIDGETS ja zshcontrib(1) § ZLE FUNCTIONS.

Suositeltu tapa asettaa näppäinsidonnaisuudet Zsh:ssä on käyttää terminfo(5):stä saatavia merkkijono-ominaisuuksia. Esimerkiksi:

~/.zshrc
# luodaan zkbd-yhteensopiva hash;# jos haluat lisätä muita avaimia tähän hashiin, katso: man 5 terminfotypeset -g -A keykey="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo®"# setup key accordingly}"" ]] && bindkey -- "${key}" rivin alku}" ]] && 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# Lopuksi varmista, että päätelaite on sovellustilassa, kun zle on# aktiivinen. Vain silloin $terminfon arvot ovat voimassa.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_start add-zle-zle-hook-widget -Uz zle-line-finish zle_application_mode_stopfi

Historiahaku

Sinun on asetettava key-matriisi ja varmistettava, että ZLE siirtyy sovellustilaan, jotta voit käyttää seuraavia ohjeita; katso #Key bindings.

Historiahaun ottamiseksi käyttöön lisää nämä rivit .zshrc tiedostoon:

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

Tällä tavalla vain nykyistä riviä nykyiseen kursorin sijaintiin asti vastaavat aiemmat komennot näytetään, kun Up– tai Down-näppäimiä painetaan.

Shift-, Alt-, Ctrl- ja Meta-modifikaattorit

xterm-yhteensopivissa päätelaitteissa voidaan käyttää user_caps(5):stä saatuja laajennettuja näppäinmäärittelyjä. Nämä ovat yhdistelmiä Shift, Alt, Ctrl ja Meta yhdessä Up, Down, Left, Right, PageUp, PageDown, Home, End tai Del kanssa. Katso zkbd-lähteestä luettelo modifiointinäppäinten ja näppäinyhdistelmien suositelluista nimistä.

Esimerkiksi, jos Ctrl+Left siirtyy edellisen sanan alkuun ja Ctrl+Right siirtyy seuraavan sanan alkuun:

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

Kehotteet

Zsh tarjoaa vaihtoehdot käyttää kehotteiden teemaa tai käyttäjille, jotka ovat tyytymättömiä teemoihin (tai haluavat laajentaa niiden käyttökelpoisuutta), mahdollisuuden rakentaa oma kehote.

Kehotteiden teemat

Kehotteiden teemat ovat nopea ja helppo tapa luoda Zsh:lle värillinen kehote. Katso zshcontrib(1) § PROMPT TEEMAT saadaksesi tietoa prompt-teemoista ja siitä, miten voit kirjoittaa oman teeman.

Käyttääksesi teemaa, varmista, että prompt-teemajärjestelmä on asetettu automaattiseen lataukseen kohdassa .zshrc. Tämä voidaan tehdä lisäämällä nämä rivit osoitteeseen:

~/.zshrc
autoload -Uz promptinitpromptinit

Saatavilla olevat prompt-teemat luetellaan komennolla:

$ prompt -l

Käyttääksesi esimerkiksi teemaa walters kirjoita:

$ prompt walters

Käytä tätä komentoa esikatsellaksesi kaikkia käytettävissä olevia teemoja:

$ prompt -p
Prompt-teemojen manuaalinen asennus

Teemoja on mahdollista asentaa manuaalisesti ilman ulkoisia konfiguraatiohallinnan työkaluja. Paikallista asennusta varten luo ensin kansio ja lisää se fpath-joukkoon, esim:

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

Luo nyt teematiedoston symbolinen linkki tähän kansioon:

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

Jos sen sijaan haluat asentaa teeman globaalisti, tee näin:

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

Nyt sinun pitäisi pystyä aktivoimaan se käyttämällä:

$ prompt mytheme

Jos kaikki toimii, voit muokata .zshrc-kansiota vastaavasti.

Kehotusteemojen lisääminen ilman erillistä tiedostoa jokaiselle

Kehotusteemojen lisäämisen oman tiedoston kautta lisäksi on mahdollista lisätä teemoja toisesta tiedostosta (kuten sinun .zshrc:sta), esim:

~/.zshrc
# Lataa promptinitautoload -teema -Uz promptinit && promptinit# Määritä teemaeprompt_mytheme_setup() { PS1="%~%#"}# Lisää teema promptiinysprompt_themes+=( mytheme )# Lataa teemaeprompt mytheme

Räätälöity prompti

Tango-view-fullscreen.pngTämän artikkelin tai osion on laajennettava.Tango-view-fullscreen.png

Perustelu: Lisää yksinkertainen väritön PROMPT esimerkki. (Keskustelu Talk:Zsh#:ssa)

Lisäksi kaikille kuorille yhteisen ensisijaisen vasemmanpuoleisen kehotteen PS1 (PROMPT, prompt) lisäksi Zsh tukee myös oikeanpuoleista kehotetta RPS1 (RPROMPT). Nämä kaksi muuttujaa on ne, jotka haluat asettaa mukautettuun arvoon.

Muut erikoiskehotteet, kuten PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) ja SPROMPT, selostetaan kohdassa zshparam(1) § PARAMETERS USED BY THE SHELL.

Kaikki kehotteet voidaan mukauttaa kehotteiden escapeilla. Käytettävissä olevat komentokehotteiden pakosekvenssit on lueteltu kohdassa zshmisc(1) § Komentokehotteiden pakosekvenssien laajentaminen.

Värit

Zsh asettaa värit eri tavalla kuin Bash, sinun ei tarvitse käyttää mutkikkaita ANSI-pakosekvenssejä tai terminaalin ominaisuuksia terminfo(5):stä. Zsh tarjoaa käteviä komentokehotteita etualan värin, taustavärin ja muiden visuaalisten efektien asettamiseen; katso zshmisc(1) § Visuaaliset efektit saadaksesi luettelon niistä ja niiden kuvaukset.

Värit voidaan määritellä käyttämällä desimaalista kokonaislukua, yhden kahdeksan yleisimmin tuetun värin nimeä tai #-merkkinä, jota seuraa RGB-tripletti heksadesimaalimuodossa. Katso lisätietoja fg=väri-ominaisuuden kuvauksesta kohdasta zshzle(1) § CHARACTER HIGHLIGHTING.

Useimmat päätelaitteet tukevat seuraavia värejä nimeltä:

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

Värinumerot 0-255 xterm 256 värin kanssa yhteensopiville pääteemulaattoreille löytyvät xterm-256-väritaulukosta.

Oikein asetetulla TERM-ympäristömuuttujalla päätelaitteen tuettu enimmäisvärimäärä löytyy terminfo(5)-tietokannasta käyttämällä echoti colors. Jos kyseessä ovat 24-bittiset värit, tarkista myös COLORTERM-ympäristömuuttuja print $COLORTERM:llä. Jos se palauttaa 24bit tai truecolor, päätelaitteesi tukee 16777216 (224) väriä, vaikka terminfo näyttäisikin pienempää lukua.

Huomautus:

  • Värit 0-15 voivat vaihdella päätelaite-emulaattoreiden ja niiden käyttämien värimaailmojen välillä.
  • Monissa päätelaite-emulaattoreissa lihavoitu teksti näytetään kirkkaammilla väreillä.
Vinkki:

  • Komennon escapen voi testata esimerkiksi komennolla print -P "prompt escapes":
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • Jos käytät 24-bittisiä värejä, saatat haluta ladata zsh/nearcolor-moduulin päätelaitteisiin, jotka eivät tue niitä. Esim:
    }" -eq '16777216' ]] || zmodload zsh/nearcolor

    Katso lisätietoja zsh/nearcolor-moduulista kohdasta zshmodules(1) § THE ZSH/NEARCOLOR MODULE.

Esimerkki

Tämä on esimerkki kaksipuolisesta kehotteesta:

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

Ja näin se näytetään:

username@host ~ %

Käyttääksesi värejä alueelta 16-255 ja 24-bittistä todellista väriä voit käyttää halutulle värille osoitettua numeroa 0-255 ja sen heksadesimaalista värikoodia vastaavasti:

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

Esimerkki .zshrc-tiedostot

  • Saadaksesi samat asetukset kuin kuukausittaisissa ISO-julkaisuissa (jotka käyttävät Zsh:tä oletusarvoisesti), asenna grml-zsh-config. Se sisältää grml:n monia hienosäätöjä ja kehittyneitä optimointeja.
  • https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – perusasetus, dynaamisella kehotteella ja ikkunan otsikolla/hardinfo.
  • https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc useilla ominaisuuksilla, muista tarkistaa kommentit siihen. Huomionarvoisia ominaisuuksia: confirm-toiminto, jolla varmistetaan, että käyttäjä haluaa suorittaa virrankatkaisun, uudelleenkäynnistyksen tai horrostilan, tuki GIT:lle kehotteessa (tehdään ilman vcsinfoa), välilehtien täydentäminen valikolla, nykyisen suoritetun komennon tulostaminen ikkunan otsikkopalkkiin ja paljon muuta.

Katsokaa dotfiles#Käyttäjä-tietovarastoista lisää.

Vinkkejä ja niksejä

Autostartti X:n sisäänkirjautumisen yhteydessä

Katso xinit#Autostartti X:n sisäänkirjautumisen yhteydessä.

Terminaalin asetusten palauttaminen sen jälkeen, kun ohjelma poistuu epänormaalisti

Monet ohjelmat muuttavat päätelaitteen tilaa, eivätkä useinkaan palauta päätelaitteen asetuksia, kun ne poistuvat epänormaalisti (esim. kaatuessaan tai törmätessään SIGINT:iin).

Tämä voidaan yleensä ratkaista suorittamalla reset(1):

$ reset

Seuraavissa kappaleissa kuvataan tapoja, joilla voidaan välttää päätelaitteen manuaalinen nollaaminen.

Komento ttyctl

Komennon ttyctl avulla päätelaite voidaan ”jäädyttää/jäädyttää”. Jos haluat jäädyttää interaktiivisen komentotulkin käynnistyksen yhteydessä, käytä seuraavaa:

~/.zshrc
tyctl -f

Terminaalin nollaaminen pakosekvensseillä

Vaihtoehtoiset rivipiirrosmerkkijoukot voivat sekoittaa terminaalin tavalla, jota ttyctl ei voi estää.

Yksinkertainen ratkaisu on tulostaa päätelaitteen nollaavat pakosekvenssit precmd-koukkufunktiosta, jotta ne suoritetaan joka kerta ennen kehotteen piirtämistä. Esimerkiksi käyttämällä pakosekvenssiä \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> palataan takaisin vierailtuun kansioon. Käytä automaattista täydennystä viivan jälkeen. Tämä osoittautuu erittäin käteväksi, jos käytät automaattista täydennysvalikkoa.

Huomautus: Tämä ei toimi, jos sinulla on useampi kuin yksi zsh-istunto avoinna ja yrität cd, koska molemmissa istunnoissa on ristiriita, kun ne kirjoittavat samaan tiedostoon.

cdr

cdr:n avulla voit vaihtaa työhakemiston aiempaan työhakemistoon automaattisesti ylläpidetystä luettelosta. Se tallentaa kaikki merkinnät tiedostoihin, joita ylläpidetään istuntojen välillä ja (oletusarvoisesti) nykyisessä istunnossa olevien päätelaite-emulaattoreiden välillä.

Katso asennusohjeet kohdasta zshcontrib(1) § REMEMBERING RECENT DIRECTORIES (MUISTIINPANOA VASTAAVISTA HAKemistoista).

Help-komento

Toisin kuin Bashissa, Zsh:ssä ei ole käytössä sisäänrakennettua help-käskyä, sen sijaan Zsh:ssä on käytössä komentokoodi run-help. Oletusarvoisesti run-help on alias man:lle, se voidaan joko suorittaa manuaalisesti liittämällä se komennon eteen tai se voidaan kutsua parhaillaan kirjoitettavalle komennolle näppäimistön pikanäppäimillä Alt+h tai Esc h.

Koska oletusarvoisesti run-help on pelkkä alias komennolle man, se toimii vain ulkoisissa komennoissa. Parantaaksesi sen toiminnallisuutta niin, että se toimii komentotulkin sisäänrakennetuissa komennoissa ja muissa komentotulkin ominaisuuksissa, sinun on käytettävä run-help-funktiota. Katso lisätietoja run-help:stä ja sen aputoiminnoista kohdasta zshcontrib(1).

Lataa ensin run-help-funktio ja poista sitten olemassa oleva alias run-help. Yksinkertaisuuden vuoksi help voidaan aliasoida run-help:ksi. Lisää esimerkiksi seuraava zshrc:

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

Apulaistoiminnot on otettava käyttöön erikseen:

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

Esimerkiksi run-help git commit-komento avaa nyt man-sivun git-commit(1) git(1):n sijasta git(1).

Persistentti uudelleenkäsittely

Tyypillisesti compinit ei löydä automaattisesti uusia suoritettavia tiedostoja $PATH:stä. Esimerkiksi uuden paketin asentamisen jälkeen /usr/bin/:ssä olevat tiedostot eivät tulisi välittömästi tai automaattisesti mukaan suoritukseen. Jotta nämä uudet suoritettavat tiedostot otettaisiin mukaan, täytyisi suorittaa:

$ rehash

Tämä "uudelleenlataus" voidaan asettaa tapahtumaan automaattisesti. Sisällytä yksinkertaisesti seuraava zshrc:

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

On-demand rehash

Kuten edellä, pacman voidaan kuitenkin konfiguroida koukkujen avulla pyytämään automaattisesti rehash, mikä ei aiheuta suorituskykysyistä haittaa jatkuvalle uudelleensyöttämiselle kuten edellä. Ottaaksesi tämän käyttöön, luo /etc/pacman.d/hooks-hakemisto ja /var/cache/zsh-hakemisto ja luo sitten koukkutiedosto:

/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/zsh/pacman

Tämä pitää tiedoston muutospäivämäärän /var/cache/zsh/pacman yhtenevänä viimeisimmän paketin asennus-, päivitys- tai poistoajan kanssa. Tämän jälkeen zsh on houkuteltava uusimaan oma komentovälimuistinsa, kun se vanhenee, lisäämällä ~/.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}add-zsh-hook -Uz precmd rehash_precmd

Jos koukku precmd käynnistetään ennen kuin /var/cache/zsh/pacman päivitetään, viimeistely ei välttämättä toimi ennen kuin uusi kehote käynnistetään. Tyhjän komennon suorittamisen, esim. painamalla enter, pitäisi riittää.

Vaihtoehtoinen on-demand rehash käyttäen SIGUSR1

Kuten edellä, koukkutiedosto näyttää kuitenkin tältä:

/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: Tämä lähettää SIGUSR1 kaikille käynnissä oleville zsh-instansseille. Huomaa, että SIGUSR1:n oletuskäyttäytyminen on terminate, joten kun konfiguroit tämän ensimmäisen kerran, kaikkien käyttäjien kaikki käynnissä olevat zsh-instanssit (mukaan lukien kirjautumiskuoret) lopettavat, jos ne eivät ole hankkineet alla olevaa trappia.
~/.zshrc
TRAPUSR1() { rehash }

Ylläoleva funktiotrap voidaan korvata listatrapilla trap 'rehash' USR1. Katso zshmisc(1) § Trap-funktiot trap-tyyppien eroista.

Tämä metodi sitoo välittömästi rehash kaikki zsh-instanssit, jolloin ei enää tarvitse painaa enteriä laukaistakseen precmd.

Sidotaan näppäin ncurses-sovellukseen

Sidotaan ncurses-sovellus näppäimen painallukseen, mutta se ei kuitenkaan hyväksy vuorovaikutusta. Käytä BUFFER-muuttujaa saadaksesi sen toimimaan. Seuraavassa esimerkissä käyttäjät voivat avata ncmpcpp:n käyttämällä Alt+\:

~/.zshrc
ncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;

\a. Esimerkiksi:

$ print -n '\e]2;My xterm title\a'

asettaa otsikon

My xterm title

Yksinkertainen tapa saada dynaaminen otsikko on asettaa otsikko precmd– ja preexec-koukkufunktioissa. Katso kohdasta zshmisc(1) § Koukkufunktiot luettelo käytettävissä olevista koukkufunktioista ja niiden kuvauksista.

Käyttämällä print -P voit lisäksi hyödyntää Zsh:n komentokehotteiden escapeita.

Vihje:

  • Tittelin tulostaminen voidaan jakaa useampaan komentoon, kunhan ne ovat peräkkäisiä.
  • GNU Screen lähettää xterm-otsikon hardstatukseen (%h). Jos haluat käyttää Screenin merkkijonojen pakosekvenssejä (esim. värejä varten), sinun on asetettava hardstatus \e_\e\– pakosekvenssillä. Muussa tapauksessa, jos merkkijonoeskapseja käytetään \e]2;\a, pääteemulaattori saa vääristyneen otsikon, koska se ei pysty tulkitsemaan Screenin merkkijonoeskapseja.
Huomautus:

  • Älä käytä print:n -P-vaihtoehtoa print, kun tulostat muuttujia, jotta niitä ei voida jäsennellä komentokehotteen escapseiksi.
  • Käytä q-parametrin laajennuslippua, kun tulostat muuttujia, jotta niitä ei tulkittaisi komentokehotteina.
~/.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\\\\'}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{-}%m\005{-} \005{B}%~\005{-} %# ' && print -n -- "${(q)1}\e\\\"; }}if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz preexec xterm_title_preexecfi

Terminaali-emulaattorin välilehden otsikko

Jotkut terminaali-emulaattorit ja multiplekserit tukevat välilehden otsikon asettamista. Pakosekvenssit riippuvat päätelaitteesta:

Terminaali Pakosekvenssit Kuvaus
GNU-näytön \ek\e\ Näytön ikkunan nimi (%t).
Konsoli \e]30;\a Konsolin välilehden otsikko.

Shell-ympäristön havaitseminen

Katsokaa Shell-ympäristön havaitsemista käsittelevästä arkistosta testejä, joilla havaitaan Shell-ympäristö. Tämä sisältää sisäänkirjautumisen/interaktiivisen shellin, Xorg-istunnon, TTY:n ja SSH-istunnon.

/dev/tcp vastaava: ztcp

Käytä zsh/net/tcp-moduulia:

$ zmodload zsh/net/tcp

Voit nyt luoda TCP-yhteyksiä:

$ ztcp example.com 80

Lyhennys lopettaa komentotulkki osittaisella komentorivillä

Vakiintuneesti Ctrl+d ei sulje komentotulkkia, jos komentorivi täyttyy, tämä korjaa sen:

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

Kolmannen osapuolen laajennukset

Konfiguraatiokehykset

Huomaa: Kehykset tuovat mukanaan abstraktiotasoa ja monimutkaisuutta. Ne voivat tuoda ja usein tuovat mukanaan määrittelemätöntä käyttäytymistä. Jos komentotulkin toiminta katkeaa, ensimmäisenä virheenkorjausvaiheena tulisi palata tavalliseen komentotulkkiin.
  • oh-my-zsh – Suosittu, yhteisölähtöinen kehys Zsh-konfiguraation hallintaan. Sen mukana tulee valtava määrä hyödyllisiä funktioita, apuohjelmia, laajennuksia ja teemoja.

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

  • Prezto – Konfiguraatiokehys Zsh:lle. Mukana tulee moduuleja, jotka rikastuttavat komentoriviympäristöä järkevillä oletusasetuksilla, aliaseilla, funktioilla, automaattisella täydennyksellä ja prompt-teemoilla.

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

  • ZIM – Konfiguraatiokehys, jossa on huima nopeus ja modulaariset laajennukset. Zim on erittäin helppo mukauttaa, ja siinä on runsaasti moduuleja ja ominaisuuksia tinkimättä nopeudesta tai toiminnallisuudesta.

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

Plugin managerit

  • Antibody – Suorituskykyyn keskittyvä plugin manager, joka muistuttaa Antigeniä.

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

  • zinit (aiemmin ”zplugin”) – Joustava Zsh-pluginmanageri puhtaalla fpathilla, raporteilla, viimeistelynhallinnalla, turbotilalla

https://github.com/zdharma/zinit || zsh-zplugin-gitAUR

  • Antigen – Zsh:n pluginmanageri, inspiraationsa oh-my-zsh:stä ja vundlesta. ABANDONED

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

  • zgen – Kevyt ja yksinkertainen plugin manager Zsh:lle. ABANDONED

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

  • zplug – Seuraavan sukupolven laajennustenhallinta Zsh:lle. ABANDONED

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

Fishin kaltainen syntaksin korostus ja automaattiset ehdotukset

Fish tarjoaa erittäin tehokkaan komentotulkin syntaksin korostuksen ja automaattiset ehdotukset. Jos haluat käyttää molempia Zsh:ssä, voit asentaa zsh-syntax-highlightingin, zsh-autosuggestionsin ja lopuksi lähdet jommankumman tai molemmat tarjotuista skripteistä zshrc:stä:

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

”Komentoa ei löydy” -käsittelijä

Tango-go-next.pngTämä artikkeli tai osio on ehdolla siirrettäväksi kohtaan #Vinkit ja niksit.Tango-go-next.png

Huomautuksia: Mukautettu toiminto, jossa käytetään pacman -F, ei ole ”kolmannen osapuolen laajennus”. Vain pkgfile-jutut kuuluvat tähän osioon. (Keskustellaan Talk:Zsh#:ssä)

pacman -F ”command not found” handler

pacman sisältää toiminnallisuuden tiedoston sisältävien pakettien etsimiseen. Seuraava komento ei löydy -käsittelijä käyttää pacmania suoraan etsimään vastaavia paketteja, kun tuntematon komento suoritetaan.

~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: komentoa ei löytynyt: %s' "$cmd" # tulosta komento ei löytynyt asap, sitten etsi pakettejafiles=(${(f)"$(pacman -F --machinereadable --"/usr/bin/${cmd}")"})if ((( ${#files} )); thenprintf '\r%s voi löytyä seuraavista paketeista:\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" "$paketti" "$versio" "$tiedosto "doneelseprintf '\n'fireturn 127}
Huomaa: pacmanin tiedostotietokanta on erillään normaalista synkronointitietokannasta ja se on haettava käyttämällä pacman -Fy. Katso lisätietoja kohdasta pacman#Search for a package that contains a specific file.

pkgfile ”command not found” handler

pkgfile sisältää Zsh-skriptitiedoston, joka tarjoaa command_not_found_handler-toiminnon, joka hakee automaattisesti pkgfile-tietokannasta, kun syötät tunnistamattoman komennon.

Tarpeen on lähdekoodata skripti, jotta se voidaan ottaa käyttöön. Esimerkiksi:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
Huom: Pkgfile-tietokanta on ehkä päivitettävä, ennen kuin tämä toimii. Katso lisätietoja kohdasta pkgfile#Asennus.

Asennuksen poisto

Vaihda oletuskuoretulkki ennen zsh-paketin poistamista.

Varoitus: Alla olevan menettelyn noudattamatta jättäminen voi johtaa siihen, että käyttäjät eivät enää pääse käyttämään toimivaa komentotulkkia.

Ajoita seuraava komento:

$ chsh -s /bin/bash user

Käytä sitä jokaiselle käyttäjälle, jonka kirjautumiskomentotulkiksi on määritetty zsh (tarvittaessa myös root). Kun se on valmis, zsh-paketti voidaan poistaa.

Vaihtoehtoisesti voit vaihtaa oletuskomentotulkin takaisin Bashiksi muokkaamalla /etc/passwd rootina.

Varoitus: On erittäin suositeltavaa käyttää vipw(8)-ohjelmaa muokattaessa /etc/passwd, sillä se auttaa estämään virheelliset merkinnät ja/tai syntaksivirheet.

Muuta esimerkiksi seuraava:

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

Tälle:

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

Katso myös

Vastaa

Sähköpostiosoitettasi ei julkaista.