Zsh: настройка
Пользуюсь и радуюсь. Спасибо товарищу, который мне посоветовал ознакомиться с этим шеллом :) Приходилось иметь дело с разными оболочками, настроить под себя можно любую, насколько она позволяет. Но ни в одной нет такого шикарного автодополнения, как в zsh. Уже «из коробки» работает дополнение команд и директорий, опций огромного количества программ и всё это представляется в виде меню. К тому же, всё это достаточно гибко настраивается. Правда, присутствует в zsh и один непрятный момент — в xterm криво работающие клавиши «Home», «End» и тд. Но это всё решаемо.
Установка.
1 | cd /usr/ports/shells/zsh && make install clean |
Меняем пользователю шелл
1 2 3 4 5 6 7 8 | [lycane]: chpass Changing user information for lycane. Shell: /usr/local/bin/zsh Full Name: Lycane Office Location: Office Phone: Home Phone: Other information: |
Настройка.
Создаем файл конфигурации .zshrc в домашней директории пользователя. Ну и в качестве примера выложу свой конфиг.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #Файл истории HISTFILE=~/.histfile #Число команд, сохраняемых в файл истории HISTSIZE=1000 #Число команд, сохраняемых в сеансе SAVEHIST=1000 #Дописывание файла истории setopt APPEND_HISTORY #Игнорировать повторения команд setopt HIST_IGNORE_ALL_DUPS #Игнорировать лишние пробелы setopt HIST_IGNORE_SPACE #Удалять пустые строки setopt HIST_REDUCE_BLANKS #Не пищим при дополнении и ошибках setopt NO_BEEP #Перейти в директорию, если набрали путь без команды cd setopt AUTO_CD #Исправлять неверно набраные команды setopt CORRECT_ALL #Вопрос на автокоррекцию SPROMPT='zsh: Исправить '\''%R'\'' на '\''%r'\'' ? [Yes/No/Abort/Edit] ' |
Чтобы видеть все процессы для kill или killall. При нажатии Tab автоматически добавится имя процесса
1 2 3 | zstyle ':completion:*:processes' command 'ps -xuf' zstyle ':completion:*:processes' sort false zstyle ':completion:*:processes-names' command 'ps xho command' |
Установка-снятие некоторых опций шелла
1 2 3 4 5 | setopt notify globdots correct pushdtohome cdablevars autolist setopt correctall autocd recexact longlistjobs setopt autoresume histignoredups pushdsilent noclobber setopt autopushd pushdminus extendedglob rcquotes mailwarning unsetopt bgnice autoparamslash |
Можно отключить функцию различения регистров
1 | zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' |
Полезная опция установки лимитов на использование системных ресурсов.
1 2 3 | limit stack 8192 # лимит объёма памяти, выделеной под стек, дабы не переполнялся limit core 0 # Выключаем запись дампов упавших в корку программ umask 022 # Установка атрибутов доступа создаваемых файлов |
Настройка приглашения командной строки.
Основные переменные, которые можно использовать:
%{\e[1;31m%} — цветовой блок; код цвета, в данном случае красный;
%M — полное имя хоста машины;
%m — имя хоста без домена;
%n — имя пользователя;
%~ — текущая директория;
%T — текущее время в 24-часовом формате.
Стоит обратить внимание, что у zsh есть опция установки приглашения с правой стороны, в которой, к примеру, можно выставить текущее время
1 | RPROMPT=$'%{\e[1;31m%}[%{\e[1;37m%}%T%{\e[1;31m%}]%{\e[0m%}' |
У меня это всё выглядит так, без лишних заморочек
1 2 3 | autoload promptinit promptinit PROMPT=$'%{\e[1;31m%}[%{\e[1;37m%}%m%{\e[1;31m%}]:%{\e[0m%} ' |
Подгружаем модули, обеспечивающие расширеные возможности автодополнения
1 2 3 4 5 6 | autoload -Uz compinit compinit zmodload -a zsh/stat stat zmodload -a zsh/zpty zpty zmodload -a zsh/zprof zprof zmodload -ap zsh/mapfile mapfile |
Выбор браузера по умолчанию при открытии веб-страниц
1 2 | autoload -U pick-web-browser alias -s {html,htm,mht}=pick-web-browser |
Алиасы. Ну, тут уж есть, где разгуляться душе и упростить работу в консоли. Включайте свой полет фантазии и добавляйте необходимые вам алиасы. Например
1 2 3 4 5 6 7 | alias ls='ls -FG' # цветной ls alias -g GP='ping ya.ru' #проверка соединения с интернетом alias -g MF='sudo mount_msdosfs -L ru_RU.KOI8-R /dev/da1s1 /mnt/flash0' #смонтировали alias -g UF='sudo umount /mnt/flash0' #размонтировали alias grep='grep --color=auto' #цветной grep alias h='history' #вывод истории введенных команд alias -s {odt,doc,sxw,rtf}=openoffice.org #устанавливаем чем открывать заданные расширения |
Установка нормального поведения клавиш Delete, Home, End и т.д. Запустится программка, которая попросит Вас поочередно нажимать клавиши, которые она будет запоминать. После появится каталог ~/.zkbd, в котором должен появится файлик xterm. Должен, но появится там файлик с несколько другим именем, поэтому ручками его переименовываем в xterm.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | autoload zkbd [[ ! -d ~/.zkbd ]] && mkdir ~/.zkbd [[ ! -f ~/.zkbd/$TERM ]] && zkbd source ~/.zkbd/$TERM [[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char [[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode [[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line [[ -n ${key[PageUp]} ]] && bindkey "${key[PageUp]}" up-line-or-history [[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char [[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line [[ -n ${key[PageDown]} ]] && bindkey "${key[PageDown]}" down-line-or-history [[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search [[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char [[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search [[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char |
SSH — автозаполнение хостов, юзеров. Пробелов между %% быть не должно.
1 2 3 | hosts=(${${${(f)"$(<$HOME/.ssh/known_hosts)"}%%\ *}%%,*}) zstyle ':completion:*:hosts' hosts $hosts zstyle ':completion:*:(ssh|scp):*' tag-order '! users' |
Отображение в заголовке окна терминала информации о номере консоли, пути и выполняемой команде
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | precmd() { [[ -t 1 ]] || return case $TERM in *xterm*|rxvt|(dt|k|E)term*) print -Pn "\e]2;[%~] :: %l\a" ;; esac } preexec() { [[ -t 1 ]] || return case $TERM in *xterm*|rxvt|(dt|k|E)term*) print -Pn "\e]2;<$1> [%~] :: %l\a" ;; esac } |
Ну, для начала этого достаточно. Если появилось желание узнать больше о возможностях zsh, то читаем официальную документацию (офф.сайт zsh), маны (zsh, zshbuiltins, zshcompctl, zshcompwid, zshexpn, zshmodules, zshparam, zshtcpsys, zshzle, zshall, zshcalsys, zshcompsys, zshcontrib, zshmisc, zshoptions, zshroadmap, zshzftpsys) и экспериментируем :)
На самом деле не криво, вместо них ctrl+a, ctrl+e. Дело привычки… я привык =). Хотя в линуксах и home с end’ом работают привычно.
ctrl+a, ctrl+e — это из другой оперы :) ими я тоже полЬзуюсЬ, бывает. А то, что у тебя по человечески работают эти клавиши — тебе, наверное, просто повезло :) ибо многочисленные источники, которые пришлосЬ перечитатЬ по теме, гласят, что нифика не работает как надо :) и предлагают вышеизложенный метод настройки этихЪ клавиш как один из вариантов :)