пʼятницю, 16 травня 2008 р.

zsh forever

Где-то неделю назад познакомился с этой зашибенной командной оболочкой. Сделал chsh -s /bin/zsh видать надолго 8)

zsh - замечательная командная оболочка, основной фишкой которой является развитый алгоритм автодополнения, притом - удобно расширяемый. Вобщем - в отличии от bash, zsh более направлена в сторону эффективной и быстрой работы с командной строкой.


Но в ней присутствовал один неприятный момент - в xterm криво работающие клавиши "Home", "End", я это исправил, вобщем - всё написано в конфиге

Общесистемный конфиг для zsh


/etc/zsh/zshrc
#
# /etc/zsh/zshrc by NETZMB
#
# прототип:
# http://www.freesource.info/wiki/AltLinux/DotFiles/Shells/Zsh/Sovety&
#

#
# менюобразная подсветка вариантов окончаний
#

zmodload zsh/complist
zstyle ':completion:*' menu yes select

#
# чтобы видеть все процессы для kill или killall
#

zstyle ':completion:*:processes' command 'ps -xuf'
zstyle ':completion:*:processes' sort false
zstyle ':completion:*:processes-names' command 'ps xho command'

#
# Настройка приглашения оболочки
# тема приглашения
#

autoload promptinit
promptinit
prompt gentoo

#
# Автодополнение имени хоста для SSH
#
if [ -e $HOME/.ssh/known_hosts ] ; then
hosts=(${${${(f)"$(<$HOME/.ssh/known_hosts)"}%%\ *}%%,*})
zstyle ':completion:*:hosts' hosts $hosts
fi



#
# Установка нормального поведения клавиш Delete, Home, End и т.д.:
#


case $TERM in
#
# для системной консоли (/dev/tty*)
#
linux|screen|screen.linux)

bindkey "^[[2~" yank
bindkey "^[[3~" delete-char
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^[[1~" beginning-of-line
bindkey "^[[4~" end-of-line
bindkey "^[e" expand-cmd-path # C-e for expanding path of typed command
bindkey "^[[A" up-line-or-search # up arrow for back-history-search
bindkey "^[[B" down-line-or-search # down arrow for fwd-history-search
bindkey " " magic-space # do history expansion on space
;;

#
# для X-терминалов
#
*xterm*|rxvt|(dt|k|E)term)

bindkey "^[[2~" yank
bindkey "^[[3~" delete-char
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^[[H" beginning-of-line # Клавиша Home
bindkey "^[[F" end-of-line # Клавиша End
bindkey "^E" expand-cmd-path # C-e добавляет к набираемой команде её
# абсолютный путь
# т.е. например, ls заменяется на /bin/ls.

# Действует аналогично команде `which ls`

bindkey "^[[A" up-line-or-search # Стрелка-вверх, пройтись назад по
# истории введённых команд

bindkey "^[[B" down-line-or-search # Стрелка-вверх, пройтись вперёд по
# истории введённых команд
bindkey " " magic-space ## do history expansion on space
;;
esac

# Примечание: если, скажем, в KDE для konsole
# выбрать тип Linux console, необходимости
# во второй секции нет.


#
# Убираем повторяющиеся каталоги из путей подстановки файлов
# при автодополнениях
#
typeset -U path cdpath fpath manpath


# Список хостов, к которым будет применяться автодополнение
# при наборе в командной строке
# Например, как аргументов браузера или ftp-клиента (см. man zstyle)

hosts=('hostname' sky.eth.net modem.eth.net ap1.eth.net wf-vaio.neb.net)


# Число команд, сохраняемых в файл истории введеных команд (HISTFILE)
SAVEHIST=500

# Чucлo koмaнg, coxpaняeмыx в сеансе
HISTSIZE=500

# максимальный размер стека каталогов
DIRSTACKSIZE=20

#
# Опции истории команд:
# Дописывание файла истрии
setopt APPEND_HISTORY
# Игнopupoвaть вce пoвтopeнuя команд
setopt HIST_IGNORE_ALL_DUPS
# Игнopupoвать лишние пpoбeлы
setopt HIST_IGNORE_SPACE
# Удалять из файла истории пустые строки
setopt HIST_REDUCE_BLANKS




Личные настройки пользователя zsh:


~/zshrc
#
# ~/zshrc by NETZMB

#
# включаем подстветку типов файлов для ls и делаем команду "ls"
# более "говорливой"
#

alias ls='ls --color'
alias cp='cp --verbose'

#
# Устанавливаем личные лимиты использования ресурсов компьютера
# дабы предотвратить заполнение системных каталогов ненужными
# файлами дампов аварийно завершившихся программ, а также предотвратить
# неконтролируемое потребление ресурсов компа кривой программой, или даже
# предупредить локальную DDoS атаку
#

limit stack 8192 # лимит объёма памяти, выделеной под стек.
# помогает от переполнения стека

limit core 0 # Выключаем запись файлов-дампов упавших программ

umask 022 # Установка атрибутов доступа для вновь создаваемых файлов
# В данном случае - rw-r--r--


#
# Каталоги, именованные для быстрого доступа к ним по короткой метке
# (например, здесь - вместо того, чтобы набирать
# /var/local/misc/dosemu-root/root/src/sto-ed/bin/tex, можно просто написать
# ~prc )
#

hash -d prc=/var/local/misc/dosemu-root/root/src/sto-ed/bin/tex




И ещё - если Вы в момент набора команды нажали клавишу Escape, то командная строка zsh начинает себя вести как редактор vi. Вобщем, если это Вам не нужно, то просто нажмите Ctrl+C, после чего zsh вернёт Вам контроль над историей ком. строки и проч.



Советую почитать, даже если вы не использовали zsh ранее (мой конфиг частично был содран оттуда) :Советы по настройке zsh


PS: пока это то, на что хватило времени написать. Остальное - чуть позже

4 коментарі:

Ostrich's Poison сказав...

Немного исправил и причесал выставленные конфиги, в частности - исправил /etc/zsh/zshrc для норм. работы с клавишами в системной консоли через screen.

А также - багацько мелких стилистических поправок.

PS: коплю скриншоты работы, возможно вскоре появится краткое введение в zsh

bak1an сказав...

а краткое введение давай, почитаемс

Ostrich's Poison сказав...

2 bak1an
Обязательно! Покаместь разгребусь с наплывшей работой и залабаю

Ostrich's Poison сказав...

Добавил проверку на наличие файла с хостами ssh, т.к. при отсутствующем файле .ssh/known_hosts скрипт /etc/zsh/zshrc не выполнялся до конца.
В общем, FIXED