Zsh

Zsh jest potężną powłoką, która działa zarówno jako powłoka interaktywna jak i interpreter języka skryptowego. Będąc zgodnym z POSIX-owym sh (nie domyślnie, tylko przy wydaniu emulate sh), oferuje zalety takie jak ulepszone uzupełnianie tabulatorów i globbing.

Zsh FAQ oferuje więcej powodów do używania Zsh.

Instalacja

Przed rozpoczęciem, użytkownicy mogą chcieć zobaczyć, jaka powłoka jest obecnie używana:

$ echo $SHELL

Zainstaluj pakiet zsh. Aby uzyskać dodatkowe definicje uzupełniania, zainstaluj także pakiet zsh-completions.

Konfiguracja początkowa

Upewnij się, że Zsh został zainstalowany poprawnie, wykonując następujące polecenie w terminalu:

$ zsh

Powinieneś teraz zobaczyć zsh-newuser-install, który przeprowadzi cię przez podstawową konfigurację. Jeśli chcesz to pominąć, naciśnij q. Jeśli go nie zobaczyłeś, możesz wywołać go ręcznie za pomocą:

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Uwaga: Upewnij się, że rozmiar twojego terminala wynosi co najmniej 72×15, w przeciwnym razie zsh-newuser-install nie zostanie uruchomiony.

Uczynienie zsh twoją domyślną powłoką

Zmień swoją powłokę na /usr/bin/zsh. Zobacz Powłoka wiersza poleceń#Zmiana domyślnej powłoki.

Wskazówka: Jeśli zastąpisz bash, użytkownicy mogą chcieć przenieść część kodu z ~/.bashrc do ~/.zshrc (np. znak zachęty i aliasy) i z ~/.bash_profile do ~/.zprofile (np. kod, który uruchamia X Window System).

Pliki uruchamiania/wyłączania

Wskazówka:

  • Zobacz A User’s Guide to the Z-Shell, aby uzyskać wyjaśnienia dotyczące powłok interaktywnych i logowania oraz tego, co należy umieścić w plikach startowych.
  • Możesz rozważyć zaimplementowanie standardowej ścieżki dla plików konfiguracyjnych Zsh.
Uwaga:

  • Jeśli $ZDOTDIR nie jest ustawione, zamiast niego używane jest $HOME.
  • Jeśli opcja RCS nie jest ustawiona w żadnym z plików, żadne pliki konfiguracyjne nie będą odczytywane po tym pliku.
  • Jeśli opcja GLOBAL_RCS nie jest ustawiona w żadnym z plików, żadne pliki konfiguracji globalnej (/etc/zsh/*) nie będą odczytywane po tym pliku.

Podczas uruchamiania Zsh będzie domyślnie odczytywał polecenia z następujących plików w tej kolejności, o ile istnieją.

  • /etc/zsh/zshenv Służy do ustawiania zmiennych środowiskowych dla wszystkich użytkowników; nie powinien zawierać poleceń produkujących wyjście ani zakładających, że powłoka jest podłączona do TTY. Gdy ten plik istnieje, zawsze będzie odczytywany, nie można tego zmienić.
  • $ZDOTDIR/.zshenv Służy do ustawiania zmiennych środowiskowych użytkownika; nie powinien zawierać poleceń wytwarzających wyjście ani zakładających, że powłoka jest podłączona do TTY. Gdy ten plik istnieje, zawsze będzie odczytywany.
  • /etc/zsh/zprofile Służy do wykonywania poleceń przy starcie dla wszystkich użytkowników, będzie odczytywany przy uruchamianiu jako powłoka logowania. Proszę zauważyć, że na Arch Linuksie, domyślnie zawiera ona jedną linię, której źródłem jest /etc/profile. Zobacz ostrzeżenie poniżej, zanim zechcesz to usunąć!
    • /etc/profile Ten plik powinien być pobierany przez wszystkie powłoki zgodne z POSIX sh przy logowaniu: ustawia $PATH i inne zmienne środowiskowe oraz ustawienia specyficzne dla aplikacji (/etc/profile.d/*.sh) przy logowaniu.
  • $ZDOTDIR/.zprofile Służy do wykonywania poleceń użytkownika przy starcie, będzie czytany przy starcie jako powłoka logowania. Zazwyczaj używane do autostartu sesji graficznych i ustawiania zmiennych środowiskowych dla całej sesji.
  • /etc/zsh/zshrc Służy do ustawiania konfiguracji powłoki interaktywnej i wykonywania poleceń dla wszystkich użytkowników, zostanie odczytane przy uruchamianiu jako powłoka interaktywna.
  • $ZDOTDIR/.zshrc Służy do ustawiania konfiguracji powłoki interaktywnej użytkownika i wykonywania poleceń, zostanie odczytane przy uruchamianiu jako powłoka interaktywna.
  • /etc/zsh/zlogin Służy do wykonywania poleceń dla wszystkich użytkowników na końcu początkowego postępu, będzie odczytane przy uruchamianiu jako powłoka logowania.
  • $ZDOTDIR/.zlogin Służy do wykonywania poleceń użytkownika na końcu początkowego postępu, będzie odczytane przy uruchamianiu jako powłoka logowania. Zazwyczaj używane do autostartu narzędzi wiersza poleceń. Nie powinno być używane do autostartu sesji graficznych, ponieważ w tym momencie sesja może zawierać konfigurację przeznaczoną tylko dla powłoki interaktywnej.
  • $ZDOTDIR/.zlogout Służy do wykonywania poleceń, gdy powłoka logowania kończy pracę.
  • /etc/zsh/zlogout Służy do wykonywania poleceń dla wszystkich użytkowników, gdy powłoka logowania kończy pracę.

Zobacz reprezentację graficzną.

Uwaga:

  • $HOME/.profile nie jest częścią plików startowych Zsh i nie jest pozyskiwane przez Zsh, chyba że Zsh jest wywoływany jako sh lub ksh i uruchamiany jako powłoka logowania. Po więcej szczegółów na temat trybów kompatybilności sh i ksh odnieś się do zsh(1) § COMPATIBILITY.
  • Ścieżki używane w pakiecie zsh Archa są różne od domyślnych używanych na stronach man (FS#48992).
Ostrzeżenie: Nie usuwaj domyślnej jednej linii w /etc/zsh/zprofile, w przeciwnym razie naruszy to integralność innych pakietów, które udostępniają pewne skrypty w /etc/profile.d/.

Konfigurowanie zsh

Mimo że zsh jest użyteczny po wyjęciu z pudełka, prawie na pewno nie jest skonfigurowany w sposób, w jaki większość użytkowników chciałaby go używać. Jednak ze względu na ilość dostępnych w Zsh ustawień, konfigurowanie Zsh może być zniechęcającym i czasochłonnym doświadczeniem.

Proste .zshrc

Poniżej znajduje się przykładowy plik konfiguracyjny. Zapewnia on przyzwoity zestaw opcji domyślnych, jak również daje przykłady wielu sposobów, na jakie Zsh może być dostosowany. Aby użyć tej konfiguracji, zapisz ją jako plik o nazwie .zshrc.

Wskazówka: Zastosuj zmiany bez konieczności wylogowywania się, a następnie ponownego wchodzenia, uruchamiając source ~/.zshrc.

Oto prosty .zshrc:

~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# To ustawi domyślną zachętę na temat walters themeprompt walters

Zobacz #tematy prompt dla więcej szczegółów o systemie motywów prompt.

Konfigurowanie $PATH

Zsh wiąże zmienną PATH z tablicą path. Są one automatycznie synchronizowane. To pozwala nam łatwo manipulować PATH przez proste modyfikowanie tablicy. Zobacz A User’s Guide to the Z-Shell po szczegóły.

Linia typeset -U PATH path, gdzie -U oznacza unikalny, instruuje powłokę, by odrzucała duplikaty zarówno z $PATH jak i $path:

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

Uzupełnianie poleceń

Prawdopodobnie najbardziej zniewalającą cechą Zsh są jego zaawansowane możliwości autouzupełniania. Przynajmniej włącz autouzupełnianie w .zshrc. Aby włączyć autouzupełnianie, dodaj poniższe do swojego ~/.zshrc:

~/.zshrc
autoload -Uz compinitcompinit

Powyższa konfiguracja obejmuje uzupełnianie nazw hostów ssh/scp/sftp, ale aby ta funkcja działała, użytkownicy nie mogą włączyć haszowania nazw hostów ssh (tj.tj. opcja HashKnownHosts w konfiguracji klienta ssh).

Dla autouzupełniania z interfejsem opartym na klawiszach strzałek, dodaj następujące do:

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

Aby aktywować menu, naciśnij Tab dwa razy.

Dla autouzupełniania przełączników wiersza poleceń dla aliasów, dodaj następujące do:

~/.zshrc
setopt COMPLETE_ALIASES

Dla włączenia autouzupełniania środowisk uprzywilejowanych w poleceniach uprzywilejowanych (np.np. jeśli wykonujesz polecenie zaczynające się od sudo, skrypty uzupełniające będą również próbowały określić twoje uzupełnienia za pomocą sudo), include:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Ostrzeżenie: Pozwoli to skryptom uzupełniającym Zsh uruchamiać polecenia z uprawnieniami sudo. Nie powinieneś tego włączać, jeśli używasz niezaufanych skryptów autouzupełniania.
Uwaga: Ten specjalny rodzaj kontekstowego uzupełniania jest dostępny tylko dla małej liczby poleceń.

Wiązania klawiszy

Zsh nie używa readline, zamiast tego używa własnego i potężniejszego edytora linii Zsh (ZLE). Nie czyta on /etc/inputrc ani ~/.inputrc. Przeczytaj Bliższe spojrzenie na edytor linii zsh i tworzenie niestandardowych widżetów, aby zapoznać się z konfiguracją ZLE.

ZLE ma tryb Emacsa i tryb vi. Jeśli jedna ze zmiennych środowiskowych VISUAL lub EDITOR zawiera łańcuch vi, to zostanie użyty tryb vi; w przeciwnym razie domyślnie będzie to tryb Emacsa. Ustaw tryb jawnie za pomocą bindkey -e lub bindkey -v, odpowiednio dla trybu Emacs lub vi.

Wiązania klawiszy są przypisywane przez odwzorowanie sekwencji ucieczki odpowiadającej naciśnięciu klawisza na widżet ZLE. Dostępne widżety, z opisami ich działania i domyślnymi przypisaniami klawiszy, są wymienione w zshzle(1) § STANDARD WIDGETS i zshcontrib(1) § ZLE FUNCTIONS.

Zalecanym sposobem ustawiania przypisań klawiszy w Zsh jest użycie możliwości łańcuchowych z terminfo(5). Na przykład:

~/.zshrc
# utwórz hasz zgodny z zkbd;# aby dodać inne klucze do tego haszu, zobacz: 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}"# odpowiednio skonfiguruj klucz}" ]] && bindkey -- "${key}" begin-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# Na koniec, upewnij się, że terminal jest w trybie aplikacji, gdy zle jest# aktywne. Tylko wtedy wartości z $terminfo są ważne.if (( ${+terminfo} && ${+terminfo} )); thenautoload -Uz add-zle-hook-widgetfunction zle_application_mode_start { echoti smkx }function zle_application_mode_stop { echoti rmkx }add-zle-hook-widget -Uz zle-line-init zle_application_mode_startadd-zle-hook-widget -Uz zle-line-finish zle_application_mode_stopfi

Wyszukiwanie historii

Musisz ustawić tablicę key i upewnić się, że ZLE wchodzi w tryb aplikacji, aby użyć poniższych instrukcji; zobacz #Key bindings.

Aby włączyć wyszukiwanie historii, dodaj te linie do .zshrc pliku:

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

Dzięki temu, tylko przeszłe komendy pasujące do bieżącej linii aż do bieżącej pozycji kursora będą pokazywane po naciśnięciu klawiszy Up lub Down.

Modyfikatory Shift, Alt, Ctrl i Meta

terminale kompatybilne zxterm mogą używać rozszerzonych definicji klawiszy z user_caps(5). Są to kombinacje Shift, Alt, Ctrl i Meta razem z Up, Down, Left, Right, PageUp, PageDown, Home, End lub Del. Zapoznaj się ze źródłem zkbd, aby uzyskać listę zalecanych nazw dla klawiszy modyfikatorów i kombinacji klawiszy.

Na przykład, dla Ctrl+Left, aby przejść na początek poprzedniego słowa i Ctrl+Right, aby przejść na początek następnego słowa:

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

Prompts

Zsh oferuje opcje używania motywów podpowiedzi lub, dla użytkowników niezadowolonych z motywów (lub chcących rozszerzyć ich użyteczność), możliwość zbudowania własnej podpowiedzi.

Motywy podpowiedzi

Tematy podpowiedzi są szybkim i łatwym sposobem na ustawienie kolorowej podpowiedzi w Zsh. Zobacz zshcontrib(1) § PROMPT THEMES dla informacji o motywach zachęty i jak napisać swój własny motyw.

Aby użyć motywu, upewnij się, że system motywów zachęty jest ustawiony na autoload w .zshrc. Można to zrobić przez dodanie tych linii do:

~/.zshrc
autoload -Uz promptinitpromptinit

Dostępne motywy prompt są wymienione przez uruchomienie polecenia:

$ prompt -l

Na przykład, aby użyć motywu walters, wpisz:

$ prompt walters

Aby wyświetlić podgląd wszystkich dostępnych motywów, użyj polecenia:

$ prompt -p
Ręczne instalowanie motywów prompt

Możliwa jest ręczna instalacja motywów, bez zewnętrznych narzędzi menedżera konfiguracji. Dla lokalnej instalacji, najpierw stwórz folder i dodaj go do tablicy fpath, np:

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

Teraz stwórz dowiązanie symboliczne swojego pliku motywu w tym folderze:

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

Jeśli zamiast tego chcesz zainstalować motyw globalnie, zrób:

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

Teraz powinieneś być w stanie aktywować go używając:

$ prompt mytheme

Jeśli wszystko działa, możesz odpowiednio edytować swój .zshrc.

Dodawanie motywów podpowiedzi bez oddzielnego pliku dla każdego

Oprócz dodawania motywu podpowiedzi poprzez własny plik, jest możliwe dodawanie motywów z innego pliku (jak twój .zshrc), np:

~/.zshrc
# Załaduj promptinitautoload -.Uz promptinit && promptinit# Zdefiniuj themeprompt_mytheme_setup() { PS1="%~%#"}# Dodaj motyw do promptsysprompt_themes+=( mytheme )# Wczytaj themeprompt mytheme

Customized prompt

Tango-view-fullscreen.pngTen artykuł lub sekcja wymaga rozwinięcia.Tango-view-fullscreen.png

Uzasadnienie: Dodaj prosty bezbarwny PROMPT przykład. (Dyskusja w Talk:Zsh#)

Dodatkowo do podstawowej zachęty lewostronnej PS1 (PROMPT, prompt), która jest wspólna dla wszystkich powłok, Zsh obsługuje także zachętę prawostronną RPS1 (RPROMPT). Te dwie zmienne są tymi, które będziesz chciał ustawić na niestandardową wartość.

Inne zachęty specjalnego przeznaczenia, takie jak PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) i SPROMPT, są wyjaśnione w zshparam(1) § PARAMETRY UŻYWANE PRZEZ POWŁOKĘ.

Wszystkie zachęty mogą być dostosowywane za pomocą skrótów zachęty. Dostępne skróty podpowiedzi są wymienione w zshmisc(1) § ROZSZERZENIE SEKWENCJI PODpowiedzi.

Colors

Zsh ustawia kolory inaczej niż Bash, nie musisz używać zawiłych sekwencji ucieczki ANSI lub możliwości terminala z terminfo(5). Zsh zapewnia wygodne skróty klawiszowe do ustawiania koloru pierwszego planu, koloru tła i innych efektów wizualnych; zobacz zshmisc(1) § Efekty wizualne aby zapoznać się z ich listą i opisami.

Kolory mogą być podawane przy użyciu dziesiętnej liczby całkowitej, nazwy jednego z ośmiu najszerzej obsługiwanych kolorów lub jako #, po którym następuje tryplet RGB w formacie szesnastkowym. Zobacz opis fg=color w zshzle(1) § CHARACTER HIGHLIGHTING po więcej szczegółów.

Większość terminali obsługuje z nazwy następujące kolory:

.

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

Numery kolorów 0-255 dla emulatorów terminali zgodnych z xterm 256 kolorów można znaleźć w tabeli xterm-256color chart.

Przy poprawnie ustawionej zmiennej środowiskowej TERM, maksymalna liczba kolorów obsługiwanych przez terminal może być znaleziona w bazie terminfo(5) przy pomocy echoti colors. W przypadku kolorów 24-bitowych, sprawdź również zmienną środowiskową COLORTERM przy pomocy print $COLORTERM. Jeśli zwraca ona 24bit lub truecolor, to twój terminal obsługuje 16777216 (224) kolorów, nawet jeśli terminfo pokazuje mniejszą liczbę.

Uwaga:

  • Kolory 0-15 mogą się różnić między emulatorami terminali i używanymi przez nie schematami kolorów.
  • Wiele emulatorów terminali wyświetla pogrubienia jaśniejszym kolorem.
Wskazówka:

  • Ucieczki z promptów można przetestować za pomocą polecenia print -P "prompt escapes", na przykład:
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • Jeśli używasz 24-bitowych kolorów, możesz chcieć załadować moduł zsh/nearcolor w terminalach, które ich nie obsługują. Np:
    }" -eq '16777216' ]] || zmodload zsh/nearcolor

    Zobacz zshmodules(1) § THE ZSH/NEARCOLOR MODULE po szczegóły na temat modułu zsh/nearcolor.

Przykład

To jest przykład dwustronnego znaku zachęty:

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

A oto jak będzie on wyświetlany:

username@host ~ %

Aby użyć kolorów z zakresu 16-255 oraz 24-bitowego true color, można użyć odpowiednio liczby od 0 do 255 przypisanej do poszukiwanego koloru oraz jego szesnastkowego kodu koloru:

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

Przykładowe .zshrc files

  • Aby uzyskać takie same ustawienia jak w miesięcznych wydaniach ISO (które domyślnie używają Zsh), zainstaluj grml-zsh-config. Zawiera on wiele poprawek i zaawansowanych optymalizacji z grml.
  • https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – podstawowa konfiguracja, z dynamiczną zachętą i tytułem okna/hardinfo.
  • https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc z wieloma funkcjami, upewnij się, że sprawdzisz komentarze do niego. Cechy godne uwagi: funkcja potwierdzenia, aby upewnić się, że użytkownik chce uruchomić poweroff, reboot lub hibernację, wsparcie dla GIT w zachęcie (zrobione bez vcsinfo), uzupełnianie tabulatorów z menu, drukowanie aktualnie wykonywanego polecenia do paska tytułowego okna i więcej.

Zobacz dotfiles#User repozytoria po więcej.

Wskazówki i sztuczki

Autostart X przy logowaniu

Zobacz xinit#Autostart X przy logowaniu.

Przywracanie ustawień terminala po nienormalnym wyjściu programu

Wiele programów zmienia stan terminala i często nie przywraca ustawień terminala przy nienormalnym wyjściu (np. przy awarii lub napotkaniu SIGINT).

Zwykle można to rozwiązać wykonując reset(1):

$ reset

Poniższe sekcje opisują sposoby na uniknięcie potrzeby ręcznego resetowania terminala.

Komenda ttyctl

Komenda ttyctl może być użyta do „zamrożenia/odmrożenia” terminala. Aby zamrozić powłokę interaktywną przy starcie, użyj następującego polecenia:

~/.zshrc
ttyctl -f

Ustawianie terminala sekwencjami ucieczki

Alternatywny zestaw znaków do rysowania w linii może spieprzyć terminal w sposób, któremu ttyctl nie może zapobiec.

Prostym rozwiązaniem jest wyprowadzenie sekwencji ucieczki, które resetują terminal z funkcji haka precmd, tak że są one wykonywane za każdym razem przed narysowaniem zachęty. Na przykład, używając sekwencji ucieczki \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> do powrotu do odwiedzanego folderu. Użyj autouzupełniania po myślniku. Okazuje się to bardzo przydatne w przypadku korzystania z menu autocompletion.

Uwaga: To nie zadziała, jeśli masz otwartą więcej niż jedną sesję zsh i próbujesz cd, z powodu konfliktu w obu sesjach zapisu do tego samego pliku.

cdr

cdr pozwala zmienić katalog roboczy na poprzedni katalog roboczy z listy utrzymywanej automatycznie. Przechowuje wszystkie wpisy w plikach, które są utrzymywane między sesjami i (domyślnie) między emulatorami terminala w bieżącej sesji.

Zobacz zshcontrib(1) § PAMIĘĆ PONOWNYCH KIERUNKÓW dla instrukcji konfiguracyjnych.

Komenda pomocy

W przeciwieństwie do Basha, Zsh nie umożliwia wbudowanej komendy help, zamiast tego udostępnia run-help. Domyślnie run-help jest aliasem do man, można go wykonać ręcznie przez dodanie go do polecenia lub wywołać dla aktualnie wpisywanego polecenia za pomocą skrótów klawiaturowych Alt+h lub Esc h.

Ponieważ domyślnie jest to tylko alias do man, będzie działać tylko na zewnętrznych poleceniach. Aby poprawić jego funkcjonalność, tak by działał na poleceniach wbudowanych w powłokę i innych funkcjach powłoki, musisz użyć funkcji run-help. Zobacz zshcontrib(1) po więcej informacji o funkcji run-help i jej funkcjach pomocniczych.

Najpierw załaduj funkcję run-help, a następnie usuń istniejący alias run-help. Dla wygody help może być aliasem do run-help. Na przykład, dodaj poniższe do swojego zshrc:

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

Funkcje pomocnicze muszą być włączone oddzielnie:

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

Na przykład, polecenie run-help git commit otworzy teraz stronę man git-commit(1) zamiast git(1).

Persistent rehash

Typowo, compinit nie znajdzie automatycznie nowych plików wykonywalnych w $PATH. Na przykład, po zainstalowaniu nowego pakietu, pliki w /usr/bin/ nie zostaną natychmiast lub automatycznie dołączone do uzupełnienia. Tak więc, aby mieć te nowe pliki wykonawcze dołączone, należałoby uruchomić:

$ rehash

Ten 'rehash' może być ustawiony tak, aby działo się to automatycznie. Po prostu dołącz poniższe do swojego zshrc:

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

On-demand rehash

Jak wyżej, jednak pacman może być skonfigurowany z hakami do automatycznego żądania rehash, co nie ponosi kary wydajności ciągłego rehashowania jak wyżej. Aby to włączyć, należy utworzyć katalog /etc/pacman.d/hooks i katalog /var/cache/zsh, a następnie plik z hakami:

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

To utrzymuje datę modyfikacji pliku /var/cache/zsh/pacman zgodną z ostatnim razem, gdy pakiet był instalowany, aktualizowany lub usuwany. Następnie, zsh musi zostać nakłoniony do ponownego zhashowania swojej własnej pamięci podręcznej poleceń, gdy się zdezaktualizuje, przez dodanie do twojego ~/.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

Jeśli hak precmd zostanie wywołany przed aktualizacją /var/cache/zsh/pacman, zakończenie może nie zadziałać, dopóki nie zostanie zainicjowany nowy monit. Uruchomienie pustego polecenia, np. naciśnięcie enter, powinno wystarczyć.

Alternatywny rehash na żądanie z użyciem SIGUSR1

Jak wyżej, ale plik haka wygląda tak:

/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
Ostrzeżenie: To wysyła SIGUSR1 do wszystkich działających instancji zsh. Zauważ, że domyślnym zachowaniem dla SIGUSR1 jest terminate, więc kiedy skonfigurujesz to po raz pierwszy, wszystkie działające zsh instancje wszystkich użytkowników (włączając powłoki logowania) zakończą pracę, jeśli nie otrzymały poniższej pułapki.
~/.zshrc
TRAPUSR1() { rehash }

Powyższa pułapka funkcyjna może być zastąpiona pułapką listową trap 'rehash' USR1. Zobacz zshmisc(1) § Trap Functions dla różnic między typami pułapek.

Ta metoda natychmiast rehashwykona wszystkie zshinstancje, usuwając potrzebę naciskania enter w celu wywołania precmd.

Bind key to ncurses application

Wiąż aplikację ncurses z naciśnięciem klawisza, ale nie będzie ona akceptować interakcji. Użyj zmiennej BUFFER, aby to zadziałało. Następujący przykład pozwala użytkownikom otworzyć ncmpcpp używając Alt+\:

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

\a. Na przykład:

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

ustawi tytuł na

My xterm title

Prostym sposobem na posiadanie dynamicznego tytułu jest ustawienie tytułu w funkcjach haków precmd i preexec. Zobacz zshmisc(1) § Funkcje haka, aby uzyskać listę dostępnych funkcji haka i ich opisy.

Używając print -P możesz dodatkowo skorzystać z ucieczek zachęty Zsh.

Porada:

  • Drukowanie tytułu może być podzielone na wiele poleceń, tak długo jak są one sekwencyjne.
  • GNU Screen wysyła tytuł xterm do hardstatus (%h). Jeśli chcesz używać ucieczek łańcuchowych Screena (np. dla kolorów), powinieneś ustawić hardstatus sekwencją ucieczki \e_\e\. W przeciwnym razie, jeśli w \e]2;\a używane są ucieczki łańcuchowe, emulator terminala otrzyma zniekształcony tytuł, ponieważ nie jest w stanie interpretować ucieczek łańcuchowych Screen.
Uwaga:

  • Nie używaj opcji -P w print przy wypisywaniu zmiennych, aby zapobiec ich parsowaniu jako ucieczek zachęty.
  • Używaj flagi interpretacji parametrów q podczas drukowania zmiennych, aby zapobiec ich parsowaniu jako sekwencji ucieczki.
~/.zshrc
autoload -Uz add-zsh-hookfunction xterm_title_precmd () {print -Pn -- '\u005{g}%n@%m %~'] && print -Pn -- '\u005{g}%n\u005{-}@ \u005{m}%m\u005{-} \}function xterm_title_preexec () {print -Pn -- '\a]2;%n@%m %~ %# ' && print -n -- "${(q)1}"] && { print -Pn -- '\u005{g}%n\u005{-}@\u005{m}%m\u005{-} \005{B}%~\005{-} %# ' && print -n -- "${(q)1}"; }}if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz preexec xterm_title_preexecfi

Tytuł zakładki emulatora terminala

Niektóre emulatory terminala i multipleksery obsługują ustawianie tytułu zakładki. Sekwencje ucieczki zależą od terminala:

Terminal Sekwencje ucieczki Opis
GNU Ekran \ek\e\ Tytuł okna ekranu (%t).
Konsole \e]30;\a Tytuł zakładki konsoli.

Wykrywanie środowiska powłoki

Zobacz repozytorium o wykrywaniu środowiska powłoki dla testów wykrywających środowisko powłoki. Obejmuje to powłokę logowania/interaktywną, sesję Xorg, TTY i sesję SSH.

/dev/tcp odpowiednik: ztcp

Użyj modułu zsh/net/tcp:

$ zmodload zsh/net/tcp

Możesz teraz nawiązywać połączenia TCP:

$ ztcp example.com 80

Skrót do wyjścia z powłoki na częściowym wierszu poleceń

Domyślnie, Ctrl+d nie zamknie twojej powłoki, jeśli wiersz poleceń jest wypełniony, to to naprawia:

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

Rozszerzenia stron trzecich

Szkielety konfiguracyjne

Uwaga: Szkielety wprowadzają poziom abstrakcji i złożoności. Mogą one, i często to robią, wprowadzać niezdefiniowane zachowanie. W przypadku przerwania pracy powłoki, pierwszym krokiem debugowania powinno być przywrócenie zwykłej powłoki.

  • oh-my-zsh – Popularny, kierowany przez społeczność szkielet do zarządzania konfiguracją Zsh. Zawiera mnóstwo pomocnych funkcji, helperów, wtyczek, motywów.

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

  • Prezto – Szkielet konfiguracyjny dla Zsh. Jest dostarczany z modułami, wzbogacając środowisko interfejsu wiersza poleceń o rozsądne ustawienia domyślne, aliasy, funkcje, autouzupełnianie i motywy podpowiedzi.

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

  • ZIM – Szkielet konfiguracyjny o oszałamiającej szybkości i modułowych rozszerzeniach. Zim jest bardzo łatwy do dostosowania i posiada bogaty zestaw modułów i funkcji bez kompromisów w zakresie szybkości i funkcjonalności.

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

Menedżery wtyczek

  • Antibody – Menedżer wtyczek podobny do Antigena, skoncentrowany na wydajności.

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

  • zinit (wcześniej „zplugin”) – elastyczny menedżer wtyczek Zsh z czystą ścieżką, raportami, zarządzaniem uzupełnieniami, trybem turbo

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

  • Antigen – menedżer wtyczek dla Zsh, zainspirowany oh-my-zsh i vundle. ABANDONED

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

  • zgen – Lekki i prosty menedżer wtyczek dla Zsh. ABANDONED

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

  • zplug – menedżer wtyczek następnej generacji dla Zsh. ABANDONED

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

Podobne do Fisha kolorowanie składni i autosugestie

Fish zapewnia bardzo potężne kolorowanie składni powłoki i autosugestie. Aby użyć obu w Zsh, możesz zainstalować zsh-syntax-highlighting, zsh-autosuggestions, i w końcu pobrać jeden lub oba z dostarczonych skryptów ze swojego zshrc:

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

Obsługa „command not found”

Tango-go-next.pngTen artykuł lub sekcja jest kandydatem do przeniesienia do #Porady i sztuczki.Tango-go-next.png

Uwagi: Niestandardowa funkcja używająca pacman -F nie jest „rozszerzeniem strony trzeciej”. Tylko rzeczy związane z plikami pkg należą do tej sekcji. (Dyskusja w Talk:Zsh#)

pacman -F „command not found” handler

pacman zawiera funkcjonalność do wyszukiwania pakietów zawierających plik. Poniższy handler command-not-found użyje pacmana bezpośrednio do wyszukania pasujących pakietów, gdy zostanie wykonane nieznane polecenie.

~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: command not found: %s' "$cmd" # drukuj polecenie nie znaleziono asap, następnie poszukaj pakietówfiles=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if (( ${#files} )); thenprintf '\r%s można znaleźć w następujących pakietach:\″n' "$cmd "local res=() repo pakiet wersja plikfor file in "$files"; dores=("${(0)plik}")repo="$res "pakiet="$res "version="$res "plik="$res "printf ' %s/%s %s: /%s' "$repo" "$package" "$version" "$file "doneelseprintf '\"fireturn 127}
Uwaga: Baza danych plików w pacmanie jest oddzielona od normalnej bazy danych synchronizacji i musi być pobierana przy użyciu pacman -Fy. Zobacz pacman#Szukaj pakietu, który zawiera określony plik, aby uzyskać szczegóły.

pkgfile „command not found” handler

pkgfile zawiera plik skryptu Zsh, który zapewnia funkcję command_not_found_handler, która automatycznie przeszuka bazę danych pkgfile, gdy wprowadzisz nierozpoznane polecenie.

Trzeba pobrać źródło skryptu, aby go włączyć. Na przykład:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
Uwaga: Może być konieczne uaktualnienie bazy danych pkgfile, zanim to zadziała. Zobacz pkgfile#Instalacja po szczegóły.

Odinstalacja

Zmień domyślną powłokę przed usunięciem pakietu zsh.

Ostrzeżenie: Nieprzestrzeganie poniższej procedury może spowodować, że użytkownicy nie będą mieli dostępu do działającej powłoki.

Uruchom następującą komendę:

$ chsh -s /bin/bash user

Użyj jej dla każdego użytkownika z ustawionym zsh jako powłoka logowania (włączając root’a, jeśli to konieczne). Po zakończeniu, pakiet zsh może zostać usunięty.

Alternatywnie, zmień domyślną powłokę z powrotem na Bash przez edycję /etc/passwd jako root.

Ostrzeżenie: Zdecydowanie zaleca się używanie vipw(8) podczas edycji /etc/passwd, ponieważ pomaga to zapobiegać nieprawidłowym wpisom i/lub błędom składni.

Na przykład, zmień następujące:

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

na to:

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

Zobacz także

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.