Zsh

A Zsh egy nagy teljesítményű shell, amely interaktív shellként és szkriptnyelv-értelmezőként is működik. Miközben kompatibilis a POSIX sh-sel (alapértelmezésben nem, csak a emulate sh kiadása esetén), olyan előnyöket kínál, mint a jobb tabulátor-kiegészítés és a globbing.

A Zsh GYIK további okokat kínál a Zsh használatára.

Telepítés

Elindítás előtt a felhasználóknak érdemes megnézniük, milyen shell van jelenleg használatban:

$ echo $SHELL

Telepítse a zsh csomagot. További befejezési definíciókhoz telepítse a zsh-completions csomagot is.

Kezdeti konfiguráció

Győződjön meg arról, hogy a Zsh helyesen lett-e telepítve, ha a terminálban lefuttatja a következőt:

$ zsh

Ezután meg kell jelenjen a zsh-newuser-install, amely végigvezet néhány alapvető konfiguráción. Ha ezt ki akarja hagyni, nyomja meg a q billentyűt. Ha nem látta, manuálisan is meghívhatja:

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Megjegyzés: Győződjön meg róla, hogy a terminál mérete legalább 72×15, különben a zsh-newuser-install nem fog lefutni.

A Zsh alapértelmezett héjává tétele

Változtassa meg a héját /usr/bin/zsh. Lásd: Command-line shell#Changing your default shell.

Tipp: Ha a bash-t cseréli le, a felhasználóknak érdemes néhány kódot a ~/.bashrc-ből a ~/.zshrc-ba (pl. a prompt és az aliasok) és a ~/.bash_profile-ból a ~/.zprofile-be (pl. az X Window System-et indító kód) áthelyezni.

Startup/Shutdown files

Tipp:

  • A Z-Shell felhasználói kézikönyvében talál magyarázatot az interaktív és bejelentkezési héjakról, valamint arról, hogy mit tegyen az indítófájlokba.
  • Elképzelhető, hogy szabványos elérési utat vezet be a Zsh konfigurációs fájljaihoz.
Megjegyzés:

  • Ha a $ZDOTDIR nincs megadva, akkor a $HOME-t használja helyette.
  • Ha a RCS opció nincs beállítva bármelyik fájlban, akkor az adott fájl után nem lesznek beolvasva konfigurációs fájlok.
  • Ha a GLOBAL_RCS opció nincs beállítva bármelyik fájlban, akkor az adott fájl után nem lesznek beolvasva globális konfigurációs fájlok (/etc/zsh/*).

A Zsh indításkor alapértelmezés szerint a következő fájlokból olvassa be a parancsokat ebben a sorrendben, feltéve, hogy léteznek.

  • /etc/zsh/zshenv A környezeti változók beállítására szolgál minden felhasználó számára; nem tartalmazhat olyan parancsokat, amelyek kimenetet produkálnak, vagy feltételezik, hogy a shell csatlakozik egy TTY-hez. Ha ez a fájl létezik, mindig be lesz olvasva, ez nem írható felül.
  • $ZDOTDIR/.zshenv A felhasználók környezeti változóinak beállítására szolgál; nem tartalmazhat olyan parancsokat, amelyek kimenetet produkálnak, vagy feltételezik, hogy a shell csatlakozik egy TTY-hez. Ha ez a fájl létezik, mindig be lesz olvasva.
  • /etc/zsh/zprofile A parancsok indításkor történő végrehajtására szolgál minden felhasználó számára, be lesz olvasva, ha bejelentkezési héjként indul. Felhívjuk a figyelmet, hogy Arch Linuxon alapértelmezés szerint egy sort tartalmaz, amelynek forrása /etc/profile. Lásd az alábbi figyelmeztetést, mielőtt ezt el akarod távolítani!
    • /etc/profile Ezt a fájlt minden POSIX sh-kompatibilis héjnak forrásként kell használnia bejelentkezéskor: ez állítja be a $PATH és más környezeti változókat és alkalmazásspecifikus (/etc/profile.d/*.sh) beállításokat bejelentkezéskor.
  • $ZDOTDIR/.zprofile A felhasználói parancsok indításkor történő végrehajtására szolgál, bejelentkező héjként való indításkor olvassa be. Általában grafikus munkamenetek automatikus indítására és munkamenet szintű környezeti változók beállítására használják.
  • /etc/zsh/zshrc Interaktív héj konfigurációjának beállítására és parancsok végrehajtására szolgál minden felhasználó számára, interaktív héjként való indításkor beolvasásra kerül.
  • $ZDOTDIR/.zshrc Felhasználó interaktív héj konfigurációjának beállítására és parancsok végrehajtására szolgál, interaktív héjként való indításkor beolvasásra kerül.
  • /etc/zsh/zlogin Minden felhasználó parancsainak végrehajtására szolgál a kezdeti folyamat végén, bejelentkezési héjként való indításkor kerül beolvasásra.
  • $ZDOTDIR/.zlogin A felhasználó parancsainak végrehajtására szolgál a kezdeti folyamat végén, bejelentkezési héjként való indításkor kerül beolvasásra. Általában parancssori segédprogramok automatikus indítására használják. Nem szabad grafikus munkamenetek automatikus indítására használni, mivel ilyenkor a munkamenet tartalmazhat olyan konfigurációt, amelyet csak interaktív héjnak szántak.
  • $ZDOTDIR/.zlogout A parancsok végrehajtására szolgál, amikor a bejelentkező héj kilép.
  • /etc/zsh/zlogout A parancsok végrehajtására szolgál minden felhasználó számára, amikor a bejelentkező héj kilép.

Lásd a grafikus ábrázolást.

Megjegyzés:

  • $HOME/.profile nem része a Zsh indítófájljainak, és a Zsh nem keres forrást, kivéve, ha a Zsh-t sh vagy ksh néven hívjuk meg és login shellként indítjuk. A sh és ksh kompatibilitási módokról bővebben lásd: zsh(1) § COMPATIBILITY.
  • Az Arch zsh csomagban használt elérési utak eltérnek a man oldalakon használt alapértelmezettektől (FS#48992).
Figyelmeztetés: Ne távolítsuk el az alapértelmezett egy sort a /etc/zsh/zprofile-ben, különben megbontja más csomagok integritását, amelyek néhány szkriptet biztosítanak a /etc/profile.d/-ban.

A Zsh beállítása

Bár a Zsh használható a dobozból, szinte biztosan nem úgy van beállítva, ahogy a legtöbb felhasználó szeretné használni. De a Zsh-ban elérhető rengeteg testreszabási lehetőség miatt a Zsh konfigurálása ijesztő és időigényes lehet.

Egyszerű .zshrc

Az alábbiakban egy minta konfigurációs fájl található. Ez egy tisztességes alapértelmezett beállításkészletet biztosít, valamint példákat ad a Zsh testreszabásának számos módjára. A konfiguráció használatához mentsük el a .zshrc.

nevű fájlba Tipp: Alkalmazza a változtatásokat anélkül, hogy ki kellene jelentkeznie, majd újra be kellene lépnie a source ~/.zshrc.

Itt egy egyszerű .zshrc:

~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Ez az alapértelmezett promptot a walters témára állítja beeprompt walters

A prompt témák rendszerének további részleteit lásd a #Prompt témáknál.

A $PATH

Zsh a PATH változót egy path tömbhöz köti. Ezek automatikusan szinkronizálódnak. Ez lehetővé teszi számunkra a PATH egyszerű manipulálását a tömb egyszerű módosításával. A részletekért lásd A User’s Guide to the Z-Shell.

A typeset -U PATH path sor, ahol a -U az egyediséget jelenti, arra utasítja a héjat, hogy dobja ki a duplikátumokat mind a $PATH, mind a $path sorból:

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

Parancskiegészítés

A Zsh talán legmeggyőzőbb tulajdonsága a fejlett automatikus kiegészítési képessége. Legalább a .zshrc-ban engedélyezzük az automatikus kiegészítést. Az automatikus kitöltés engedélyezéséhez a következőket kell hozzáadni a ~/.zshrc-hez:

~/.zshrc
autoload -Uz compinitcompinit

A fenti konfiguráció tartalmazza az ssh/scp/sftp hosztnevek kitöltését, de ahhoz, hogy ez a funkció működjön, a felhasználóknak nem szabad engedélyezniük az ssh hosztnevek hashing-jét (i.azaz a HashKnownHosts opciót az ssh kliens konfigurációjában).

A nyílbillentyűvel vezérelt felülettel történő automatikus kiegészítéshez a következőket kell hozzáadni a:

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

A menü aktiválásához nyomja meg kétszer a Tab gombot.

A parancssori kapcsolók automatikus kitöltéséhez az aliasokhoz a következőket adjuk hozzá:

~/.zshrc
setopt COMPLETE_ALIASES

A kiváltságos környezetek automatikus kitöltésének engedélyezéséhez a kiváltságos parancsokban (pl.pl. ha egy sudo-val kezdődő parancsot fejezünk be, a befejező szkriptek a sudo-val való befejezéseket is megpróbálják meghatározni), tartalmazza:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Figyelmeztetés: Ez lehetővé teszi a Zsh completion szkriptek számára a sudo jogosultságokkal rendelkező parancsok futtatását. Ezt nem szabad engedélyezni, ha nem megbízható automatikus kitöltő szkripteket használsz.
Megjegyzés: Ez a speciális fajta kontextusfüggő kitöltés csak néhány parancshoz érhető el.

Kulcskötések

A Zsh nem használja a readline-t, helyette a saját és sokkal hatékonyabb Zsh Line Editor (ZLE) szkriptet használja. Nem olvassa /etc/inputrc vagy ~/.inputrc. Olvassa el az Egy közelebbi pillantás a zsh sorszerkesztőre és az egyéni widgetek létrehozására című részt a ZLE konfigurációjának bemutatásáért.

A ZLE-nek van egy Emacs és egy vi üzemmódja. Ha a VISUAL vagy EDITOR környezeti változók egyike tartalmazza a vi karakterláncot, akkor a vi módot fogja használni; ellenkező esetben az Emacs mód lesz az alapértelmezett. Állítsuk be a módot explicit módon a bindkey -e vagy bindkey -v változóval az Emacs módhoz, illetve a vi módhoz.

A billentyűkötések hozzárendelése úgy történik, hogy egy billentyűleütésnek megfelelő escape-szekvenciát hozzárendelünk egy ZLE widgethez. A rendelkezésre álló widgetek, a műveleteik leírásával és az alapértelmezett billentyűkötésekkel együtt a zshzle(1) § STANDARD WIDGETS és a zshcontrib(1) § ZLE FUNCTIONS című fejezetekben találhatók.

A billentyűkötések beállításának ajánlott módja a Zsh-ben a terminfo(5) string képességek használata. Például:

~/.zshrc
# hozzon létre egy zkbd kompatibilis hash-t;# más kulcsok hozzáadásához ehhez a hash-hoz, ld: 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}"# kulcs beállítása ennek megfelelően}"". ]] && bindkey -- "${key}" sor eleje}" ]] && bindkey -- "${key}" sor vége}" ]] && 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}" begin-of-buffer-or-history}" ]] && bindkey -- "${key}" end-of-buffer-or-history}" ]] && bindkey -- "${key}" reverse-menu-complete# Végül győződjünk meg arról, hogy a terminál alkalmazás üzemmódban van, amikor a zle# aktív. Csak ekkor érvényesek a $terminfo értékei.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-zle-hook-widget -Uz zle-line-finish zle_application_mode_stopfi

History search

Az alábbi utasítások használatához be kell állítania a key tömböt, és gondoskodnia kell arról, hogy a ZLE alkalmazásmódba lépjen; lásd #Key bindings.

Az előzménykeresés engedélyezéséhez adja hozzá ezeket a sorokat a .zshrc fájlhoz:

~/.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

Az Up vagy Down billentyűk lenyomásakor csak az aktuális sornak az aktuális kurzor pozíciójáig megfelelő múltbeli parancsok jelennek meg.

Shift, Alt, Ctrl és Meta módosítók

xterm kompatibilis terminálok használhatják a user_caps(5) bővített billentyű-definícióit. Ezek a Shift, Alt, Ctrl és Meta kombinációi a Up, Down, Left, Right, PageUp, PageDown, Home, End vagy Del kombinációkkal együtt. A módosító billentyűk és billentyűkombinációk ajánlott neveinek listáját lásd a zkbd forrásban.

Például a Ctrl+Left az előző szó elejére, a Ctrl+Right pedig a következő szó elejére lép:

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

Prompts

A Zsh lehetőséget kínál egy prompt téma használatára, illetve a témákkal elégedetlen (vagy azok hasznosságát bővíteni kívánó) felhasználók számára egy egyéni prompt létrehozására.

Prompt themes

A prompt themes egy gyors és egyszerű módja egy színes prompt beállításának a Zsh-ban. Lásd zshcontrib(1) § PROMPT THEMES a prompt témákról és a saját téma megírásáról szóló információkat.

A téma használatához győződjön meg róla, hogy a .zshrc-ban a prompt téma rendszer automatikus betöltésre van állítva. Ezt a következő sorok hozzáadásával lehet megtenni:

~/.zshrc
autoload -Uz promptinitpromptinit

A rendelkezésre álló prompt témák listája a következő parancs futtatásával érhető el:

$ prompt -l

Például a walters téma használatához írja be:

$ prompt walters

A rendelkezésre álló témák előnézetének megtekintéséhez használja ezt a parancsot:

$ prompt -p
Promptémák manuális telepítése

A témák manuálisan, külső konfigurációkezelő eszközök nélkül is telepíthetők. Helyi telepítéshez először hozzon létre egy mappát, és adja hozzá a fpath tömbhöz, pl.:

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

Ezután hozza létre a témafájl szimbolikus linkjét ebben a mappában:

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

Ha ehelyett globálisan szeretnéd telepíteni a témát, akkor:

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

Most már aktiválhatod a következővel:

$ prompt mytheme

Ha minden működik, akkor ennek megfelelően szerkesztheted a .zshrc-at.

Promptémák hozzáadása anélkül, hogy mindegyiknek külön fájlja lenne

Mellett, hogy egy prompt témát saját fájlon keresztül adhatsz hozzá, lehetőség van arra is, hogy egy másik fájlból (például a .zshrc-ból) adj hozzá témákat, pl:

~/.zshrc
# Load promptinitautoload -Uz promptinit && promptinit# A téma definiálásaeprompt_mytheme_setup() { PS1="%~%#"}# A téma hozzáadása a promptokhozysprompt_themes+=( mytheme )# A téma betöltéseeprompt mytheme

Customized prompt

Tango-view-fullscreen.pngEz a cikk vagy szakasz bővítést igényel.Tango-view-fullscreen.png

Ok: Egy egyszerű színtelen PROMPT példa hozzáadása. (Talk:Zsh#-ban megvitatva)

A Zsh a minden héjban közös elsődleges bal oldali PS1 (PROMPT, prompt) prompt mellett egy jobb oldali RPS1 (RPROMPT) promptot is támogat. Ezt a két változót érdemes egyéni értékre állítani.

A többi speciális célú promptot, mint például a PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) és SPROMPT, a zshparam(1) § PARAMETERS USED BY THE SHELL.

A promptok mindegyike testre szabható a prompt escapes segítségével. A rendelkezésre álló prompt escape szekvenciákat a zshmisc(1) § A PROMPT SZEKVENCIÁK KITÖLTÉSE.

Colors

A zsh másképp állítja be a színeket, mint a Bash, nem kell a terminfo(5)-ből származó tekervényes ANSI escape szekvenciákat vagy terminálképességeket használni. A Zsh kényelmes prompt escape-eket biztosít az előtérszín, a háttérszín és más vizuális hatások beállításához; ezek listáját és leírását lásd zshmisc(1) § Vizuális hatások.

Colors megadható decimális egész számmal, a nyolc legszélesebb körben támogatott szín egyikének nevével vagy egy #, amelyet egy hexadecimális formátumú RGB-triplet követ. További részletekért lásd az fg=colour leírását a zshzle(1) § CHARACTER HIGHLIGHTING című fejezetben.

A legtöbb terminál a következő színeket támogatja név szerint:

Név Szám
black 0
red 1
green 2
yellow 3
blue 4
magenta 5
cyan 6
white 7

Az xterm 256 színnel kompatibilis terminál emulátorok 0-255-ös színszámai az xterm-hez találhatók.256 színű táblázatban.

A helyesen beállított TERM környezeti változó esetén a terminál támogatott maximális színszámát a terminfo(5) adatbázisból a echoti colors segítségével lehet megtudni. A 24 bites színek esetén a COLORTERM környezeti változót is ellenőrizze a print $COLORTERM segítségével. Ha ez 24bit vagy truecolor értéket ad vissza, akkor a terminál 16777216 (224) színt támogat, még akkor is, ha a terminfo kisebb számot mutat.

Megjegyzés:

  • A 0-15 színek a terminálemulátorok és az általuk használt színsémák között eltérhetnek.
  • Néhány terminálemulátor a vastag betűket világosabb színnel jeleníti meg.
Tipp:

  • A paranccsal print -P "prompt escapes" például a print -P "prompt escapes" paranccsal tesztelhetők a parancssorok:
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • Ha 24 bites színeket használ, akkor érdemes betölteni a zsh/nearcolor modult olyan terminálokon, amelyek nem támogatják ezeket. Pl:
    }" -eq '16777216' ]] || zmodload zsh/nearcolor

    A zsh/nearcolor modullal kapcsolatos részleteket lásd a zshmodules(1) § A ZSH/NEARCOLOR MODUL A zsh/nearcolor modulról.

Példa

Ez egy példa egy kétoldalas promptra:

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

És így fog megjelenni:

username@host ~ %

A 16-255 tartományba tartozó színek és a 24 bites valódi szín használatához használhatja a kívánt színhez rendelt 0 és 255 közötti számot, illetve annak hexadecimális színkódját:

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

Példa .zshrc fájlok

  • Az alapértelmezésben Zsh-t használó havi ISO kiadásokkal megegyező beállítások eléréséhez telepítse a grml-zsh-config-ot. Ez tartalmazza a grml.
  • https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – alapbeállítás, dinamikus prompt és ablakcím/hardinfo.
  • https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc számos funkcióval, mindenképpen nézd meg a kommenteket hozzá. Figyelemre méltó funkciók: confirm funkció annak biztosítására, hogy a felhasználó ki akarja-e kapcsolni, újraindítani vagy hibernálni, GIT támogatása a promptban (vcsinfo nélkül történik), tab-kiegészítés menüvel, az aktuálisan végrehajtott parancs nyomtatása az ablak címsorába és még sok más.

See dotfiles#User repositories for more.

Tippek és trükkök

Autostart X bejelentkezéskor

Lásd xinit#Autostart X bejelentkezéskor.

Terminálbeállítások visszaállítása a program rendellenes kilépése után

Néhány program megváltoztatja a terminál állapotát, és gyakran nem állítja vissza a terminálbeállításokat rendellenes kilépéskor (pl. összeomlás vagy SIGINT találkozás esetén).

Ez jellemzően a reset(1) végrehajtásával oldható meg:

$ reset

A következő szakaszok a terminál manuális visszaállításának elkerülésére szolgáló lehetőségeket ismertetik.

A ttyctl parancs

A ttyctl parancs a terminál “befagyasztására/feloldására” használható. Az interaktív héj indításkor történő befagyasztásához használja a következőket:

~/.zshrc
ttyctl -f

A terminál visszaállítása escape szekvenciákkal

Az alternatív vonalhúzás karakterkészlete olyan módon elcseszheti a terminált, amit a ttyctl nem tud megakadályozni.

Egyszerű megoldás, ha a terminált visszaállító escape-szekvenciákat a precmd hook függvényből adjuk ki, így azok minden alkalommal végrehajtódnak a prompt kirajzolása előtt. Például a \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> escape-szekvencia használatával visszatérhetünk egy meglátogatott mappába. Használja az automatikus kiegészítést a kötőjel után. Ez nagyon hasznosnak bizonyul, ha az autocompletion menüt használjuk.

Megjegyzés: Ez nem fog működni, ha egynél több zsh munkamenet van nyitva, és megpróbáljuk cd, mivel konfliktust okoz, ha mindkét munkamenet ugyanabba a fájlba ír.

cdr

cdr lehetővé teszi, hogy a munkakönyvtárat egy automatikusan vezetett listából egy korábbi munkakönyvtárra váltsuk. Az összes bejegyzést olyan fájlokban tárolja, amelyeket a munkamenetek között és (alapértelmezés szerint) az aktuális munkamenetben lévő terminálemulátorok között tart fenn.

A beállítási utasításokért lásd zshcontrib(1) § REMEMBERING RECENT DIRECTORIES.

Help parancs

A Bash-sel ellentétben a Zsh nem engedélyezi a beépített help parancsot, helyette a run-help parancsot biztosítja. Alapértelmezés szerint az run-help egy alias a man-hez, ezt vagy manuálisan lehet végrehajtani a parancshoz való előtagolással, vagy meg lehet hívni az éppen beírt parancshoz a Alt+h vagy Esc h billentyűkombinációval.

Mivel alapértelmezés szerint ez csak egy alias a man-hez, csak külső parancsoknál fog működni. Ahhoz, hogy javítsuk a funkcionalitását, hogy működjön a héj beépített moduljain és más héjfunkcióin is, a run-help függvényt kell használnunk. A run-help-ről és segédfüggvényeiről bővebb információt a zshcontrib(1)-ben találsz.

Először töltsd be a run-help függvényt, majd távolítsd el a meglévő run-help aliast. Az egyszerűség kedvéért a help alias lehet a run-help. Például a zshrc-hez adjuk hozzá a következőket:

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

A segédfunkciókat külön kell engedélyezni:

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

Például a run-help git commit parancs mostantól a git(1) helyett a git-commit(1) man oldalt fogja megnyitni.

Persistent rehash

A compinit jellemzően nem talál automatikusan új futtatható állományokat a $PATH-ben. Például egy új csomag telepítése után a /usr/bin/-ben lévő fájlok nem kerülnek azonnal vagy automatikusan a befejezésbe. Így ahhoz, hogy ezek az új futtatható fájlok bekerüljenek, a következőt kellene futtatni:

$ rehash

Ez az "újraolvasás" beállítható úgy, hogy automatikusan történjen. Egyszerűen a következőt kell beilleszteni a zshrc-be:

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

On-demand rehash

A fentiekhez hasonlóan, azonban a pacman beállítható horgokkal, hogy automatikusan kérjen egy rehash-t, ami nem jár a fentiek szerinti állandó rehashelés teljesítménybeli hátrányával. Ennek engedélyezéséhez hozzuk létre a /etc/pacman.d/hooks könyvtárat és egy /var/cache/zsh könyvtárat, majd hozzunk létre egy hook fájlt:

/etc/pacman.d/hooks/zsh.hook
Operation = InstallOperation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshWhen = PostTransactionExec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman 

Az állomány /var/cache/zsh/pacman módosítási dátumát így a csomag utolsó telepítésének, frissítésének vagy eltávolításának időpontjával tartja összhangban. Ezután a zsh-t rá kell venni a saját parancstárának újbóli átmosására, amikor elavul, a ~/.zshrc:

~/ hozzáadásával.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

Ha a precmd horog a /var/cache/zsh/pacman frissítése előtt aktiválódik, a befejezés nem biztos, hogy működik, amíg egy új prompt nem indul. Egy üres parancs futtatása, például a enter megnyomása elegendő lehet.

Alternatív on-demand rehash a SIGUSR1 használatával

Mint fentebb, azonban a hook fájl így néz ki:

/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: Ez SIGUSR1-et küld az összes futó zsh példánynak. Vegye figyelembe, hogy a SIGUSR1 alapértelmezett viselkedése a terminate, így amikor először konfigurálja ezt, az összes felhasználó összes futó zsh példánya (beleértve a bejelentkezési héjakat is) meg fog szűnni, ha nem szerezte be az alábbi trapet.
~/.zshrc
TRAPUSR1() { rehash }

A fenti függvény trap helyettesíthető egy lista trappel trap 'rehash' USR1. A csapdák típusai közötti különbségeket lásd zshmisc(1) § Trap Functions.

Ez a módszer azonnal rehash az összes zsh példányt rehash kiváltja, így nincs szükség az enter lenyomására a precmd kiváltásához.

Billentyűzet kötése az ncurses alkalmazáshoz

Az ncurses alkalmazás egy billentyűleütéshez köthető, de nem fogad interakciót. Használja a BUFFER változót, hogy működjön. A következő példa lehetővé teszi a felhasználók számára az ncmpcpp megnyitását a Alt+\:

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

\a. Például:

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

a cím beállítása

My xterm title

A dinamikus cím egyszerű módja a cím beállítása a precmd és preexec hook függvényekben. Lásd zshmisc(1) § Hook Functions a rendelkezésre álló hook függvények listáját és leírását.

Az print -P használatával ezen felül kihasználhatjuk a Zsh prompt escapes előnyeit.

Tipp:

  • A címnyomtatás több parancsra is felosztható, amennyiben azok egymás után következnek.
  • A GNU Screen az xterm címét a hardstatusra (%h) küldi. Ha a Screen karakterlánc-kitöréseket akarjuk használni (pl. színekhez), akkor a hardstatus-t a \e_\e\ escape-sorozattal kell beállítani. Ellenkező esetben, ha a \e]2;\a string escapes használata esetén a terminál emulátor torz címet fog kapni, mivel nem képes értelmezni a Screen string escapes értelmezését.
Megjegyzés:

  • A változók nyomtatásakor ne használja a print -P opcióját, hogy ne lehessen azokat prompt escapesként elemezni.
  • Változók nyomtatásakor használja a q paraméterbővítési jelzőt, hogy megakadályozza, hogy azokat escape-szekvenciaként elemezze.
~/.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{-} \005{B}%~\005{-} %# ' && print -n -- "${(q)1}\e\\\\"; }}if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz preexec xterm_title_preexecfi

Terminál emulátor fül címe

Néhány terminál emulátor és multiplexer támogatja a fül címének beállítását. Az escape-szekvenciák a termináltól függnek:

Terminál Escape-szekvenciák leírás
GNU képernyő \ek\e\ A képernyő ablakának címe (%t).
Konzol \e]30;\a Konzol lapjának címe.

Shell környezet észlelése

A shell környezet észleléséről szóló adattárban található tesztek a shell környezet észlelésére. Ide tartozik a bejelentkezés/interaktív shell, Xorg munkamenet, TTY és SSH munkamenet.

/dev/tcp megfelelője: ztcp

Használja a zsh/net/tcp modult:

$ zmodload zsh/net/tcp

Már TCP-kapcsolatokat is létrehozhat:

$ ztcp example.com 80

A shell részleges parancssorból való kilépés rövidítése

Az Ctrl+d alapértelmezés szerint nem zárja be a shell-t, ha a parancssor betelt, ez javítja ezt:

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

Third-party extensions

Configuration frameworks

Megjegyzés: A keretrendszerek egy absztrakciós és komplexitási szintet vezetnek be. Ezek meghatározatlan viselkedést vezethetnek be, és gyakran be is vezetnek. A shell törése esetén az első hibakeresési lépésnek a sima shellhez való visszatérésnek kell lennie.

  • oh-my-zsh – Egy népszerű, közösség által irányított keretrendszer a Zsh konfigurációjának kezelésére. Rengeteg hasznos funkcióval, segédprogrammal, bővítménnyel és témával együtt érkezik.

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

  • Prezto – Egy konfigurációs keretrendszer a Zsh-hoz. Modulokkal érkezik, a parancssori felület környezetét épeszű alapértelmezésekkel, aliasokkal, függvényekkel, automatikus kitöltéssel és prompt témákkal gazdagítja.

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

  • ZIM – Egy konfigurációs keretrendszer villámgyorsasággal és moduláris bővítésekkel. A Zim nagyon könnyen testreszabható, és gazdag modul- és funkciókészlettel rendelkezik anélkül, hogy kompromisszumot kötne a sebesség vagy a funkcionalitás terén.

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

Plugin managerek

  • Antibody – Az Antigenhez hasonló, teljesítményre összpontosító plugin manager.

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

  • zinit (korábban “zplugin”) – Rugalmas Zsh plugin manager tiszta fpath, jelentések, befejezéskezelés, turbó mód

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

  • Antigen – Egy plugin manager a Zsh-hoz, az oh-my-zsh és a vundle ihlette. ABANDONED

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

  • zgen – Egy könnyű és egyszerű plugin manager a Zsh-hoz. ABANDONED

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

  • zplug – Egy következő generációs plugin manager a Zsh számára. ABANDONED

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

Fish-szerű szintaxis kiemelés és automatikus javaslatok

A Fish nagyon hatékony shell szintaxis kiemelést és automatikus javaslatokat biztosít. Ahhoz, hogy mindkettőt használhassa a Zsh-ban, telepítse a zsh-syntax-highlighting és a zsh-autosuggestions szkripteket, és végül a zshrc-ből a megadott szkriptek egyikét vagy mindkettőt forrásként használja:

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

A “command not found” kezelő

Tango-go-next.pngEz a cikk vagy szakasz a #Tippek és trükkök közé áthelyezhető.Tango-go-next.png

Megjegyzések: A pacman -F-t használó egyéni funkció nem “harmadik féltől származó bővítmény”. Csak a pkgfile dolgok tartoznak ebbe a szakaszba. (Talk:Zsh#-ban megbeszélni)

pacman -F “command not found” handler

a pacman tartalmaz olyan funkciókat, amelyekkel egy fájlt tartalmazó csomagokat kereshetünk. A következő command-not-found handler közvetlenül a pacman segítségével keresi a megfelelő csomagokat, amikor egy ismeretlen parancsot hajt végre.

~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: command not found: %s' "$cmd" # a parancsot nem találta ki minél előbb, majd keressük meg a csomagokatfiles=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if ((( ${#files} )); thenprintf '\r%s a következő csomagokban található:\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}
Megjegyzés: A pacman fájladatbázisa elkülönül a normál sync adatbázistól, és a pacman -Fy segítségével kell lekérni. A részletekért lásd: pacman#Keresés egy adott fájlt tartalmazó csomagra.

pkgfile “command not found” handler

A pkgfile tartalmaz egy Zsh script fájlt, amely egy command_not_found_handler funkciót biztosít, amely automatikusan keres a pkgfile adatbázisban, amikor egy fel nem ismert parancsot ír be.

A scriptet forrásba kell helyeznie, hogy engedélyezze. Például:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh 
Megjegyzés: Előfordulhat, hogy a pkgfile adatbázist frissíteni kell, mielőtt ez működni fog. A részletekért lásd pkgfile#Installáció.

Eltávolítás

A zsh csomag eltávolítása előtt módosítsa az alapértelmezett shell-t.

Figyelmeztetés: Az alábbi eljárás elmulasztása azt eredményezheti, hogy a felhasználók többé nem férnek hozzá a működő shellhez.

Futtassa a következő parancsot:

$ chsh -s /bin/bash user

Minden olyan felhasználó számára, akinek a zsh van beállítva bejelentkezési shellként (beleértve a root-ot is, ha szükséges). Ha elkészült, a zsh csomag eltávolítható.

Változtassa vissza az alapértelmezett shell-t Bash-re a /etc/passwd szerkesztésével root-ként.

Figyelmeztetés: Erősen ajánlott a vipw(8) használata a /etc/passwd szerkesztésekor, mivel segít megelőzni az érvénytelen bejegyzéseket és/vagy a szintaxis hibákat.

Módosítsa például a következőket:

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

Erre:

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

See also

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.