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
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.
~/.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
- 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.
- 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ą.
-
$HOME/.profile
nie jest częścią plików startowych Zsh i nie jest pozyskiwane przez Zsh, chyba że Zsh jest wywoływany jakosh
lubksh
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).
/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
.
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
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
Ten artykuł lub sekcja wymaga rozwinięcia.
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ę.
- 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.
- 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:
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.
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
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 rehash
wykona wszystkie zsh
instancje, 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.
- 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.
- Nie używaj opcji
-P
wprint
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
- 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”
Ten artykuł lub sekcja jest kandydatem do przeniesienia do #Porady i sztuczki.
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}
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
Odinstalacja
Zmień domyślną powłokę przed usunięciem pakietu zsh.
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.
/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
.