Удобства zsh
- 28.05.08, 15:54
Z shell, zsh — одна из современных командных оболочек UNIX, может использоваться как интерактивная оболочка, либо как мощный скриптовой интерпретатор. Zsh является расширенным bourne shell с большим количеством улучшений.
К использованию zsh меня привел поиск удобного авто заполнения и поиска по истории. На FreeBSD, используя tсsh, я мог набирать множиство команд, они записывались в историю. Но занимаясь администрированием, вводить одно и тоже днями напролет надоедает и отнимает время. В tсsh реализовал фишку, в командной строке набираю
>find
и при нажатии стрелки вверх мне пречисляются разные варианты которые начинаются на find, выбираю с нужными ключами и только меняю искомое слово (набрал >cp и листаеш переход в нужный каталог и так с любыми словами и буквами, очень удобно). В Debian, используя оболочку tсsh, не смог это реализовать, поэтому перешел на zsh. В ней удалось реализовать и эту функцию и монго других полезностей.
Устанавливается
> aptitude install zsh
В домашнем нужно создать конфиг файлы. Я просто копировал из рутовых добавляя точку
[root|194]:/etc/zsh> ls
итого 48K
4,0K ./ 12K ../ 4,0K zlogin 4,0K zlogout 4,0K zprofile 4,0K zshenv 12K zshrc 4,0K zshrc_orig
[root|194]:/etc/zsh> cp zlogin /home/sasha/.zlogin
и так все остальные по аналогиии
[root|194]:/home/sasha>mv .zhistory
незабудте сменить владельца (вместо root)
Далее пример своего zshrc
[root|194]:/etc/zsh>vi zshrc
# my config --------------------------------------------------------------------------
# поиск в истории команд
autoload -U predict-on
zle -N predict-on
zle -N predict-off
bindkey "^X^Z" predict-on # C-x C-z
bindkey "^Z" predict-off # C-z
#----------------------------------------
# Path для поиска командой cd: то есть вместо cd $HOME/docs/editors/
# можно набирать просто cd editors
cdpath=(~/media ~/docs)
## Установка нормального поведения клавиш Delete, Home, End и т.д.:
case $TERM in
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
;;
*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 "^[[7~" beginning-of-line
bindkey "^[[8~" 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
;;
esac
# Примечание: если, скажем, в KDE для konsole
# выбрать тип Linux console, необходимости
# во второй секции нет.
# Use hard limits, except for a smaller stack and no core dumps
unlimit
limit stack 8192
limit core 0
limit -s
# Установка alias'ов
alias df='df -h'
alias du='du -s * -h'
alias ls='ls -ashF --color=auto'
alias ll='ls -al --color=auto'
alias host='host -av'
### вывод только каталогов
alias lsd='ls -ld *(-/DN)'
alias grep='grep --color=auto'
# Ниже даны опции, относящиеся к функциям zsh,
# которыми собственно и определяется мощь этой оболочки
# Shell functions
setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility
freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
# Where to look for autoloaded function definitions
fpath=($fpath ~/.zfunc)
# Autoload all shell functions from all directories in $fpath (following
# symlinks) that have the executable bit on (the executable bit is not
# necessary, but gives you an easy way to stop the autoloading of a
# particular shell function). $fpath should not be empty for this to work.
for func in $^fpath/*(N-.x:t); autoload $func
# automatically remove duplicates from these arrays
typeset -U path cdpath fpath manpath
# Указание путей к man-страницам.
manpath="/usr/man:/usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/qt/doc"
export MANPATH
# Установка вида приглашения
#(я использую раскоментированый вариант, закоментированны другие, пробуйте, какой вам милее), а так же можите #переделать под себя как цвета, так и символы.
## Обычное приглащение вида ~%=>
## (каталог от домашнего - пользователь/root - стрелка)
#Простой
#PROMPT='%T [%n@%m]%~%:> '
#Цветной
#PROMPT=$'%{\e[0;37m%}%T %{\e[0;32m%}%n%{\e[0;31m%}@%{\e[0;37m%}%m%{\e[0;31m%}:%{\e[0;39m%}%~%{\e[1;33m%}>%{\e[0m%} '
#PROMPT=$'%{\e[1;33m%}%T %{\e[0;36m%}[%{\e[0;32m%}%n%{\e[1;31m%}&%{\e[0;37m%}%m%{\e[0;36m%}]%{\e[0;36m%}:%{\e[0;33m%}%~%{\e[0;36m%}>%{\e[0m%} '
PROMPT=$'%{\e[0;32m%}%T %{\e[0;36m%}[%{\e[0;36m%}%n%{\e[0;32m%}|%{\e[0;39m%}%m%{\e[0;36m%}]%{\e[0;32m%}:%{\e[0;39m%}%~%{\e[0;36m%}>%{\e[0m%} '
#PROMPT=$'%{\e[0;32m%}%T %{\e[0;36m%}[%{\e[0;36m%}%n%{\e[0;33m%}*%{\e[0m%}%m%{\e[0;36m%}]%{\e[0;36m%}:%{\e[0;39m%}%~%{\e[0;36m%}>%{\e[0m%} '
## Приглашения для второй линии мноргострочных команд (я не использую, но можите раскоментировать)
## вида #_строки>
#PROMPT2='%~%#=> '
#PROMPT2='%i%U> '
## Приглашение с правой стороны экрана вида (я не использую, но можите раскоментировать)
## 19:15 vc/5 (время - номер консоли)
#RPROMPT=' %T %y%b'
#RPROMPT=' %y'
# Переменные
## файл истории команд
## если не указан, история не будет сохраняться
## при выходе из сеанса
HISTFILE=~/.zhistory
## Число команд, сохраняемых в HISTFILE
SAVEHIST=5000
## Чucлo koмaнg, coxpaняeмыx в сеансе
HISTSIZE=5000
## Примечание:
## рекомендуются равные значения для
## SAVEHIST и HISTSIZE
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
# ----- TetriS -----
autoload -U tetris
zle -N tetris
bindkey ^T tetris
#-------------------
# ----------- Completion Styles ----------
# list of completers to use
zstyle ':completion:*::::' completer _expand _complete _ignored _approximate
# allow one error for every three characters typed in approximate completer
zstyle -e ':completion:*:approximate:*' max-errors
# 'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) numeric )'
# insert all expansions for expand completer
zstyle ':completion:*:expand:*' tag-order all-expansions
# formatting and messages
zstyle ':completion:*' verbose yes
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
zstyle ':completion:*' group-name ''
# match uppercase from lowercase
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# offer indexes before parameters in subscripts
zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
# command for process lists, the local web server details and host completion
#zstyle ':completion:*:processes' command 'ps -o pid,s,nice,stime,args'
#zstyle ':completion:*:urls' local 'www' '/var/www/htdocs' 'public_html'
zstyle '*' hosts $hosts
#unalias run-help
autoload run-help
К использованию zsh меня привел поиск удобного авто заполнения и поиска по истории. На FreeBSD, используя tсsh, я мог набирать множиство команд, они записывались в историю. Но занимаясь администрированием, вводить одно и тоже днями напролет надоедает и отнимает время. В tсsh реализовал фишку, в командной строке набираю
>find
и при нажатии стрелки вверх мне пречисляются разные варианты которые начинаются на find, выбираю с нужными ключами и только меняю искомое слово (набрал >cp и листаеш переход в нужный каталог и так с любыми словами и буквами, очень удобно). В Debian, используя оболочку tсsh, не смог это реализовать, поэтому перешел на zsh. В ней удалось реализовать и эту функцию и монго других полезностей.
Устанавливается
> aptitude install zsh
В домашнем нужно создать конфиг файлы. Я просто копировал из рутовых добавляя точку
[root|194]:/etc/zsh> ls
итого 48K
4,0K ./ 12K ../ 4,0K zlogin 4,0K zlogout 4,0K zprofile 4,0K zshenv 12K zshrc 4,0K zshrc_orig
[root|194]:/etc/zsh> cp zlogin /home/sasha/.zlogin
и так все остальные по аналогиии
[root|194]:/home/sasha>mv .zhistory
незабудте сменить владельца (вместо root)
Далее пример своего zshrc
[root|194]:/etc/zsh>vi zshrc
# my config --------------------------------------------------------------------------
# поиск в истории команд
autoload -U predict-on
zle -N predict-on
zle -N predict-off
bindkey "^X^Z" predict-on # C-x C-z
bindkey "^Z" predict-off # C-z
#----------------------------------------
# Path для поиска командой cd: то есть вместо cd $HOME/docs/editors/
# можно набирать просто cd editors
cdpath=(~/media ~/docs)
## Установка нормального поведения клавиш Delete, Home, End и т.д.:
case $TERM in
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
;;
*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 "^[[7~" beginning-of-line
bindkey "^[[8~" 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
;;
esac
# Примечание: если, скажем, в KDE для konsole
# выбрать тип Linux console, необходимости
# во второй секции нет.
# Use hard limits, except for a smaller stack and no core dumps
unlimit
limit stack 8192
limit core 0
limit -s
# Установка alias'ов
alias df='df -h'
alias du='du -s * -h'
alias ls='ls -ashF --color=auto'
alias ll='ls -al --color=auto'
alias host='host -av'
### вывод только каталогов
alias lsd='ls -ld *(-/DN)'
alias grep='grep --color=auto'
# Ниже даны опции, относящиеся к функциям zsh,
# которыми собственно и определяется мощь этой оболочки
# Shell functions
setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility
freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
# Where to look for autoloaded function definitions
fpath=($fpath ~/.zfunc)
# Autoload all shell functions from all directories in $fpath (following
# symlinks) that have the executable bit on (the executable bit is not
# necessary, but gives you an easy way to stop the autoloading of a
# particular shell function). $fpath should not be empty for this to work.
for func in $^fpath/*(N-.x:t); autoload $func
# automatically remove duplicates from these arrays
typeset -U path cdpath fpath manpath
# Указание путей к man-страницам.
manpath="/usr/man:/usr/share/man:/usr/local/man:/usr/X11R6/man:/opt/qt/doc"
export MANPATH
# Установка вида приглашения
#(я использую раскоментированый вариант, закоментированны другие, пробуйте, какой вам милее), а так же можите #переделать под себя как цвета, так и символы.
## Обычное приглащение вида ~%=>
## (каталог от домашнего - пользователь/root - стрелка)
#Простой
#PROMPT='%T [%n@%m]%~%:> '
#Цветной
#PROMPT=$'%{\e[0;37m%}%T %{\e[0;32m%}%n%{\e[0;31m%}@%{\e[0;37m%}%m%{\e[0;31m%}:%{\e[0;39m%}%~%{\e[1;33m%}>%{\e[0m%} '
#PROMPT=$'%{\e[1;33m%}%T %{\e[0;36m%}[%{\e[0;32m%}%n%{\e[1;31m%}&%{\e[0;37m%}%m%{\e[0;36m%}]%{\e[0;36m%}:%{\e[0;33m%}%~%{\e[0;36m%}>%{\e[0m%} '
PROMPT=$'%{\e[0;32m%}%T %{\e[0;36m%}[%{\e[0;36m%}%n%{\e[0;32m%}|%{\e[0;39m%}%m%{\e[0;36m%}]%{\e[0;32m%}:%{\e[0;39m%}%~%{\e[0;36m%}>%{\e[0m%} '
#PROMPT=$'%{\e[0;32m%}%T %{\e[0;36m%}[%{\e[0;36m%}%n%{\e[0;33m%}*%{\e[0m%}%m%{\e[0;36m%}]%{\e[0;36m%}:%{\e[0;39m%}%~%{\e[0;36m%}>%{\e[0m%} '
## Приглашения для второй линии мноргострочных команд (я не использую, но можите раскоментировать)
## вида #_строки>
#PROMPT2='%~%#=> '
#PROMPT2='%i%U> '
## Приглашение с правой стороны экрана вида (я не использую, но можите раскоментировать)
## 19:15 vc/5 (время - номер консоли)
#RPROMPT=' %T %y%b'
#RPROMPT=' %y'
# Переменные
## файл истории команд
## если не указан, история не будет сохраняться
## при выходе из сеанса
HISTFILE=~/.zhistory
## Число команд, сохраняемых в HISTFILE
SAVEHIST=5000
## Чucлo koмaнg, coxpaняeмыx в сеансе
HISTSIZE=5000
## Примечание:
## рекомендуются равные значения для
## SAVEHIST и HISTSIZE
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
# ----- TetriS -----
autoload -U tetris
zle -N tetris
bindkey ^T tetris
#-------------------
# ----------- Completion Styles ----------
# list of completers to use
zstyle ':completion:*::::' completer _expand _complete _ignored _approximate
# allow one error for every three characters typed in approximate completer
zstyle -e ':completion:*:approximate:*' max-errors
# 'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) numeric )'
# insert all expansions for expand completer
zstyle ':completion:*:expand:*' tag-order all-expansions
# formatting and messages
zstyle ':completion:*' verbose yes
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
zstyle ':completion:*' group-name ''
# match uppercase from lowercase
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# offer indexes before parameters in subscripts
zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
# command for process lists, the local web server details and host completion
#zstyle ':completion:*:processes' command 'ps -o pid,s,nice,stime,args'
#zstyle ':completion:*:urls' local 'www' '/var/www/htdocs' 'public_html'
zstyle '*' hosts $hosts
#unalias run-help
autoload run-help
2
Коментарі