От Antergos’а к Cinant’у: настройка CLI
Организация комфортной работы в командной строке — одна из задач, которую мы выдвинули в рамках нашего программного документа, вслед за настройкой консольного режима. В качестве регистрационной оболочки пользователя (login shell) по умолчанию в кастомизированной системе Cinant вместо традиционного для (почти) всех Linux’ов Bash’а используется Zsh. И, соответственно, задача наша сводится к его установке и настройке.
В умолчальной инсталляции Antergos’а Zsh отсутствует, так что для начала устанавливаем его:
$ sudo pacman -Sy zsh
Вместе с ним имеет смысл установить ещё несколько пакетов: zsh-doc
, zsh-completions
и zsh-lovers
:
Первый из них содержит подборку документации в различных форматах. Оболочка Zsh — одна из лучше всего документированных программ в мире Open Source (и, безусловно, среди всех командных оболочек). А ввиду изобилия её функционала документация тут не лишняя. По крайней мере, кот Мануал настоятельно советует обращаться к ней при необходимости — да и сам не считает для себя западло почитать на досуге, например, более чем четырёхсостраничное PDF-руководство:
Пакет zsh-completions
— набор функций, расширяющих возможности автодополнения в командной строке, хотя они и по умолчанию кажутся почти безграничными. А zsh-lovers
— подборка советов и приёмов по использованию Zsh, а также примеры оного, оформленная в виде man-страницы.
После установки Zsh его нужно сделать регистрационной оболочкой для текущего (первого) пользователя:
$ chsh -s /bin/zsh
А также — для виртуального администратора системы:
$ sudo -i chsh -s /bin/zsh
Чтобы каждый обладатель вновь создаваемого аккаунта в нашей системе изначально был бы приобщён к Zsh’еву счастью, надо отредактировать файл /etc/default/useradd
, заменив в нём строку
SHELL=/bin/bash
на
SHELL=/bin/zsh
Теперь остаётся самая малость — сконфигурировать оболочку должным образом. Да не сочтут это за издевательство те, кто впервые глянули на умолчальный Zsh и вспомнили слова Ослика Иа-Иа о душераздирающем зрелище (а оно на самом деле такое). Просто для нас с Манаулом это действительно проблемы не составляет: наш главный конфиг Zsh’а, ~/.zshrc
, в основных своих чертах сложился в ноль-первых годах этого тысячелетия. И с тех пор кочует с машины на машину, из системы в систему, подвергаясь только минимальной правке, связанной с:
- особенностями очередной ОСи или дистрибутива,
- появлением нового функционала, а главное
- выявлением полезности среди функционала, всегда тут бывшего.
Мы с Мануалом не жадные — каждый может последовать за нами, и потому под занавес этого очерка приведён конфиг Zsh’а, актуальный на момент сочинения этих строк и для системы, в которой они сочиняются.
Если наш конфиг почему%либо не устраивает — в Arch’евском репозитории extra
есть специальный пакет, grml-zsh-config
. Содержимое его — чрезвычайно навороченный ~/.zshrc
, сопровождаемый специальной же man-страницей. Правда, мы с Мануалом на него поглядели — и решили, что на чего-нибудь попроще…
Много примеров конфигов Zsh можно найти в сети — например, на Oh My ZSH!. Для доступа к нему в AUR’е тоже предусмотрен отдельный пакет, oh-my-zsh-git
.
Наконец, никто не запрещает и создать свой собственный конфиг с нуля. Например, с помощью его интерактивного конфигуратора — он предлагается при первом запуске Zsh в качестве login shell, если в домашнем каталоге пользователя нет файла ~/.zshrc
. Или — просто руками, в текстовом редакторе, руководствуясь директивными указаниями документации.
Так или иначе, определившись с главным конфигом Zsh, его следует скопировать с каталог /etc/skel
— дабы он сам собой возникал в домашнем каталоге каждого новообразованного пользователя системы. Аналогичный файл должен быть и в каталоге /root
. Насколько аналогичный — сказать трудно. Мы с Мануалом используем просто почти тот же самый конфиг, что и для обычного пользователя, с минимальными коррективами. Например, с иной расцветкой приглашения командной строки. Дабы сразу видеть, от лица какого подлеца мы вводим команды.
В общем, поле деятельности zsh’иста-неофита — неохватное. И, чтобы его чуть-чуть сузить, мы с Мануалом делимся обещанным конфигом. Он может быть использован as is или с любыми коррективами.
# ~/.zshrc: пользовательский конфигурационный файл # для командной оболочки Zsh. # Он используется только в интерактивных её экземплярах. # Содержит команды для определения псевдонимов, # функций, опций и кейбиндингов # # Редакция кота Manual'а и Alv'а # Для Antergos'a сотоварищи. ### Опции истории команда # Определение имени файла истории: HISTFILE=~/.zhistfile # Число команд, сохраняемых в буфере сеанса: HISTSIZE=2000 # Число команд сохраняемых в файле истории: SAVEHIST=10000 ## Условия сохранения команд в файле истории. # Инкрементное наращивание файла истории: setopt INC_APPEND_HISTORY # Удаление дубликатов команд: setopt HIST_IGNORE_ALL_DUPS # Удаление пустых строк: setopt HIST_REDUCE_BLANKS # Удаление строк, начинающихся с пробела: setopt HIST_IGNORE_SPACE ### Настройка кейбиндингов. ## Доступ к истории команд. # Включение history-substring-search: bindkey "^[[A" up-line-or-search bindkey "^[[B" down-line-or-search # Пролистывание истории клавишами PageUp и PageDown: bindkey "^[[5~" up-line-or-history bindkey "^[[6~" down-line-or-history ## Навигация и редактирование. # Исправление работы клавиш Home, End, Delete: bindkey "^[OH" beginning-of-line bindkey "^[OF" end-of-line bindkey "^[[3~" delete-char # Заменить кодами клавиш своего терминала (консоли) то, # что в кавычках # Определение кода клавиши в терминале (консоли): # Control+V [клавиша] или командой cat [Enter] [клавиша] # Переход на «большое» слово вперёд и назад по Control+Right/Left: bindkey "^[[1;5C" forward-word bindkey "^[[1;5D" backward-word # Удаление от позиции курсора до конца «большого» слова: bindkey "^[[3;5~" delete-word # Поведение клавиш в стиле emacs: bindkey -e ### Навигация и автодополнение # Отключение поддержки compctl: zstyle ':completion:*' use-compctl false # Включение перехода в каталог без использования команды cd: setopt autocd # Каталоги для быстрого перехода: cdpath=(/home/data/alv.me/ /home/data/media/) # Менюобразный вывод вариантов по клавише Tab: setopt menucomplete zstyle ':completion:*' menu select=1 _complete _ignored _approximate # Автодополнение псевдонимов: setopt completealiases # Развёртывание сокращённого пути до полного: autoload -Uz compinit compinit # Расширенные подстановки и дополнения: setopt extendedglob nomatch notify zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate # Отключение чувствительности к регистру: zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # Кеширование команд для автодополнения: zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path ~/.zsh/cache # Автоматическое выполнение команды rehash: zstyle ':completion:*' rehash true # Определение путей к библиотекам функций: fpath=($fpath ~/.zsh/func) # Включение кеширования для автодополнения # аргументов команд управления файлами: zstyle ':completion::complete:*' use-cache 1 # Работает для apt и pacman. ### Псевдонимы. ## Псевдонимы для команд перемещения, копирования и удаления файлов. # Подтверждение перезаписи при переименовании или перемещении: alias mv='mv -i' # Рекурсивное копирование с подтверждением: alias cp='cp -iR' # Принудительное рекурсивное копирование: alias cpr='cp -fR' # Удаление файлов в текущем каталоге с подтверждением: alias rm='rm -i' # Удаление файлов в текущем каталоге без оного: alias rmf='rm -f' # Рекурсивное удаление с подтверждением: alias rmr='rm -R' # Принудительное рекурсивное удаление: alias rmrf='rm -Rf' ## Псевдонимы для опций команды ls. # Выводить каталоги перед файлами: alias ls='ls -F --group-directories-first' # Вывод в «длинном человечьем» формате: alias ll='ls -lh' # Вывод всех файлов, включая скрытые, # текущий и родительский каталоги: alias la='ls -A' # Вывод всех файлов в «длинном» формате с указанием inode: alias li='ls -ial' ## Псевдонимы для опций часто используемых команд: alias h=history # Вывод команд df и du в «человечьем» формате: alias df='df -h' alias du='du -h' # more-подобный вывод команды less: alias less='less -M' # Закачка файла с продолжением: alias wget='wget -c' # Запуск редактора nano в режиме softwrap: alias nano='nano -$' # Вывод числа символов в текстовом файле: alias wcm='wc -m' # Запуск Kate с правами администратора alias kater='SUDO_EDITOR=kate sudoedit /etc/fstab' # Открывать текстовые файлы в редакторе nano: alias -s txt='nano' # Просмотр содержимого deb-пакетов (Cintu и другие deb based): alias -s deb='dpkg -c' # Просмотр содержимого пакетов в формате Archlinux'а: #alias -s pkg='pacman -Qpl' # Просмотр содержимого tar-архивов, # сжатых утилитами gzip и xz, соответственно: alias -s gz='tar xzvf' alias -s xz='tar xJvf' ## Глобальные псевдонимы alias -g N='2>/dev/null' alias -g L='|less' alias -g G='|grep' alias -g W='|wc' alias -g H='|head' alias -g T='|tail' ### Приглашения командной строки ## Однострочное приглашение. # Даётся для примета. При необходимости раскомментировать # Первичное приглашение: #PROMPT='%B[%n]%b=$ ' # Правостороннее приглашение: #PROMPT2='%i%U> ' # Вторичное приглашение: #RPROMPT='[%2~]' ## Двухстрочное «функциональное» приглашение. # Активизация promptinit: autoload -Uz promptinit promptinit # Загрузка функции из каталога # /usr/share/zsh/functions/Prompts/: prompt adam2 ### Разные опции # Отключение выхода по Control+D: setopt IGNORE_EOF # Отключение звукового сигнала: setopt NO_BEEP # Пейджер по умолчанию: export PAGER="less" # Редактор по умолчанию: export EDITOR="nano"
4 thoughts on “От Antergos’а к Cinant’у: настройка CLI”
вот тут маленькая нестыковочка
наше браво и рахмат!
Не пользую Zsh, но, как человек, заморочившийся красивостями в bash, не мог не заметить отсутствия явного указания на цветовую схему оформления (жирный для юзера плюс, скажем, красный жирный для рута и т.п.)
> маленькая нестыковочка
Спасибо, поправил.
> не мог не заметить отсутствия явного указания на цветовую схему оформления (жирный для юзера плюс, скажем, красный жирный для рута и т.п.)
Есть — в теме приглашения для рута красный цвет прописан явным образом5
prompt adam2 red red red
отличненько, подобрать вменяемую гарнитуру, определить жирный/курсив/обычный по ситуации — и самое то. Мне это понравилось давно в Федоре, после — в Минте, там вообще теперь в этом плане раздолье:
а вот в Антергосе таких красивостей не было. Правда, была (и есть) обширная вики, которая и растолковала пошагово, как задать красивости в терминале.