От Antergos’а к Cinant’у: настройка CLI

От 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-руководство:

Кот Мануал читает manual по Zsh’у

Пакет 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"

От Antergos’а к Cinant’у: настройка CLI: 4 комментария

  1. # Открывать текстовые файлы в редакторе nano:
    alias -s txt='nano'

    # Открывать текстовые файлы в редакторе nano:
    alias -s html='kate'

    вот тут маленькая нестыковочка

    # Закачка файла с продолжением:
    alias wget='wget -c'

    наше браво и рахмат!

    Не пользую Zsh, но, как человек, заморочившийся красивостями в bash, не мог не заметить отсутствия явного указания на цветовую схему оформления (жирный для юзера плюс, скажем, красный жирный для рута и т.п.)

  2. > не мог не заметить отсутствия явного указания на цветовую схему оформления (жирный для юзера плюс, скажем, красный жирный для рута и т.п.)
    Есть — в теме приглашения для рута красный цвет прописан явным образом5
    prompt adam2 red red red

  3. Есть — в теме приглашения для рута красный цвет прописан явным образом:
    prompt adam2 red red red

    отличненько, подобрать вменяемую гарнитуру, определить жирный/курсив/обычный по ситуации — и самое то. Мне это понравилось давно в Федоре, после — в Минте, там вообще теперь в этом плане раздолье:

    всё уже украдено до нас

    а вот в Антергосе таких красивостей не было. Правда, была (и есть) обширная вики, которая и растолковала пошагово, как задать красивости в терминале.

Добавить комментарий