Zsh

Zsh este un shell puternic care funcționează atât ca un shell interactiv, cât și ca un interpretor de limbaj de scripting. În timp ce este compatibil cu POSIX sh (nu în mod implicit, doar dacă se emite emulate sh), oferă avantaje cum ar fi o completare îmbunătățită a tabulatoarelor și globbing.

Pregătirea frecventă Zsh oferă mai multe motive pentru a utiliza Zsh.

Instalare

Înainte de a începe, utilizatorii ar putea dori să vadă ce shell este utilizat în prezent:

$ echo $SHELL

Instalați pachetul zsh. Pentru definiții de completare suplimentare, instalați și pachetul zsh-completions.

Configurare inițială

Asigurați-vă că Zsh a fost instalat corect rulând următoarele într-un terminal:

$ zsh

Ar trebui să vedeți acum zsh-newuser-install, care vă va ghida prin câteva configurări de bază. Dacă doriți să săriți peste acest lucru, apăsați q. Dacă nu l-ați văzut, îl puteți invoca manual cu:

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Notă: Asigurați-vă că dimensiunea terminalului dvs. este de cel puțin 72×15, altfel zsh-newuser-install nu va rula.

Să faceți din Zsh shell-ul dvs. implicit

Schimbați shell-ul în /usr/bin/zsh. Consultați Command-line shell#Changing your default shell.

Sfat: Dacă înlocuiți bash, utilizatorii pot dori să mute o parte din cod de la ~/.bashrc la ~/.zshrc (de exemplu, promptul și aliasurile) și de la ~/.bash_profile la ~/.zprofile (de exemplu, codul care pornește sistemul X Window).

Fișiere de pornire/oprire

Sfat:

  • Vezi A User’s Guide to the Z-Shell pentru explicații cu privire la shell-urile interactive și de conectare, și ce să puneți în fișierele de pornire.
  • Ați putea lua în considerare implementarea unei căi standard pentru fișierele de configurare Zsh.
Notă:

  • Dacă $ZDOTDIR nu este setat, se folosește în schimb $HOME.
  • Dacă opțiunea RCS nu este setată în niciunul dintre fișiere, niciun fișier de configurare nu va fi citit după acel fișier.
  • Dacă opțiunea GLOBAL_RCS nu este setată în niciunul dintre fișiere, niciun fișier de configurare globală (/etc/zsh/*) nu va fi citit după acel fișier.

La pornire, Zsh va citi în mod implicit comenzile din următoarele fișiere în această ordine, cu condiția ca acestea să existe.

  • /etc/zsh/zshenv Utilizat pentru setarea variabilelor de mediu pentru toți utilizatorii; nu trebuie să conțină comenzi care produc ieșire sau care presupun că shell-ul este atașat la un TTY. Atunci când acest fișier există, el va fi întotdeauna citit; acest lucru nu poate fi anulat.
  • $ZDOTDIR/.zshenv Utilizat pentru setarea variabilelor de mediu ale utilizatorilor; nu trebuie să conțină comenzi care produc ieșire sau care presupun că shell-ul este atașat la un TTY. Atunci când acest fișier există, va fi întotdeauna citit.
  • /etc/zsh/zprofile Utilizat pentru executarea comenzilor la pornire pentru toți utilizatorii; va fi citit la pornirea ca shell de conectare. Vă rugăm să rețineți că pe Arch Linux, în mod implicit conține o singură linie care are ca sursă /etc/profile. Consultați avertismentul de mai jos înainte de a dori să o eliminați!
    • /etc/profile Acest fișier ar trebui să provină de la toate shell-urile compatibile POSIX sh la autentificare: stabilește $PATH și alte variabile de mediu și setări specifice aplicației (/etc/profile.d/*.sh) la autentificare.
  • $ZDOTDIR/.zprofile Utilizat pentru executarea comenzilor utilizatorului la pornire, va fi citit la pornirea ca shell de autentificare. Utilizat de obicei pentru a porni automat sesiunile grafice și pentru a seta variabilele de mediu la nivelul sesiunii.
  • /etc/zsh/zshrc Utilizat pentru setarea configurației shell-ului interactiv și executarea comenzilor pentru toți utilizatorii, va fi citit la pornire ca un shell interactiv.
  • $ZDOTDIR/.zshrc Utilizat pentru setarea configurației shell-ului interactiv al utilizatorului și executarea comenzilor, va fi citit la pornire ca un shell interactiv.
  • /etc/zsh/zlogin Utilizat pentru executarea comenzilor pentru toți utilizatorii la sfârșitul progresului inițial, va fi citit la pornirea ca un shell de conectare.
  • $ZDOTDIR/.zlogin Utilizat pentru executarea comenzilor utilizatorului la sfârșitul progresului inițial, va fi citit la pornirea ca un shell de conectare. Utilizat de obicei pentru a porni automat utilitățile de linie de comandă. Nu ar trebui să fie utilizat pentru a porni automat sesiuni grafice, deoarece în acest moment sesiunea ar putea conține configurația destinată doar unui shell interactiv.
  • $ZDOTDIR/.zlogout Utilizat pentru a executa comenzi la ieșirea unui shell de logare.
  • /etc/zsh/zlogout Utilizat pentru a executa comenzi pentru toți utilizatorii la ieșirea unui shell de logare.

Vezi reprezentarea grafică.

Notă:

  • $HOME/.profile nu face parte din fișierele de pornire Zsh și nu este accesat de Zsh decât dacă Zsh este invocat ca sh sau ksh și pornit ca un shell de conectare. Pentru mai multe detalii despre modurile de compatibilitate sh și ksh, consultați zsh(1) § COMPATIBILITY.
  • Cărările folosite în pachetul zsh din Arch sunt diferite de cele implicite folosite în paginile de manual (FS#48992).
Avertizare: Nu eliminați linia implicită de o linie din /etc/zsh/zprofile, altfel se va rupe integritatea altor pachete care furnizează unele scripturi din /etc/profile.d/.

Configurați Zsh

Deși Zsh este utilizabil din fabrică, este aproape sigur că nu este configurat așa cum ar dori să îl folosească majoritatea utilizatorilor. Dar, datorită cantității mari de personalizare disponibilă în Zsh, configurarea lui Zsh poate fi o experiență descurajantă și consumatoare de timp.

Simplu .zshrc

Includeți mai jos un exemplu de fișier de configurare. Acesta oferă un set decent de opțiuni implicite, precum și exemple de multe moduri în care Zsh poate fi personalizat. Pentru a utiliza această configurație, salvați-o ca un fișier numit .zshrc.

Sfat: Aplicați modificările fără a fi nevoie să vă deconectați și apoi să vă conectați din nou rulând source ~/.zshrc.

Iată un simplu .zshrc:

~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Acest lucru va seta promptul implicit pe tema waltersprompt walters

Vezi #Teme de prompt pentru mai multe detalii despre sistemul de teme de prompt.

Configurarea $PATH

Zsh leagă variabila PATH de o matrice path. Acestea sunt sincronizate automat. Acest lucru ne permite să manipulăm cu ușurință PATH prin simpla modificare a matricei. Consultați A User’s Guide to the Z-Shell pentru detalii.

Linia typeset -U PATH path, unde -U înseamnă unic, instruiește shell-ul să elimine duplicatele atât din $PATH cât și din $path:

~/.zshenv
typeset -U PATH pathpath=("$HOME/.local/bin" /altele/lucruri/în/path "$path")export PATH

Comandă de completare

Poate cea mai interesantă caracteristică a lui Zsh sunt abilitățile sale avansate de autocompletare. Cel puțin, activați autocompletarea în .zshrc. Pentru a activa autocompletarea, adăugați următoarele la ~/.zshrc:

~/.zshrc
autoload -Uz compinitcompinit

Configurația de mai sus include completarea numelor de gazdă ssh/scp/sftp, dar pentru ca această caracteristică să funcționeze, utilizatorii nu trebuie să activeze hashing-ul de nume de gazdă al lui ssh (i.e. opțiunea HashKnownHosts în configurația clientului ssh).

Pentru autocompletare cu o interfață condusă cu ajutorul tastelor săgeată, adăugați următoarele la:

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

Pentru a activa meniul, apăsați Tab de două ori.

Pentru autocompletarea comutatoarelor din linia de comandă pentru aliasuri, adăugați următoarele la:

~/.zshrc
setopt COMPLETE_ALIASES

Pentru activarea autocompletării mediilor privilegiate în comenzile privilegiate (de ex.g. dacă completați o comandă care începe cu sudo, scripturile de completare vor încerca, de asemenea, să determine completările dvs. cu sudo), includeți:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Avertizare: Acest lucru va permite scripturilor de completare Zsh să ruleze comenzi cu privilegii sudo. Nu ar trebui să activați acest lucru dacă folosiți scripturi de autocompletare nesigure.
Notă: Acest tip special de completare conștientă de context este disponibil doar pentru un număr mic de comenzi.

Legături de taste

Zsh nu folosește readline, în schimb folosește propriul și mai puternicul său editor de linii Zsh (ZLE). Acesta nu citește /etc/inputrc sau ~/.inputrc. Citiți O privire mai atentă la editorul de linii zsh și crearea de widget-uri personalizate pentru o introducere în configurarea ZLE.

ZLE are un mod Emacs și un mod vi. Dacă una dintre variabilele de mediu VISUAL sau EDITOR conține șirul vi, atunci va fi utilizat modul vi; în caz contrar, va fi utilizat în mod implicit modul Emacs. Setați modul în mod explicit cu bindkey -e sau bindkey -v pentru modul Emacs, respectiv pentru modul vi.

Legăturile de taste sunt atribuite prin maparea unei secvențe de evadare care corespunde unei apăsări de taste la un widget ZLE. Widget-urile disponibile, cu descrieri ale acțiunilor lor și legăturile de taste implicite, sunt listate în zshzle(1) § STANDARD WIDGETS și zshcontrib(1) § ZLE FUNCTIONS.

Modalitatea recomandată pentru a seta legăturile de taste în Zsh este folosirea capacităților de șir de caractere din terminfo(5). De exemplu:

~/.zshrc
# creați un hash compatibil cu zkbd;# pentru a adăuga alte chei la acest hash, consultați: 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}"${terminfo}"${terminfo}"${terminfo}"${terminfo}"${terminfo}"${terminfo}"${terminfo}"# configurați cheia în consecință}" ]] && bindkey -- "${key}" "beginning-of-line}" ]] && bindkey -- "${key}" end-of-line}" ]] && bindkey -- "${key}" overwrite-mode}" ]] && bindkey -- "${key}" backward-delete-char}" ]] && bindkey -- "${key}" delete-char}" ]] && bindkey -- "${key}" up-line-or-history}" ]] && bindkey -- "${key}" down-line-or-history}" ]] && bindkey -- "${key}" backward-char}" ]] && bindkey -- "${key}" forward-char}" ]] && bindkey -- "${key}" begin-of-buffer-or-history}" ]] && bindkey -- "${key}" end-of-buffer-or-history}" ]] && bindkey -- "${key}" reverse-menu-complete# În cele din urmă, asigurați-vă că terminalul se află în modul aplicație, când zle este# activ. Numai atunci sunt valabile valorile din $terminfo.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_starstartadd-zle-hook-widget -Uz zle-line-finish zle_application_mode_stopfi 

Cercetare istoric

Trebuie să configurați matricea key și să vă asigurați că ZLE intră în modul aplicație pentru a utiliza următoarele instrucțiuni; a se vedea #Key bindings.

Pentru a activa căutarea în istoric adăugați aceste linii în fișierul .zshrc:

~/.zshrc
autoload -Uz up-line-or-beginning-search down-line-or-beginning-searchzle -N up-line-or-beginning-searchzle -N down-line-or-beginning-search}" ]] && bindkey -- "${key}" up-line-or-beginning-search}" ]] && bindkey -- "${key}" down-line-or-beginning-search

Făcând acest lucru, la apăsarea tastelor Up sau Down vor fi afișate numai comenzile trecute care corespund liniei curente până la poziția curentă a cursorului.

Modificatorii Shift, Alt, Ctrl și Meta

Terminalele compatibile cu xterm pot folosi definițiile extinse ale tastelor din user_caps(5). Acestea sunt combinații de Shift, Alt, Ctrl și Meta împreună cu Up, Down, Left, Right, PageUp, PageDown, Home, End sau Del. Consultați sursa zkbd pentru o listă de nume recomandate pentru tastele modificatoare și combinațiile de taste.

De exemplu, pentru ca Ctrl+Left să treacă la începutul cuvântului anterior și Ctrl+Right să treacă la începutul cuvântului următor:

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

Prompturi

Zsh oferă opțiunile de a folosi o temă de prompt sau, pentru utilizatorii care sunt nemulțumiți de teme (sau doresc să le extindă utilitatea), posibilitatea de a construi un prompt personalizat.

Teme de prompt

Temele de prompt sunt o modalitate rapidă și ușoară de a configura un prompt colorat în Zsh. Consultați zshcontrib(1) § PROMPT THEMES pentru informații despre temele de prompt și despre cum să vă scrieți propria temă.

Pentru a utiliza o temă, asigurați-vă că sistemul de teme de prompt este setat la autoload în .zshrc. Acest lucru se poate face prin adăugarea acestor linii la:

~/.zshrc
autoload -Uz promptinitpromptinit

Telemele de prompt disponibile sunt listate prin rularea comenzii:

$ prompt -l

De exemplu, pentru a utiliza tema walters, introduceți:

$ prompt walters

Pentru a previzualiza toate temele disponibile, utilizați această comandă:

$ prompt -p
Instalarea manuală a temelor prompt

Este posibilă instalarea manuală a temelor, fără instrumente externe de gestionare a configurației. Pentru o instalare locală, mai întâi creați un dosar și adăugați-l la matricea fpath, de exemplu:

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

Crearea unei legături simbolice a fișierului dvs. de temă în acest dosar:

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

Dacă în schimb doriți să instalați o temă la nivel global, faceți:

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

Acum ar trebui să o puteți activa folosind:

$ prompt mytheme

Dacă totul funcționează, puteți să vă editați .zshrc în consecință.

Adaugarea de teme de prompt fără un fișier separat pentru fiecare

În plus față de adăugarea unei teme de prompt prin intermediul propriului fișier, este posibil să adăugați teme din interiorul unui alt fișier (cum ar fi .zshrc al dumneavoastră), de exemplu:

~/.zshrc
# Încărcați promptinitautoload -Uz promptinit && promptinit# Definiți temaprompt_mytheme_setup() { PS1="%~%#"}# Adăugați tema la promptsprompt_themes+=( mytheme )# Încărcați temaprompt mytheme

Customized prompt

Tango-view-fullscreen.pngAcest articol sau secțiune necesită extindere.Tango-view-fullscreen.png

Motivul: Adăugați un exemplu simplu și incolor PROMPT. (Discutați în Talk:Zsh#)

În plus față de un prompt principal de stânga PS1 (PROMPT, prompt) care este comun tuturor shell-urilor, Zsh suportă și un prompt de dreapta RPS1 (RPROMPT). Aceste două variabile sunt cele pe care veți dori să le setați la o valoare personalizată.

Alte prompturi cu scop special, cum ar fi PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) și SPROMPT, sunt explicate în zshparam(1) § PARAMETRI UTILIZAȚI DE SHELL.

Toate prompturile pot fi personalizate cu evadări de prompt. Evadările de prompt disponibile sunt enumerate în zshmisc(1) § EXPANZAREA SECVENȚELOR DE EVADARE DE PROMPT.

Colors

Zsh stabilește culorile în mod diferit față de Bash, nu trebuie să folosiți secvențe de evacuare ANSI alambicate sau capacitățile terminalului din terminfo(5). Zsh oferă scăpări de prompt convenabile pentru a seta culoarea de prim-plan, culoarea de fundal și alte efecte vizuale; a se vedea zshmisc(1) § Efecte vizuale pentru o listă a acestora și descrierile lor.

Corile pot fi specificate folosind un număr întreg zecimal, numele uneia dintre cele opt culori cele mai larg acceptate sau ca un # urmat de un triplet RGB în format hexazecimal. Pentru mai multe detalii, consultați descrierea lui fg=colour în zshzle(1) § CHARACTER HIGHLIGHTING pentru mai multe detalii.

Majoritatea terminalelor acceptă următoarele culori după nume:

.

Nume Număr
black 0
red 1
green 2
yellow 3
blue 4
magenta 5
cyan 6
white 7

Numerele de culori 0-255 pentru emulatoarele de terminal compatibile cu xterm 256 culori pot fi găsite în fișierul xterm-.256color chart.

Cu o variabilă de mediu TERM corect setată, numărul maxim de culori suportate de terminal poate fi găsit din baza de date terminfo(5) folosind echoti colors. În cazul culorilor pe 24 de biți, verificați, de asemenea, variabila de mediu COLORTERM cu print $COLORTERM. Dacă aceasta returnează 24bit sau truecolor, atunci terminalul dvs. suportă 16777216 (224) culori, chiar dacă terminfo afișează un număr mai mic.

Notă:

  • Cuvintele 0-15 pot diferi între emulatoarele de terminale și schemele de culori utilizate de acestea.
  • Multe emulatoare de terminale afișează boldul cu o culoare mai aprinsă.
Sfat:

  • Eșapajele de la prompt pot fi testate cu comanda print -P "prompt escapes", de exemplu:
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • Dacă folosiți culori pe 24 de biți, este posibil să doriți să încărcați modulul zsh/nearcolor în terminalele care nu le suportă. De ex:
    }" -eq '16777216' ]] || zmodload zsh/nearcolor

    Consultați zshmodules(1) § THE ZSH/NEARCOLOR MODULE pentru detalii despre modulul zsh/nearcolor.

Exemplu

Acesta este un exemplu de prompt cu două fețe:

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

Și iată cum va fi afișat:

username@host ~ %

Pentru a utiliza culori din intervalul 16-255 și culoarea adevărată pe 24 de biți, puteți folosi numărul de la 0 la 255 atribuit culorii dorite și, respectiv, codul hexazecimal al acesteia:

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

Eșantion .zshrc files

    • Pentru a obține aceeași configurație ca în cazul versiunilor ISO lunare (care utilizează Zsh în mod implicit), instalați grml-zsh-config. Acesta include numeroasele ajustări și optimizări avansate din grml.
    • https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – configurare de bază, cu prompt dinamic și titlu de fereastră/hardinfo.
    • https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc cu multiple caracteristici, asigurați-vă că verificați comentariile în el. Caracteristici notabile: funcție de confirmare pentru a se asigura că utilizatorul dorește să execute poweroff, reboot sau hibernare, suport pentru GIT în prompt (realizat fără vcsinfo), completare tab cu meniu, tipărirea comenzii curente executate în bara de titlu a ferestrei și multe altele.

    Vezi dotfiles#User repositories pentru mai multe.

    Tips and tricks

    Autostart X at login

    Vezi xinit#Autostart X at login.

    Restabilirea setărilor terminalului după ce un program iese anormal

    Multe programe schimbă starea terminalului și, adesea, nu restaurează setările terminalului la ieșirea anormală (de exemplu, când se blochează sau întâlnesc SIGINT).

    Acest lucru poate fi rezolvat de obicei prin executarea reset(1):

$ reset

Secțiunile următoare descriu modalități de a evita necesitatea de a reseta manual terminalul.

Comanda ttyctl

Comanda ttyctl poate fi utilizată pentru a „îngheța/dezgheța” terminalul. Pentru a îngheța shell-ul interactiv la lansare, utilizați următoarele:

~/.zshrc
ttyctl -f

Reinițializarea terminalului cu ajutorul secvențelor de evadare

Seturile alternative de caractere de desenare liniară pot da peste cap terminalul într-un mod pe care ttyctl nu îl poate preveni.

O soluție simplă este ieșirea secvențelor de evadare care resetează terminalul din funcția de cârlig precmd, astfel încât acestea să fie executate de fiecare dată înainte ca promptul să fie desenat. De exemplu, utilizarea secvenței de evacuare \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> pentru a reveni la un dosar vizitat. Utilizați autocompletarea după liniuță. Acest lucru se dovedește foarte util dacă se utilizează meniul de autocompletare.

Notă: Acest lucru nu va funcționa dacă aveți mai multe sesiuni zsh deschise și încercați să cd, din cauza unui conflict în cazul în care ambele sesiuni scriu în același fișier.

cdr

cdr vă permite să schimbați directorul de lucru într-un director de lucru anterior dintr-o listă menținută automat. Acesta stochează toate intrările în fișiere care sunt menținute între sesiuni și (în mod implicit) între emulatoarele de terminal din sesiunea curentă.

Vezi zshcontrib(1) § REMEMBERING RECENT DIRECTORIES pentru instrucțiuni de configurare.

Comandă de ajutor

Dincolo de Bash, Zsh nu permite o comandă încorporată help, în schimb oferă run-help. În mod implicit, run-help este un alias pentru man, poate fi executată fie manual prin preaprecierea ei la o comandă, fie poate fi invocată pentru comanda tastată în acel moment cu comenzile rapide de la tastatură Alt+h sau Esc h.

Din moment ce în mod implicit este doar un alias pentru man, va funcționa doar pentru comenzi externe. Pentru a-i îmbunătăți funcționalitatea, astfel încât să funcționeze în cazul construcțiilor de shell și al altor caracteristici de shell, trebuie să utilizați funcția run-help. Consultați zshcontrib(1) pentru mai multe informații despre run-help și funcțiile sale asistente.

În primul rând încărcați funcția run-help și apoi eliminați aliasul run-help existent. Pentru comoditate, help poate fi alipit la run-help. De exemplu, adăugați următoarele la zshrc:

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

Funcțiile asistente trebuie activate separat:

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

De exemplu, comanda run-help git commit va deschide acum pagina de manual git-commit(1) în loc de git(1).

Refacere persistentă

În mod normal, compinit nu va găsi automat noi executabile în $PATH. De exemplu, după ce instalați un nou pachet, fișierele din /usr/bin/ nu vor fi incluse imediat sau automat în completare. Astfel, pentru ca aceste noi executabile să fie incluse, se va rula:

$ rehash

Acest "rehash" poate fi setat să se întâmple automat. Pur și simplu includeți următoarele în zshrc:

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

Rehash la cerere

Ca și mai sus, însă pacman poate fi configurat cu cârlige pentru a solicita automat un rehash, ceea ce nu implică penalizarea de performanță a rehashing-ului constant ca mai sus. Pentru a activa acest lucru, creați directorul /etc/pacman.d/hooks, și un director /var/cache/zsh, apoi creați un fișier hook:

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

Acest lucru menține data de modificare a fișierului /var/cache/zsh/pacman în concordanță cu ultima dată când un pachet a fost instalat, actualizat sau eliminat. Apoi, zsh trebuie convins să își refacă propriul cache de comenzi atunci când nu mai este actualizat, adăugând la ~/.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

Dacă cârligul precmd este declanșat înainte ca /var/cache/zsh/pacman să fie actualizat, este posibil ca finalizarea să nu funcționeze până când nu este inițiat un nou prompt. Rularea unei comenzi goale, de exemplu apăsarea enter, ar trebui să fie suficientă.

Alternativă de rehash la cerere folosind SIGUSR1

Ca și mai sus, însă fișierul de cârlig arată astfel:

/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
Avertizare: Acest lucru trimite SIGUSR1 la toate instanțele zsh care rulează. Rețineți că comportamentul implicit pentru SIGUSR1 este terminate, astfel încât atunci când configurați pentru prima dată acest lucru, toate instanțele zsh care rulează zsh ale tuturor utilizatorilor (inclusiv shell-urile de autentificare) se vor încheia dacă nu au furnizat capcana de mai jos.
~/.zshrc
TRAPUSR1() { rehash }

Capcana funcțională de mai sus poate fi înlocuită cu o capcană de listă trap 'rehash' USR1. Vezi zshmisc(1) § Funcții Trap pentru diferențele dintre tipurile de capcane.

Această metodă va rehash instantaneu toate instanțele zsh, eliminând necesitatea de a apăsa enter pentru a declanșa precmd.

Bind key to ncurses application

Bind a ncurses application to a keystroke, but it will not accept interaction. Utilizați variabila BUFFER pentru a o face să funcționeze. Următorul exemplu permite utilizatorilor să deschidă ncmpcpp folosind Alt+\:

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

\a. De exemplu:

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

va seta titlul la

My xterm title

O modalitate simplă de a avea un titlu dinamic este de a seta titlul în funcțiile cârlig precmd și preexec. Consultați zshmisc(1) § Funcții cârlig pentru o listă a funcțiilor cârlig disponibile și descrierile lor.

Prin utilizarea print -P puteți profita în plus de scăpările promptului Zsh.

Sfat:

  • Imprimarea titlului poate fi împărțită în mai multe comenzi atâta timp cât acestea sunt secvențiale.
  • GNU Screen trimite titlul xterm la hardstatus (%h). Dacă doriți să folosiți scăpările de șiruri de caractere ale lui Screen (de exemplu, pentru culori) trebuie să setați hardstatus cu secvența de scăpare \e_\e\. În caz contrar, dacă se folosesc scăpări de șiruri de caractere în \e]2;\a, emulatorul de terminal va obține un titlu confuz datorită faptului că este incapabil să interpreteze scăpările de șiruri de caractere ale Screen.
Notă:

  • Nu folosiți opțiunea -P din print la imprimarea variabilelor pentru a preveni ca acestea să fie interpretate ca scăpări de prompt.
  • Utilizați stegulețul de expansiune a parametrilor q la imprimarea variabilelor pentru a preveni ca acestea să fie analizate ca secvențe de evadare.
~/.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{-}%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

Titlul filei din emulatorul de terminal

Câteva emulatoare de terminal și multiplexoare acceptă setarea titlului filei. Secvențele de evadare depind de terminal:

Terminal Secvențe de evadare Descriere
GNU Screen \ek\e\ Titlul ferestrei ecranului (%t).
Konsole \e]30;\a Titlul filei lui Konsole.

Detecția mediului shell

Vezi un depozit despre detecția mediului shell pentru teste de detecție a mediului shell. Acesta include login/interactive shell, sesiune Xorg, TTY și sesiune SSH.

/dev/tcp echivalent: ztcp

Utilizați modulul zsh/net/tcp:

$ zmodload zsh/net/tcp

Acum puteți stabili conexiuni TCP:

$ ztcp example.com 80

Shortcut pentru a ieși din shell pe o linie de comandă parțială

În mod implicit, Ctrl+d nu va închide shell-ul dacă linia de comandă este umplută, acest lucru îl rezolvă:

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

Extensii terțe

Cadre de configurare

Notă: Cadrele introduc un nivel de abstractizare și complexitate. Ele pot introduce, și adesea introduc, un comportament nedefinit. În caz de întrerupere a shell-ului, primul pas de depanare ar trebui să fie revenirea la shell-ul simplu.
  • oh-my-zsh – Un cadru popular, condus de comunitate, pentru gestionarea configurației Zsh. Vine la pachet cu o tonă de funcții utile, ajutoare, plugin-uri, teme.

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

  • Prezto – Un cadru de configurare pentru Zsh. Vine cu module, îmbogățind mediul interfeței liniei de comandă cu valori implicite sănătoase, alias-uri, funcții, autocompletare și teme de prompt.

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

  • ZIM – Un cadru de configurare cu viteză fulminantă și extensii modulare. Zim este foarte ușor de personalizat și vine cu un set bogat de module și caracteristici, fără a face compromisuri în ceea ce privește viteza sau funcționalitatea.

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

Manageri de plugin-uri

  • Antibody – Un manager de plugin-uri axat pe performanță, similar cu Antigen.

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

  • zinit (anterior „zplugin”) – Manager flexibil de plugin-uri Zsh cu fpath curat, rapoarte, management al finalizării, mod turbo

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

  • Antigen – Un manager de plugin-uri pentru Zsh, inspirat de oh-my-zsh și vundle. ABANDONAT

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

  • zgen – Un manager de plugin-uri ușor și simplu pentru Zsh. ABANDONED

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

  • zplug – Un manager de plugin-uri de ultimă generație pentru Zsh. ABANDONED

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

Fish-like syntax highlighting and autosuggestions

Fish oferă o evidențiere foarte puternică a sintaxei din shell și autosugestii. Pentru a le folosi pe amândouă în Zsh, puteți instala zsh-syntax-highlighting, zsh-autosuggestions și, în cele din urmă, să obțineți ca sursă unul sau ambele scripturi furnizate din zshrc:

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

Gestionatorul „command not found”

Tango-go-next.pngAcest articol sau secțiune este un candidat pentru a fi mutat în #Tips and tricks.Tango-go-next.png

Note: Funcția personalizată care utilizează pacman -F nu este o „extensie terță parte”. Doar chestiunile din pkgfile își au locul în această secțiune. (Discutați în Talk:Zsh#)

pacman -F „command not found” handler

pacman include o funcționalitate de căutare a pachetelor care conțin un fișier. Următorul handler command-not-found va folosi pacman direct pentru a căuta pachetele corespunzătoare atunci când este executată o comandă necunoscută.

~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: comanda nu a fost găsită: %s' "$cmd" # tipărește comanda nu a fost găsită cât mai repede, apoi caută pachetefiles=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if ((( ${#files} )); thenprintf '\r%s poate fi găsit în următoarele pachete:\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: /%s\n' "$repo" "$pachet" "$versiune" "$fișier "doneelseprintf '\n'fireturn 127}
Notă: Baza de date a fișierelor din pacman este separată de baza de date normală de sincronizare și trebuie să fie preluată folosind pacman -Fy. Consultați pacman#Search for a package that contains a specific file pentru detalii.

pkgfile „command not found” handler

pkgfile include un fișier script Zsh care oferă o funcție command_not_found_handler care va căuta automat în baza de date pkgfile la introducerea unei comenzi nerecunoscute.

Trebuie să creați sursa scriptului pentru a-l activa. De exemplu:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
Notă: Este posibil ca baza de date pkgfile să trebuiască să fie actualizată înainte ca acest lucru să funcționeze. Consultați pkgfile#Installation pentru detalii.

Dezinstalare

Schimbați shell-ul implicit înainte de a elimina pachetul zsh.

Avertisment: Dacă nu se respectă procedura de mai jos, este posibil ca utilizatorii să nu mai aibă acces la un shell funcțional.

Executați următoarea comandă:

$ chsh -s /bin/bash user

Utilizați-o pentru fiecare utilizator cu zsh setat ca shell de conectare (inclusiv root, dacă este necesar). Când se termină, pachetul zsh poate fi eliminat.

Alternativ, schimbați shell-ul implicit înapoi la Bash prin editarea /etc/passwd ca root.

Avertizare: Se recomandă cu tărie utilizarea vipw(8) atunci când se editează /etc/passwd, deoarece ajută la prevenirea intrărilor invalide și/sau a erorilor de sintaxă.

De exemplu, modificați următoarele:

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

Acesta:

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

Vezi și

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.