Zsh (Русский)
Zsh является мощной современной оболочкой, которая работает как в интерактивном режиме, так и в качестве интерпретатора языка сценариев. Он совместим с bash (не по умолчанию, только в режиме emulate sh
), но имеет преимущества, такие как улучшенное завершение и подстановка.
Еще больше причин, по которым стоит использовать Zsh, перечислено в Zsh FAQ EN.
Установка
Перед установкой вы можете посмотреть, какая оболочка используется в данный момент:
$ echo $SHELL
Установите пакет zsh. Чтобы значительно расширить возможности автодополнения команд, установите также пакет zsh-completions.
Первоначальная настройка
Убедитесь, что Zsh был установлен правильно, выполнив следующую команду в терминале:
$ zsh
После этого вы должны увидеть скрипт zsh-newuser-install, который проведет вас через некоторые основные настройки. Если вы хотите пропустить первичную настройку, нажмите q
. Если скрипт не запустился, вы можете вызвать его вручную:
$ zsh /usr/share/zsh/functions/Newuser/zsh-newuser-install -f
Установка Zsh в качестве оболочки по умолчанию
Смотрите раздел Командная оболочка#Выбор оболочки по умолчанию.
~/.bashrc
в ~/.zshrc
(например, приглашение командной строки и псевдонимы), а также из ~/.bash_profile
в ~/.zprofile
(например, код, который запускает оконную систему X)Файлы Запуска/Завершения
- Если
$ZDOTDIR
не определена, используется$HOME
по умолчанию. - Если опция
RCS
не установлена ни в одном из файлов, файлы конфигурации не будут получены после этого файла. - Если опция
GLOBAL_RCS
не задана ни в одном из файлов, после этого файла не будут найдены глобальные конфигурационные файлы (/etc/zsh/*
).
При запуске Zsh по умолчанию он будет загружать следующие файлы в этом порядке:
/etc/zsh/zshenv
- Используется для установки общесистемных переменных environment variables (Русский); Он не должен содержать команд, которые производят вывод, или предполагает, что shell подключен к tty. Этот файл всегда будет источником, это нельзя переопределить.
$ZDOTDIR/.zshenv
- Используется для установки переменных среды пользователя; Он не должен содержать команд, которые производят вывод, или предполагает, что shell подключен к tty. Этот файл всегда будет источником.
- Используется для выполнения команд при запуске, будет вызван при запуске как login shell. Обратите внимание, что в Arch Linux по умолчанию в нем содержится одна строка, в которой источником является
/etc/profile
./etc/profile
- Этот файл должен быть загружен всеми Bourne-совместимыми оболочками при входе в систему: он устанавливает и другие переменные окружения и специфичные для приложения () при входе в систему.
- Используется для выполнения пользовательских команд при запуске, будет вызван при запуске как login shell.
/etc/zsh/zshrc
- Используется для настройки интерактивной конфигурации оболочки и выполнения команд, будет вызван при запуске как interactive shell.
$ZDOTDIR/.zshrc
- Используется для настройки интерактивной конфигурации пользователя и выполнения команд, будет вызван при запуске как interactive shell.
- Используется для выполнения команд при завершении прогресса инициализации, будет вызван при запуске как login shell.
- Используется для выполнения пользовательских команд при завершении начального прогресса, будет вызван при запуске как login shell.
- Будет получен, когда login shell завершится.
- Будет получен, когда login shell завершится.
Настройка Zsh
Хотя Zsh может использоваться “из коробки”, он настроен не так, как хотело бы большинство пользователей. Из-за наличия огромных возможностей настройки, доступных в Zsh, этот процесс может оказаться сложным и трудоемким.
Простой .zshrc
Ниже приведён пример файла настроек, который обеспечивает достойный набор опций по умолчанию, а также предоставляет примеры многих вариантов настройки Zsh. Для того, чтобы использовать этот пример, сохраните его в виде файла с именем .
Вот простой :
~/.zshrc
autoload -U compinit promptinit compinit promptinit # Эта настройка установит тему walters для приглашения командной строки prompt walters
Настройка переменной $PATH
Информацию о настройке в zsh системных путей отдельно для каждого пользователя можно найти на странице проекта. Вкратце, добавьте в файл ~/.zshenv
следующие строки:
Смотрите также примечание в разделе #Фреймворки настроек.
Автозавершение команд
Возможно, наиболее убедительной стороной Zsh является его передовые возможности автозавершения. Включите автозавершение в . Добавив следующую строку в ваш :
Настройки выше включают в себя также ssh/scp/sftp завершения хостов, но для того, чтобы эта функция работала, пользователи должны предотвратить SSH от хеширования хостов имён в .
Для автозавершения с использованием клавиши-стрелки, добавьте следующие строки в:
- Для активации меню нажмите TAB дважды.
Для автозавершения командной строки для алиасов (псевдонимов), добавьте следующее:
Позволяем разворачивать сокращенный ввод, к примеру cd /u/sh в /usr/share
Обработчик неизвестных команд
В утилиту pkgfile входит Zsh скрипт, содержащий функцию command_not_found_handler
. При вводе неизвестной команды функция автоматически осуществляет поиск в официальных репозиториях.
Чтобы включить хук, нужно его прочитать. Например, добавьте с файл следующую строку:
Игнорирование повторяющихся строк в истории
Чтобы игнорировать повторяющиеся строки в истории, используйте следующее:
Чтобы освободить историю от уже созданных дубликатов, запустите:
$ sort -t ";" -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history
Команда ttyctl
описывает ttyctl
команды в Zsh.
Это можно применить для "замораживания / размораживания" терминала.
Многие программы изменяют состояние терминала, и часто не восстанавливают настройки терминала нормально при выходе.
Чтобы избежать необходимости вручную сбрасывать терминал, используйте следующее:
Назначение клавиш
Zsh не использует Readline, вместо этого он использует свой собственный и более мощный ZLE. Т.е. не читает или .
Zle имеет emacs режим и vi режим. По умолчанию, он пытается взять клавиши emacs или vi из переменной среды . Если она пуста, то по умолчанию будет Emacs. Измните это или bindkey -v
соответственно в режиме Emacs или режиме VI.
Смотрите также zshwiki: bindkeys.
Назначение клавиш в оболочке
Настраиваем нормальное поведение клавиш (не как в vi и emacs). Для этого в ~/.zshrc добавьте следующее:
[[ -n "${key[Home]}" ]] && bindkey "${key[Home]}" beginning-of-line [[ -n "${key[End]}" ]] && bindkey "${key[End]}" end-of-line [[ -n "${key[Insert]}" ]] && bindkey "${key[Insert]}" overwrite-mode [[ -n "${key[Delete]}" ]] && bindkey "${key[Delete]}" delete-char [[ -n "${key[Up]}" ]] && bindkey "${key[Up]}" up-line-or-history [[ -n "${key[Down]}" ]] && bindkey "${key[Down]}" down-line-or-history [[ -n "${key[Left]}" ]] && bindkey "${key[Left]}" backward-char [[ -n "${key[Right]}" ]] && bindkey "${key[Right]}" forward-char [[ -n "${key[PageUp]}" ]] && bindkey "${key[PageUp]}" beginning-of-buffer-or-history [[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" end-of-buffer-or-history
Назначение клавиши в ncurses
Привяжите приложение ncurses к keystoke, но оно не будет принимать взаимодействие. Используйте переменную , чтобы заставить его работать. Следующий пример позволяет пользователям открывать ncmpcpp, используя :
Альтернативный путь назначения клавиш в ncurses
Этот метод будет содержать всё, что вы ввели в строку перед вызовом приложения
Горячие клавиши в файловом менеджере
Могут пригодится настройки клавиш использующиеся в графическом файловом менеджере. Первая комбинация показывает историю каталогов (Alt + Left), вторая позволяет пользователю перейти в родительский каталог (Alt + Up). Они также отображают содержимое каталогов.
~/.zshrc
cdUndoKey() { popd > /dev/null zle reset-prompt echo ls echo } cdParentKey() { pushd .. > /dev/null zle reset-prompt echo ls echo } zle -N cdParentKey zle -N cdUndoKey bindkey '^[[1;3A' cdParentKey bindkey '^[[1;3D' cdUndoKey
История поиска
Добавьте эти строки в .zshrc
Doing this, only past commands beginning with the current input would have been shown.
Настройка строки приглашения (PROMPT)
Существует быстрый и легкий способ создать цветное приглашение в Zsh. Убедитесь что prompt установлен в autoload в файле . Это может быть сделано путем добавления этих строк:
Доступные цветовые схемы можно перечислить с помощью команды:
$ prompt -l
Для просмотра всех доступных тем (с примерами), используйте команду:
$ prompt -p
Например, чтобы использовать цветовую схему , введите:
$ prompt bigfade
Чтобы использовать цветовую схему с заданным цветом (если доступен в теме), введите:
$ prompt elite2 blue
Настройка командной строки (PROMPT)
В отличие от bash zsh имеет два промта — левый и правый. Правый промт исчезает при вводе длинных команд, что делает его очень удобным для отображения не самой полезной информации, типа времени или текущего каталога. Промты настраиваются с помощью переменных PROMPT (левый) и RPROMPT (правый):
export PROMPT='%n@%m> ' export RPROMPT='[%~]'
Некоторые из специальных последовательностей, которые можно в них использовать: Последовательность - Описание %n - Имя пользователя %m - Имя компьютера (до первой точки) %M - Полное имя компьютера %~ - Путь к текущему каталогу относительно домашнего %d - Полный путь к текущей директории ($PWD) %T - Время в формате HH:MM %* - Время в формате HH:MM:SS %D - Дата в формате YY-MM-DD %B, %b - Начало и конец выделения жирным
По материалам этой статьи
Цвета
Zsh устанавливает цвета иначе, чем Bash. Добавьтеautoload -U colors && colors
до в чтобы воспользоваться. Usually you will want to put these inside so the cursor does not move.
будет установлен цвет текста (значения, подставляемые вместо “color”, к примеру: red, green, blue, и т.д.. - по умолчанию установлены в любом формате до текста)
Команда | Описание | |
---|---|---|
фактически то же самое, что и предыдущий, но с меньшим набором. Можно также вставить префикс с номером F. | ||
будет использоваться не толстый текст с заданным цветом. | ||
будет использоваться толстый текст с заданным цветом. | ||
сбросит цвет текста, на цвет по умолчанию. Не сбрасывает толщину текста. Используйте для отмены утолщения. Saves typing if it's just %f though. | ||
устанавливает цвет фона. Того же цвета, как цвет без текста полужирным. Prefixing with any single-digit number makes the bg black. |
Возможные значения цвета | |
---|---|
black или | или |
или | или |
или 4 | или 5 |
или | или |
Цветной вывод команд
Раскрашивание вывода команд при помощи скрипта grc. Поставьте пакет (доступен для установки из репозитория [community]) И добавьте следующие строки в ваш
if [ -f /usr/bin/grc ]; then alias gcc="grc --colour=auto gcc" alias irclog="grc --colour=auto irclog" alias log="grc --colour=auto log" alias netstat="grc --colour=auto netstat" alias ping="grc --colour=auto ping" alias proftpd="grc --colour=auto proftpd" alias traceroute="grc --colour=auto traceroute" fi
Пример
Это пример двустороннего промта:
PROMPT="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg_no_bold[yellow]%}%1~ %{$reset_color%}%#" RPROMPT="[%{$fg_no_bold[yellow]%}%?%{$reset_color%}]"
А вот как оно будет отображаться:
username@host ~ % [0]
Стек Каталогов
Zsh можно настроить, чтобы он помнил DIRSTACKSIZE (последние посещённые каталоги). Это пригодится для более быстрой работы с cd. Вам нужно добавить несколько строк, в файл настройки:
Теперь используйте
dirs -v
Для вывода стека директорий. Используйте cd -<NUM>
чтобы вернуться к посещённому каталогу. Используйте автозавершение (нажав ) после тире.
Команда Help
В отличие от bash, zsh не позволяет использовать встроенный в команду для автодополнения. Чтобы использовать в zsh, добавьте следующие строки в ваш :
Подсветка синтаксиса как в Fish
Fish обеспечивает очень мощную подсветку синтаксиса. Для использования в zsh, вы можете установить из официального репозитория и обязательно добавьте в ваш строку:
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
Примеры файла .zshrc
- Пакет , доступный в официальном репозитории взятый с https://grml.org/zsh содержит zshrc файл, который включает в себя множество настроек для Zshell. Эта настройка используется по умолчанию для ежемесячного ISO релиза.
- Базовая настройка с динамической строкой приглашения (Prompt) и заголовком окна / Hardinfo => https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc;
- https://github.com/slashbeast/things/blob/master/configs/DOTzshrc - zshrc с несколькими функциями, - смотрите комментарии в файле. Известные особенности: подтверждение выключения, если пользователь запустил poweroff, а также запрос подтверждения на reboot или hibernate, поддержка GIT в Prompt (сделано без vcsinfo), завершение по TAB с меню, вывод текущей выполняемой команды в заголовке окна, и многое другое.
Фреймворки настроек
- oh-my-zsh управляемый сообществом, популярный фреймворк для настройки вашего Zsh. Он поставляется в комплекте с тонной полезных функций, помощников, плагинов, тем.
- Prezto - мгновенно прекрасный Zsh (доступен в ) настроенный фреймворк Zsh. Он поставляется с модулями, разумно расширяющих среду интерфейса командной строки (по умолчанию), псевдонимами (алиасами), функциями, атодополнением, и темами Prompt.
- Antigen (дступен в antigen-gitAUR) - менеджер плагинов для zsh, вдохновлённый oh-my-zsh и vundle.
Автозапуск приложений
Zsh всегда выполняет и $ZDOTDIR/.zshenv
так что не раздувайте эти файлы.
При входе в оболочку, читаются команды из /etc/profile
а потом . Затем, если оболочка является интерактивной, команды читаются из /etc/zsh/zshrc
а потом $ZDOTDIR/.zshrc
. Наконец, если в оболочку выполнен вход, читаются и .
Смотрите также секцию STARTUP/SHUTDOWN FILES в .
Постоянный rehash
Обычно compinit не находит новые исполняемые файлы в $PATH. Например после установки нового пакета, файлы в /usr/bin не сразу будут включены в автодополнение. Чтобы включить их в работу, выполните:
$ rehash
'rehash' может выполняться автоматически. Включите его в вашем :
Функции
Zsh позволяет пользователю определять собственные функции, которые могут выполняться точно также как и обычные программы. Функции выполняются в том же процессе, что и вызвавшая их программа. При вызове функции аргументы передаются как позиционные параметры.
Распаковка архива
Чтобы распаковать архив не указывая тип распаковщика и его аркументы, а выполнив всего лишь команду вида Добавьте следующий код в
ex () { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xvjf $1 ;; *.tar.gz) tar xvzf $1 ;; *.tar.xz) tar xvfJ $1 ;; *.bz2) bunzip2 $1 ;; *.rar) unrar x $1 ;; *.gz) gunzip $1 ;; *.tar) tar xvf $1 ;; *.tbz2) tar xvjf $1 ;; *.tgz) tar xvzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *.7z) 7z x $1 ;; *) echo "'$1' Не может быть распакован при помощи >ex<" ;; esac else echo "'$1' не является допустимым файлом" fi }
Упаковка в архив
Упаковка в архив командой pk 7z /что/мы/пакуем имя_файла.7z
- при этом архив будет в Домашней папке.
pk () { if [ $1 ] ; then case $1 in tbz) tar cjvf $2.tar.bz2 $2 ;; tgz) tar czvf $2.tar.gz $2 ;; tar) tar cpvf $2.tar $2 ;; bz2) bzip $2 ;; gz) gzip -c -9 -n $2 > $2.gz ;; zip) zip -r $2.zip $2 ;; 7z) 7z a $2.7z $2 ;; *) echo "'$1' не может быть упакован с помощью pk()" ;; esac else echo "'$1' не является допустимым файлом" fi }
Удаление
Измените оболочку по умолчанию перед удалением пакета zsh.
Запустите следующую команду:
$ chsh -s /bin/bash user
Где user - имя пользователя.
Используйте эту команду для каждого пользователя с установленной оболочкой zsh (в том числе и root при необходимости). После, удалите пакет zsh.
Кроме того, изменить оболочку по умолчанию обратно в Bash, можно редактируя от root.
Например, изменить следующие:
username:x:1000:1000:Full Name,,,:/home/username:/bin/zsh
На:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bash
Смотрите также
Рекомендуем обязательно обратится к следующим Русскоязычным статьям, для более полного и лучшего понимания.
Статьи на Английском:
- A User's Guide to ZSH
- The Z Shell Manual (different format available here)
- Zsh FAQ
- zsh-lovers(1) (this is also available as in offical repository)
- Zsh Wiki
- Gentoo Wiki: Zsh/HOWTO
- Bash2Zsh Reference Card