PostHeaderIcon Zsh: настройка

Пользуюсь и радуюсь. Спасибо товарищу, который мне посоветовал ознакомиться с этим шеллом :) Приходилось иметь дело с разными оболочками, настроить под себя можно любую, насколько она позволяет. Но ни в одной нет такого шикарного автодополнения, как в zsh. Уже «из коробки» работает дополнение команд и директорий, опций огромного количества программ и всё это представляется в виде меню. К тому же, всё это достаточно гибко настраивается. Правда, присутствует в zsh и один непрятный момент — в xterm криво работающие клавиши «Home», «End» и тд. Но это всё решаемо.

Установка.
[cc lang=»bash»]cd /usr/ports/shells/zsh && make install clean[/cc]
Меняем пользователю шелл
[cc lang=»bash»][lycane]: chpass
Changing user information for lycane.
Shell: /usr/local/bin/zsh
Full Name: Lycane
Office Location:
Office Phone:
Home Phone:
Other information:[/cc]
Настройка.
Создаем файл конфигурации .zshrc в домашней директории пользователя. Ну и в качестве примера выложу свой конфиг.
[cc lang=»bash»]
#Файл истории
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] ‘
[/cc]
Чтобы видеть все процессы для kill или killall. При нажатии Tab автоматически добавится имя процесса
[cc lang=»bash»]
zstyle ‘:completion:*:processes’ command ‘ps -xuf’
zstyle ‘:completion:*:processes’ sort false
zstyle ‘:completion:*:processes-names’ command ‘ps xho command’
[/cc]
Установка-снятие некоторых опций шелла
[cc lang=»bash»]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[/cc]
Можно отключить функцию различения регистров
[cc lang=»bash»]zstyle ‘:completion:*’ matcher-list ‘m:{a-z}={A-Z}'[/cc]
Полезная опция установки лимитов на использование системных ресурсов.
[cc lang=»bash»]limit stack 8192 # лимит объёма памяти, выделеной под стек, дабы не переполнялся
limit core 0 # Выключаем запись дампов упавших в корку программ
umask 022 # Установка атрибутов доступа создаваемых файлов[/cc]
Настройка приглашения командной строки.
Основные переменные, которые можно использовать:
%{\e[1;31m%} — цветовой блок; код цвета, в данном случае красный;
%M — полное имя хоста машины;
%m — имя хоста без домена;
%n — имя пользователя;
%~ — текущая директория;
%T — текущее время в 24-часовом формате.
Стоит обратить внимание, что у zsh есть опция установки приглашения с правой стороны, в которой, к примеру, можно выставить текущее время
[cc lang=»bash»]
RPROMPT=$’%{\e[1;31m%}[%{\e[1;37m%}%T%{\e[1;31m%}]%{\e[0m%}’
[/cc]
У меня это всё выглядит так, без лишних заморочек
[cc lang=»bash»]
autoload promptinit
promptinit
PROMPT=$’%{\e[1;31m%}[%{\e[1;37m%}%m%{\e[1;31m%}]:%{\e[0m%} ‘
[/cc]
Подгружаем модули, обеспечивающие расширеные возможности автодополнения
[cc lang=»bash»]autoload -Uz compinit
compinit
zmodload -a zsh/stat stat
zmodload -a zsh/zpty zpty
zmodload -a zsh/zprof zprof
zmodload -ap zsh/mapfile mapfile[/cc]
Выбор браузера по умолчанию при открытии веб-страниц
[cc lang=»bash»]autoload -U pick-web-browser
alias -s {html,htm,mht}=pick-web-browser[/cc]
Алиасы. Ну, тут уж есть, где разгуляться душе и упростить работу в консоли. Включайте свой полет фантазии и добавляйте необходимые вам алиасы. Например
[cc lang=»bash»]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 #устанавливаем чем открывать заданные расширения[/cc]
Установка нормального поведения клавиш Delete, Home, End и т.д. Запустится программка, которая попросит Вас поочередно нажимать клавиши, которые она будет запоминать. После появится каталог ~/.zkbd, в котором должен появится файлик xterm. Должен, но появится там файлик с несколько другим именем, поэтому ручками его переименовываем в xterm.
[cc lang=»bash»]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[/cc]

SSH — автозаполнение хостов, юзеров. Пробелов между %% быть не должно.
[cc lang=»bash»]hosts=(${${${(f)»$(<$HOME/.ssh/known_hosts)"}%%\ *}%%,*}) zstyle ':completion:*:hosts' hosts $hosts zstyle ':completion:*:(ssh|scp):*' tag-order '! users'[/cc] Отображение в заголовке окна терминала информации о номере консоли, пути и выполняемой команде [cc lang="bash"]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
}
[/cc]
Ну, для начала этого достаточно. Если появилось желание узнать больше о возможностях zsh, то читаем официальную документацию (офф.сайт zsh), маны (zsh, zshbuiltins, zshcompctl, zshcompwid, zshexpn, zshmodules, zshparam, zshtcpsys, zshzle, zshall, zshcalsys, zshcompsys, zshcontrib, zshmisc, zshoptions, zshroadmap, zshzftpsys) и экспериментируем :)

2 комментария на “Zsh: настройка”

  • lizz says:

    На самом деле не криво, вместо них ctrl+a, ctrl+e. Дело привычки… я привык =). Хотя в линуксах и home с end’ом работают привычно.

  • lycane says:

    ctrl+a, ctrl+e — это из другой оперы :) ими я тоже полЬзуюсЬ, бывает. А то, что у тебя по человечески работают эти клавиши — тебе, наверное, просто повезло :) ибо многочисленные источники, которые пришлосЬ перечитатЬ по теме, гласят, что нифика не работает как надо :) и предлагают вышеизложенный метод настройки этихЪ клавиш как один из вариантов :)

Оставить комментарий

PR-CY.ru