Вход:  Пароль:  
FreeSource: AltLinux/DotFiles/Shells/Zsh/Советы ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия AltLinux/DotFiles/Shells/Zsh/Советы за 2005-07-13 14:08:20..

Советы по настройке zsh


В этой заметке приводится несколько очень полезных, на мой взгляд, советов по настройке командной оболочки zsh.

Автодополнение


Это, пожалуй, самая известная и частоиспользуемая в zsh функция, выгодно отличающая его от других командных интерпретаторов.
Помимо простого дополнения имен и путей к файлам zsh также способен дополнять опции к командам (попробуйте, к примеру,
find . -na<Tab> -s<Tab>), названия страниц руководств (man chkc<Tab> дополнится до man chkconfig) и раскрывать сокращенные
пути (к примеру, /mn/o/d/a<Tab> раскрывается до /mnt/other/distrib/alt).


Чтобы включить это продвинутое автодополнение, вам нужно добавить в конфигурационный файл zsh (~/.zshrc) следующие строки:



Замечу, что пользователям ALT Linux этого делать не потребуется, так как данная возможность включена по умолчанию (см. /etc/zshrc)


Выбор вариантов можно оформить в виде меню с подсветкой текущего варианта. Простой пример:



Разноцветные пункты меню в зависимости от типа об'екта. Тоже простой пример из info zsh:



По умолчанию автодополнение для kill и killall не показывает процессы без controlling tty (для всех пользователей кроме root).
Устраняем этот недостаток и дополнительно добавляем «красоты»:



Про автодополнение для ssh/scp написано ниже.

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


За внешний вид приглашения отвечает переменная PROMPT (а не PS1, как в bash!). Все возможные специальные последовательности,
которые возможно использовать в приглашении, описаны в man zshmisc в главе PROMPT EXPANSION. К примеру, вы можете,
для начала, установить (если оно еще не установлено) самое обычное приглашение:



Подробнее о том, что означает каждая из специальных последовательностей, вы можете узнать в странице руководства ;)


Еще одна удобная особенность: приглашение может быть выведено не только в левой части экрана, но и в правой! За это отвечает
переменная RPROMPT.



После этого в правой части командной строки вы будете видеть текущее время.

Темы приглашений


Если вы хотите придумать оригинальное и удобное приглашение, то сначала я рекомендую вам взглянуть на уже существующие. Вдруг там
вы найдете подходящую или решите позаимствовать из понравившийся нужный элемент. Выполните следующие команды:



В результате вы увидите список из 15 предустановленных тем для приглашения. Попробовать понравившуюся можно командой
promptinit название_темы Команда prompt -p выдает примеры всех установленных тем строки приглашения.

Автопереход


Обычно при работе в терминале приходится довольно часто перемещаться по директориям. И каждый раз приходится вводить
cd /path/to/file Но разработчики zsh подумали, что использование этой команды нужно как-то упростить и придумали autocd!
Смысл прост: вместо cd /path/to/file вам нужно ввести лишь путь! Чтобы уже начать пользоваться этой удобной возможностью,
добавьте еще одну строчку в ~/.zshrc:


Именованные каталоги


Еще один способ, чтобы быстрее перемещаться по иерархии каталогов. Этот способ чем-то напоминает создание alias'ов (псевдонимов)
для команд. Для этого вам нужно прописать в конфигурационный файл часто посещаемые вами пути к файлам и соответствующие им
имена. К примеру, вот так:



Теперь можно будет вместо /mnt/other/distrib набрать его имя ~dist При этом здесь также действует и автодополнение имени,
и к низлежайшим файлам/каталогам.

Глобальные псевдонимы


Кроме обычных псевдонимов существуют также глобальные. Их использование лучше всего рассмотреть на примере. Вот часть конфига zsh,
в которой определяются глобальные псевдонимы:



Теперь для того, чтобы узнать установлен ли в вашей системе пакет example будет достаточно ввести: rpm -qa G example. Вместо 'G'
zsh подставит '| grep' и таким образом вы найдете нужный пакет в списке всех установленных. Таким же образом используются и другие
глобальные псевдонимы из примера:



Данная команда найдет все пакеты с ядром и модулями к нему для однопроцессорной машины, отсортирует список и передаст less,
чтобы вам было удобнее его просмотреть.

Псевдонимы расширения


Еще один интересный вид псевдонимов – псевдонимы расширения (suffix aliases). Эти псевдонимы позволяют расширить команду
вида name.ext до program name.ext. Например, если в файле конфигурации прописать:



команда movie.avi будет расширена до mplayer movie.avi

Рекурсивный глоббинг


«Zsh позволяет производить рекурсивное раскрытие имен файлов. Для этого используются формы **/ и ***/ Первая форма
отличается от второй лишь тем, что не следует по символьным ссылкам. Так, например



произведет поиск файлов с именем foo во всех подкаталогах.»*

Автокоррекция команд


Иногда при вводе команд мы допускам ошибки. Причем не очень серьезные. В zsh есть способ, как быстро возможно разрешать
подобные ситуации — автокоррекция команд. Включаем ее:



После этого, если вы введете sl вместо ls, то zsh вежливо поинтересуется, не желаете ли вы ввести ls вместо sl.


Но это еще не все. В ваших руках даже возможность настроить запрос на коррекцию, для этого достаточно присвоить нужное значение
переменной SPROMPT Вот, к примеру, как это настроено у меня:


Взаимодействие с терминалом


Если zsh запущен в каком-либо псевдотерминале (xterm, aterm и т.д.), то возможно управлять заголовком окна. Т. е. вы можете попросить
zsh выводить в него что-нибудь полезное. Вот пример (добавьте в ~/.zshrc):



Здесь проверяется значение переменной $TERM, и если оно равно rxvt или начинается с xterm, то выполняется действие. В частности,
задается функция, которая и выводит строку, похожую на приглашение, в заголовок окна. Функция precmd() выполняется каждый
раз перед выводом приглашения. Также вы можете использовать функцию preexec(), которая выполняется перед запуском любой
программы, и chpwd(), которая «вызывается при изменении рабочего каталога. [...] Кроме того, может быть определена функция
periodic, которая может выполнятся через каждые $PERIOD (если этот параметр определен) секунд перед выводом приглашения.»*


Быть может, вам покажется удобным выводить имя запущенной программы? Тогда вместо третьей строчки напишите


Клавиатурные комбинации как в Vim/Emacs


Zsh умеет частично эмулировать Vim/Emacs при редактировании командной строки. Команды bindkey -v и bindkey -e
соответственно загружают необходимые раскладки клавиш.


«Магический» поиск в истории команд



Теперь, если нажать Ctr+X Ctrl+Z, при вводе команды будет автоматически производится поиск в истории по первым буквам команды.
Нажатие Ctrl+Z отключит этот режим.

Мелкие фишки


В поставке zsh идет несколько интересных модулей.


Тетрис :)



Потом жмем Ctrl-T и играем :) Вместо ^T можно использовать любое другое сочетание клавиш. Выход – q.


Калькулятор



Текстовый редактор



Управление – как в vim или emacs в зависимости от используемого в командной строке режима (см. выше).

Автодополнение имени хоста для SSH


Подсмотрено у virtuoso на #debian-russian:



Однако этот способ имеет несколько неисправимых преимуществ. Более «кошерный» вариант предложен в виде патча здесь.


По умолчанию для ssh/scp и им подобных дополняются и хост и пользователь. Отключить отображение пользователей в списке
вариантов (не отключая самой возможности дополнять их) можно так:


Подстановка полного пути из $PATH


Если вам требуется отредактировать какой-нибудь скрипт, который расположен в $PATH или же просто использовать полный путь к програме, то zsh способен отыскать требуемую программу и использовать полный путь к ней. К примеру, чтобы отредактировать файл script достаточно будет ввести:



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

Полезные ссылки


На русском:
http://linuxshop.ru/unix4all/?cid=26&id=209
http://www.opennet.ru/base/dev/zsh_setup.txt.html
http://xtalk.msk.su/~ott/ru/linux/zsh/Zsh-article.ru.html


На английском:
http://www.faqs.org/faqs/unix-faq/shell/zsh/
http://adamspiers.org/computing/zsh/
http://www.daemonnews.org/199910/zsh.html
http://zsh.sourceforge.net/Guide/zshguide.html
http://www-106.ibm.com/developerworks/library/l-z.html
http://www.acm.uiuc.edu/workshops/zsh/toc.html


* цитата из статьи Алекса Отта


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]