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
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.
~/.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
- 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.
- 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.
-
$HOME/.profile
nem része a Zsh indítófájljainak, és a Zsh nem keres forrást, kivéve, ha a Zsh-tsh
vagyksh
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).
/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
.
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 selectA 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á:
~/.zshrcsetopt COMPLETE_ALIASESA 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:
~/.zshrczstyle ':completion::complete:*' gain-privileges 1Figyelmezteté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
vagyEDITOR
környezeti változók egyike tartalmazza avi
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 abindkey -e
vagybindkey -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_stopfiHistory 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:~/.zshrcautoload -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-searchAz
Up
vagyDown
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
ésMeta
kombinációi aUp
,Down
,Left
,Right
,PageUp
,PageDown
,Home
,End
vagyDel
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, aCtrl+Right
pedig a következő szó elejére lép:~/.zshrckey="${terminfo}"key="${terminfo}"}" ]] && bindkey -- "${key}" backward-word}" ]] && bindkey -- "${key}" forward-wordPrompts
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:~/.zshrcautoload -Uz promptinitpromptinitA rendelkezésre álló prompt témák listája a következő parancs futtatásával érhető el:
$ prompt -lPéldául a
walters
téma használatához írja be:$ prompt waltersA rendelkezésre álló témák előnézetének megtekintéséhez használja ezt a parancsot:
$ prompt -pPrompté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_setupHa ehelyett globálisan szeretnéd telepíteni a témát, akkor:
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setupMost már aktiválhatod a következővel:
$ prompt mythemeHa 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 mythemeCustomized prompt
Ez a cikk vagy szakasz bővítést igényel.
Ok: Egy egyszerű színtelenPROMPT
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 oldaliRPS1
(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
) ésSPROMPT
, 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.
- 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.
- A paranccsal
print -P "prompt escapes"
például aprint -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 Azsh/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:
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.
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/pacmanAz á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 azsh
-t rá kell venni a saját parancstárának újbóli átmosására, amikor elavul, a~/.zshrc
:~/ hozzáadásával.zshrczshcache_time="$(date +%s%N) "autoload -Uz add-zsh-hookrehash_precmd() { if ]; then local paccache_time="$(date -r /var/cache/zsh/pacman +%s%N)" if ((( zshcache_time < paccache_time )); then rehash zshcache_time="$paccache_time" fi fi fi}add-zsh-hook -Uz precmd rehash_precmdHa 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 aenter
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.hookOperation = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshDepends = procps-ngWhen = PostTransactionExec = /usr/bin/pkill zsh --signal=USR1Warning: 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.~/.zshrcTRAPUSR1() { 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 összeszsh
példánytrehash
kiváltja, így nincs szükség az enter lenyomására aprecmd
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 aAlt+\
:~/.zshrcncmpcppShow() { 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 titleA dinamikus cím egyszerű módja a cím beállítása a
precmd
éspreexec
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
-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.~/.zshrcautoload -Uz add-zsh-hookfunction xterm_title_precmd () {print -Pn -- '\e]2;%n@%m %~\a'] && print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-}\e\\\'}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_preexecfiTerminá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
- 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ő
Ez a cikk vagy szakasz a #Tippek és trükkök közé áthelyezhető.
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}
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.zshMegjegyzé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 userMinden 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/zshErre:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bashSee also