The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Пример настройки zsh (shell zsh example)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: shell, zsh, example,  (найти похожие документы)
From: Алексей Федорчук <alv@linux-online.ru> Newsgroups: http://www.linuxshop.ru/unix4all/ Date: Mon, 25 Dec 2003 14:31:37 +0000 (UTC) Subject: Пример настройки zsh Оригинал: http://linuxshop.ru/unix4all/?cid=&id=394 Как-то в нашем форуме промелькнул вопрос - а как сделать, чтобы в командной строке zsh клавиши типа Delete, End, Home вели себя нормально (по умолчанию они этого делать не собираются). У меня до этого долго не доходили руки - я в этих целях привык к клавишным комбинациям. Однако некоторое чувство дискомфорта преследовало: как же так, какой-то bash умеет нормально обращаться с клавишами, а любимый zsh - не умеет. А тут и случай представился: во время затеянной в рамках мегатестирования тотальной пересборки Qt/KDE/иже_с_ними времени образовалось - вагон и маленькая тележка. И я наконец-то разобрался с клавишами в zsh. А заодно и с некоторыми другими опциями его настройки, остававшимися для меня не вполне ясными. На нормальную заметку все это явно не тянет, поэтому ниже я просто привожу свои рабочие конфиги с комментариями того, что знаю - в дополнение к ранее написанной [61]статье. Кое-где сохраняются комментарии из оригинального эталонного файла zshrc. Для начала напомню, что zsh использует следующие конфиги (для простоты рассмотрим только те, что в домашнем каталоге): ~/.zshenv, считываемый при каждом запуске экземпляра оболочки (интерактивном и неинтерактивном), ~/.zshrc, считываемый при каждом интерактивном запуске, и один из пары ~/.zlogin или ~/.zprofile - при каждом запуске zsh в качестве пользовательской оболочки (login shell). Я использую ~/.zlogin, при котором установка переменных окружения происходит в стиле C-Shell: сначала из ~/.zshenv, затем из ~/.zshrc и, наконец, из ~/.zlogin. К слову - zsh можно собрать так, чтобы он брал свои переменные и переменные окружения из какого-либо глобального конфига, например, /etc/profile. Для этого при начальном конфигурировании исходников следует указать $ ./configure --enable-zprofile=/etc/profile И ещё одно вводное замечание. Все сказанное ниже относится к последней development-версии - 4.1.1, однако практически те же конфиги применялись мною и ранее - начиная с версии 4.0.4. Причём все они были собраны собственноручно. Я настоятельно не рекомендую применять прекомпилированные версии из штатных комплектов дистрибутивов, если точно не известно, как именно они собраны. Ибо zsh имеет великое множество опций конфигурирования, позволяющих, в частности, изменить порядок считывания профильных файлов - так что в данной конкретной бинарной версии он может быть иным. И ещё - мне известны случаи, когда прилагаемые к бинарнику конфиги из дистрибутивов не соответствовали опциям конкретной сборки. В этих случаях zsh начинает вести себя, мягко говоря, несколько странно... Однако пора за дело. Первым в моей схеме идёт ~/.zshenv. Он оказывает воздействие только при shell-скриптинге. Поэтому у меня он очень мал: # # My ~/. zshenv file for zsh 4.0 # export PATH="/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/opt/bin:/opt/kde/bin" Основное внимание я уделяю файлу ~/.zshrc, так как им определяется поведение zsh не только при авторизации в консоли, но и при запуске терминальных окон в Иксах. # # My ~/.zshrc # # 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 # Установка атрибутов доступа для вновь создаваемых файлов umask 022 # Исправление поведения less - для ликвидации лишних Esc # и прочего безобразия при выводе man-страниц. # Насколько мне известно, нужно только в некоторых дистрибутивах export LESS="-R" # Установка alias'ов ## alias'ы для команд, не требующих коррекции, но требующих подтверждения alias mv='nocorrect mv -i' # переименование-перемещение c пogтвepжgeнueм alias cp='nocorrect cp -iR' # рекурсивное копирование с подтверждением alias rm='nocorrect rm -i' # удаление с подтверждением alias rmf='nocorrect rm -f' # принудимтельное удаление alias rmrf='nocorrect rm -fR' # принудительное рекурсивное удаление alias mkdir='nocorrect mkdir' # создание каталогов без коррекции ## Примечание: если не определить здесь nocorrect, ## zsh будет настойчиво предлагать подстановку существующих имен ## при создании каталого, копировании и т.д. ## Разные полезные (ИМХО) alias'ы alias h=history alias grep=egrep ### вывод свободного дискового пространства в мегабайтах alias df='df -m' ### Представление вывода less в more-подобном виде ### (с именем файла и процентом вывода) alias less='less -M' ### Русский словарь для ispell по умолчанию alias ispell='ispell -d russian' ## aliases для команды ls ### показ классификации файлов в цвете и символически alias ls='ls -F --color=auto' ### вывog в gлuннoм фopмaтe alias ll='ls -l' ### вывog всех файлов, включая dot-фaйлы, kpoмe . u .. alias la='ls -A' ### вывog вcex фaйлoв в gлuннoм фopмaтe, вkлючaя inodes alias li='ls -ial' ### вывод только каталогов alias lsd='ls -ld *(-/DN)' ### вывog тoльko dot-фaйлoв alias lsa='ls -ld .*' # Установка глобальных псевдонимов # для командных конвейеров alias -g M='|more' alias -g L='|less' alias -g H='|head' alias -g T='|tail' alias -g N='2>/dev/null' # Ниже даны опции, относящиеся к функциям 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 # Список хостов, к которым будет применяться автодополнение # при наборе в командной строке # например, как аргументов браузера или ftp-клиента (see later zstyle) hosts=('hostname' linuxshop.ru ftp.archlinux.org) # Установка вида приглашения ## Обычное приглащение вида ~%=> ## (каталог от домашнего - пользователь/root - стрелка) PROMPT='%~%#=> ' ## Приглашения для второй линии мноргострочных команд ## вида #_строки> PROMPT2='%i%U> ' ## Приглашение с правой стороны экрана вида ## 19:15 vc/5 (время - номер консоли) RPROMPT=' %T %y%b' # Всякие переменные ## файл истории команд ## если не указан, история не будет сохраняться ## при выходе из сеанса 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 # Установка-снятие опций шелла 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 ## Отключение звукового сигнала ## при ошибках setopt No_Beep ## Нe cчuтaть Control+C зa выxog uз oбoлoчku setopt IGNORE_EOF # Autoload zsh modules when they are referenced zmodload -a zsh/stat stat zmodload -a zsh/zpty zpty zmodload -a zsh/zprof zprof zmodload -ap zsh/mapfile mapfile # Опции общего поведения # bindkey -v # режим навигации в стиле vi bindkey -e # peжuм нaвuгaцuu в cтuлe emacs bindkey ' ' magic-space # also do history expansion on space bindkey '^I' complete-word # complete on tab, leave expansion to _expand # Для разворота сокращенного ввода типа cd d/e в docs/editors autoload -U compinit compinit # 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 # Filename suffixes to ignore during completion (except after rm command) zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns '*?.o' '*?.c~' '*?.old' '*?.pro' # the same for old style completion #fignore=(.o .c~ .old .pro) # ignore completion functions (until the _ignored completer) zstyle ':completion:*:functions' ignored-patterns '_*' # Флаги оптимизации для gcc CFLAGS="-O3 -march=pentium4 -fomit-frame-pointer -funroll-loops -pipe -mfpmath=sse -mmmx -msse2 -fPIC" CXXFLAGS="$CFLAGS" BOOTSTRAPCFLAGS="$CFLAGS" export CFLAGS CXXFLAGS BOOTSTRAPCFLAGS И, наконец, файл ~/.zlogin. Что осталось неохваченным в ~/.zshrc и требуется только при авторизации в системе? Правильно, установка locale. И потому # # My ~/.zlogin # # Установка всех локально-зависимых переменных, # кроме LC_ALL export LANG="ru_RU.koi8r" # Установка десятичной точки # вместо запятой # (требуется для некоторых счетных программ) export LC_NUMERIC="POSIX" Это мои пользовательские конфиги. Почти те же самые я использую и для root'а, с минимальными коррективами. Так, path в /root/.zshenv значениями /sbin:/usr/sbin:/usr/local/sbin В /root/.zshrc cdpath имеет вид cdpath=(~/etc ~/usr) А в /root/.zlogin локаль установлена как export LANG="POSIX" так как некоторые программы упорно не желают собираться при какой-либо иной.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, ihanic (?), 15:02, 29/11/2005 [ответить]  
  • +/
    несколько месяцев назад ZSH стала поддерживать utf-8
    Так, что строчку
    export LANG="ru_RU.koi8r"
    можно смело заменять на
    export LANG="en_US.utf8"
    немного огорчает, что пока эта возможность есть только в cvs релизе. (несколько слов, как установить из cvs zsh можно посмотреть здесь:   http://ihanic.gz-net.ru/zsh-utf8 )
    Причем в отличие от летних релизов (где zsh-dev воспринимал utf8 символы, но криво их редактировал) и не показывал их в автопродолжении, то сейчас zle полностью поддерживает utf8
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру