Чтение онлайн

ЖАНРЫ

Linux Mint и его Cinnamon. Очерки применителя

Федорчук Алексей Викторович

Шрифт:

3. избавление от пустых строк, возникающих после ошибочного нажатия Enter в «голом» приглашении;

4. удаление лишних пробелов из командной конструкции.

Зачем нужны пункты 2–4 — ясно без комментариев. А вот о пункте 1-м надо сказать несколько слов. Ибо он не просто обеспечивает наращивание файла истории (для этого было бы достаточно опции, APPEND_HISTORY), но делает это в ходе сеанса, не дожидаясь его завершения. В результате команда, введённая в одном терминальном окне или вкладе терминала, будет доступна в истории команд другого терминала или вкладки (хотя и с некоторой задежкой).

Далее

следуют две очень важные строки, определяющие одну из полезнейших возможностей Zsh — тот самый механизм history-substring-search, о котором говорилось ранее:

bindkey "^[[A" up-line-or-search

bindkey "^[[B" down-line-or-search

Следующие две строки касаются уже простого пролистывания истории в командной строке, позволяя делать это клавишами PageUp и PageDown (а не только стрелками Up и Down, которые в этом качестве работают всегда и везде):

bindkey "^[[5~" up-line-or-history

bindkey "^[[6~" down-line-or-history

Этими строками перебрасывается логический мостик к определению кейбиндингов для клавиш, которые в Zsh по умолчанию работают «неправильно» в большинстве терминалов (если не во всех). У меня это Home, End, Delete — их поведение исправляется такими, соответственно, строками:

bindkey "^[OH" beginning-of-line

bindkey "^[OF" end-of-line

bindkey "^[[3~" delete-char

Это как раз пример тех строк, которые as is копировать не нужно. Во-первых, в общем случае, могут не работать другие клавиши (скорее, не только эти). Во-вторых же и главных, в более иных терминалах коды тех же клавиш могут быть совсем другими. Какими — легко определить, нажав Control+V, а затем «неправильную» клавишу. Именно таким образом получены коды для Home, End и Delete в системе, в которой сочиняются эти строки.

Теперь — опции, определяющие магию Zsh при навигации по файловой системе:

cdpath=(/home/current /home/current/alv.me /etc)

setopt autocd

Первая строка позволяет с помощью команды cd переходить в подкаталоги перечисленных каталогов, не набирая никаких путей, ни относительных, ни абсолютных, вторая же — обходиться без команды cd.

На грани между опциями навигации и автодополнения находятся такие строки:

setopt menucomplete

zstyle ':completion:*' menu select=1 _complete _ignored _approximate

Они в паре обеспечивают «менюобразный» вывод списка доступных дополнений по нажатию клавиши табуляции. И это как раз тот случай, когда последовательность строк имеет значение.

Аналогично и со следующими строками — теми самыми, которые обеспечивают волшебство развёртывания сокращённого ввода пути в полный:

autoload -Uz compinit

compinit

Расширенные подстановки и дополнения обеспечиваются вот этими строками:

setopt extendedglob nomatch notify

zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate

Строка

zstyle ':completion:*' use-compctl false

знаменует собой отречение от старого мира — системы дополнения compctl, в пользу новой системы compsys.

Строка

zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'

устанавливает равноправие при дополнениях символов нижнего регистра с верхним.

А

строка

zstyle :compinstall filename '/home/zsh/.zshrc'

фиксирует файл, в который compinstall (функция автоматического конфигурирования compsys) будет вносить свои изменения при грядущих её вызовах (если они, конечно, будут).

Пора переходить к псевдонимам. Сначала — серия таковых для команд манипуляции файлами, предписывающие запрос подтверждения на таковые или, напротив, форсированное исполнение, в зависимости от ситуации:

alias mv='mv -i'

alias cp='cp -iR'

alias cpr='cp -fR'

alias rm='rm -i'

alias rmf='rm -f'

alias rmrf='rm -fR'

Оказывается, что для одной-единственной команды ls можно придумать больше псевдонимов, чем для всех файломанипулирующих команд, вместе взятых:

alias ls='ls -F'

alias ll='ls -lh'

alias la='ls -A'

alias li='ls -ial'

alias lsd='ls -ld *(-/DN)'

alias lsa='ls -ld .*'

На самом деле их можно придумывать ещё и ещё — этот тот необходимый минимум, который я в состоянии запомнить без вреда для рассудка. Расшифровывать псевдонимы не буду — кому надо, и так могут сорвать с них маски, а кто не знает — так ему это и не нужно.

Далее идёт серия псевдонимов для различных команд и утилит разного назначения. Здесь также расшифровка будет лишней. Ибо они или оболее-менее общеприняты:

alias h=history

alias df='df -h'

alias du='du -h'

Либо обусловлены давними привычками (как, например, more-образный вывод команды less):

alias less='less -M'

alias wget='wget -c'

alias nano='nano -$'

Либо связаны со спецификой деятельности:

alias wcl='wc -l'

alias wcw='wc -w'

alias wcm='wc -m'

alias wcc='wc -c'

Так что можно переходить к следующей убойной фиче Zsh — определению глобальных псевдонимов:

alias -g N='2>/dev/null'

alias -g L='|less'

alias -g G='|grep'

alias -g W='|wc -m'

Где, впрочем, комментарии тоже излишни.

А посему перехожу к тем самым дистрибутив-специфическим блокам, которые я предназначил для применения в Mint. Это — псевдонимы для субкоманд её утилиты apt, призванные минимизировать ввод при наиболее частых действиях по пакетному менеджменту:

alias aptin='apt install --yes'

alias apter='apt purge'

alias aptup='apt update'

alias aptug='apt upgrade'

alias aptse='apt search'

alias aptsh='apt show'

Псевдонимы для внутренних команд apt из APT также имеет смысл определить, по крайней мере один, для получения списка инсталлированных пакетов:

alias aptlist='/usr/bin/apt list --installed'

Смысл этих псевдонимов будет ясен после знакомства с очерком об утилите apt. И в них нет ничего Zsh-специфичного. В отличие от альтернативного метода, основанного на псевдонимах глобальных, которые определяются для соответствующих аргументов команды sudo. Правда, особенность реализации утилиты apt в Mint такова, что она не требует ввода этой команды в явном виде. И потому здесь у меня осталась единственная строка для псевдонима команды добавления репозиториев:

Поделиться с друзьями: