Недавно пошла мода, на использование в качестве шелла - zsh. Даже не знаю, откуда она взялась. В общем, не в этом и суть. Мода понесла за собой море статей на тему zsh, но нигде ничего интересно и полезного на мой взгляд не было. Не раскрывало и половины потенциала zsh. Я конечно, не претендую на полноту. Я лишь опишу то, что я действительно использую повседневно, и что позволяет мне обходится без файлового менеджера и переложить эти задачи на zsh.
И так, самое первое, это конечно же автодополнение по Tab. Все знают что оно крайне удобно и заметно более продвинутое чем в bash и других командных оболочках. Для него нужно добавить в конфиг следующее:
zstyle ':completion:*' completer _expand _complete _ignored
zstyle ':completion:*' group-name ''
zstyle ':completion:*' list-colors ''
zstyle ':completion:*' list-prompt '%SAt %p: Hit TAB for more, or the character to insert%s'
zstyle ':completion:*' max-errors 1
zstyle ':completion:*' menu select=long-list select=0
zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s'
zstyle ':completion:*' use-compctl false
zstyle ':completion:*' verbose true
zstyle :compinstall filename '/home/bosha/.zsh/.zshrc'
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
И выглядит оно как своеобразное меню:

Постоянно писать cd чтобы сменить директорию тоже не кажется очень удобным. Поэтому включаем режим, в котором можно просто набрать путь для перехода в директорию:
setopt AUTO_CD
Теперь для перехода по каталогам не нужно использовать cd, но и это тоже далеко не предел :) Например можно перемещаться по директориям с использованием сокращённого ввода. Т.е. вместо /mnt/hard/music, можно написать /m/h/m/ и нажать Enter и сразу переместимся в каталог. Если вариантов перехода несколько, то zsh предложит выбрать:
autoload -Uz compinit
compinit
Так же, для работы с архивами, использую пару не помню откуда взявшихся функций:
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*.tbz) tar xjvf ;;
*) echo "я не в курсе как распаковать '$1'..." ;;
esac
else
echo "'$1' is not a valid file"
fi
}
# упаковка в архив
pk () {
if [ $1 ] ; then
case $1 in
tbz) tar cjvf $2.tar.bz2 $2 ;;
tgz) tar czvf $2.tar.gz $2 ;;
tar) tar cpvf $2.tar $2 ;;
bz2) bzip $2 ;;
gz) gzip -c -9 -n $2 > $2.gz ;;
zip) zip -r $2.zip $2 ;;
7z) 7z a $2.7z $2 ;;
*) echo "'$1' cannot be packed via pk()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
extract разархивирует исходя из расширения, а pk запаковывает в архив. В качестве аргумента, pk, надо передать тип ахрива (например tar), и имя файла\директории для «запаковки».
Для переименования файлов, использую функцию name:
name() {
name=$1
vared -c -p 'rename to: ' name
command mv $1 $name
}
С ней переименование становится явно проще. name file_name и появится небольшой диалог, в котором необходимо будет ввести новое имя для файла.
Теперь самое интересное на мой взгляд: то, из-за чего я более не нуждаюсь в файловом менеджере - алиасы. В zsh есть более продвинутые алиасы, позволяющие открывать файл в определённом приложении. Выглядят они примерно так:
alias -s {pdf,djvu}=evince
Теперь можно открыть любой pdf документ просто набрав его имя в терминале, но тут есть одно но: терминал становится занят выводом программы и если убить терминал, то и программа завершится. Эта небольшая проблема решается с помощью nohup. Немного модернизируется alias, и вуаля! Всё работает прекрасно:
alias -s {pdf,djvu}="nohup evince"
Теперь запуская программу, можно будет смело закрывать терминал, а если требуется продолжить работу в нём же, то можно просто добавить & в конце имени, чтобы «увести программу в фон».
Это в принципе почти всё что я использую. Чуть ниже ещё пара функций которые я особо описывать не стал(ибо они не относятся непосредственно к zsh), и ссылка на мой конфигурационный файл zsh. Вдруг кому пригодится =]
Перевод и использованием google translate. Требуется скрипт. Брать тут - ссылко!
alias gt="~/.scripts/google-translate.py"
Использование: gt en ru word or phrase to translate
Мини-скрипт для загрузки файлов на сервис omploader.org:
ompload() { curl -F file1=@"$1" http://omploader.org/upload|awk '/Info:|File:|Thumbnail:|BBCode:/{gsub(/< [^<]*?\/?>/,"");$1=$1;print}';}
Автодополнение для kill\kilall:
zstyle ':completion:*:*:kill:*' menu yes select zstyle ':completion:*:kill:*' force-list always zstyle ':completion:*:*:kill:*:processes' list-colors "=(#b) #([0-9]#)*=$color[cyan]=$color[red]"
Мои конфиги доступны в git репозитории github:
git clone git://github.com/bosha/zshrc
Или по ссылке - ссылко!
Похожие записи:

И чем эта статья принципиально отличается от "моря статей на тему zsh, где ничего интересно и полезного на твой взгляд не было"?
[Ответить]
bosha Отвечает:
Март 4th, 2010 at 17:26
Тем, что в них написано что оно умеет что-то, и вот мой конфиг, посмотрите, но не поймите нефига. Я тут описал то, что действительно нужно, и дал нужны параметры. Плюс я ещё нигде не видел описанной работы с alias'ами zsh.
[Ответить]
Ссылка | Март 4th, 2010 at 17:02
extract pk это не толкьо zsh но и баш
name() можно дополнить с помощью vils (класная штука, скажу я тебе) ну или вообще замениить (где-то я видел эту функцию, не?)
> Немного модернизируется alias, и вуаля
о глобальных и суфиксных алиасах должен знать каждый пользователь zsh иначе ему и bash хватит =)
alias gt и ompload к zsh вообще никаким боком...
в общем ничего нового для меня ты не открыл (скорее закрыл, ибо... ну ты видел мой zshrc =) а он со временем растет меняется)
[Ответить]
bosha Отвечает:
Март 4th, 2010 at 17:38
Неа. Я твой zshrc не видел. Я уж и не помню откуда я всё это взял. Кажется находил вики по zsh и собирал по кусочкам :)
А вот функции extrack и pk да, я даже написал что не помню откуда они взялись :)
Ну и про gt, ompload я так и написал, что непосредственно к zsh они отношения не имеют..
Вообще, я даже не видел твой конфиг и твой пост. Так что не знал, но раз уж написал, то пусть будет ;)
[Ответить]
muhas Отвечает:
Март 4th, 2010 at 17:56
ну то что посту быть эт однозначно, я к тому похожие посты всё чаще и чаще встречаю. кто бы взялся да русский док по zsh уже написал что бы это остановить (хотя Алекс Отт отлично потрудился, и zsh-refcard офигенная вещь)
[Ответить]
muhas Отвечает:
Март 4th, 2010 at 18:00
ах, да.. забыл сказать что и я этим похожим постам посодействовал... писал тож по незнанию :(
[Ответить]
bosha Отвечает:
Март 4th, 2010 at 19:07
Каждый учится на ошибках :)
[Ответить]
bosha Отвечает:
Март 4th, 2010 at 19:08
Спасибо за наводку на zsh-refcard, я не знал)
[Ответить]
Ссылка | Март 4th, 2010 at 17:32
Кстате, по поводу суфиксных алиасов, можно использовать встроенную функцию zsh-mime-setup
и прописывать нужные хэндлеры через mailcap
И в любоам случае, спасибо за статью ;)
[Ответить]
bosha Отвечает:
Март 5th, 2010 at 12:28
Не за что. А можно подробнее (можно ссылкой), про zsh-mime-setup? ☺
[Ответить]
Allive Отвечает:
Март 9th, 2010 at 20:38
Думаю вы и сами уже нашли, но все же вот:
http://www.bash2zsh.com/essays/essay1_file_manager.html
[Ответить]
bosha Отвечает:
Март 10th, 2010 at 09:52
Да, нашёл, но всё равно спасибо :)
[Ответить]
Ссылка | Март 5th, 2010 at 09:51
Говоришь, что все описания Zsh бесполезные, а сам примерно в том же стиле написал :) Несколько простыней конфигов при этом нифига не понятно за что отвечает каждая конкретная строчка и какие ещё могут быть варианты.
Я пока подробного описания опций Zsh на русском не нашёл.
Ладно я английский сейчас ещё хотя бы немножко понимаю, а как быть остальным?
[Ответить]
bosha Отвечает:
Август 1st, 2010 at 19:16
Это было лишь предисловием. Главной целью, было описать то, что я использовал на тот момент, и за что я так обожаю zsh =]
[Ответить]
Тормоз Отвечает:
Август 1st, 2010 at 20:49
Настраиваю сейчас, пилю .zshrc, да ещё эмулятор терминала надо заставить 256 цветов показывать. Ох, не просто всё это для меня до сих пор. Не быстро.
[Ответить]
bosha Отвечает:
Август 1st, 2010 at 21:04
А какой эмулятор терминала?
[Ответить]
Тормоз Отвечает:
Август 1st, 2010 at 21:07
Из lxde (lxterminal).
[Ответить]
bosha Отвечает:
Август 1st, 2010 at 21:15
Тогда вряд ли могу помочь. Разве что посоветовать поставить rxvt-unicode, но для человека особо не сведущего во всяких гик штучках, его настройка окажется не очень простой..
Я даже не знал если честно, что у LXDE есть свой эмулятор терминала о_О
[Ответить]
Тормоз Отвечает:
Август 1st, 2010 at 21:20
В urxvt по-умолчанию 8 или 10 цветов, насколько я знаю. Чтобы он 256 поддерживал, надо патчить и собирать из исходников.
[Ответить]
bosha Отвечает:
Август 1st, 2010 at 21:27
Там 16 цветов если быть точным =) Пересобрать с поддрежкой 256 цветов не большая проблема. Надо его ещё настроить под себя, т.к. там нет ни меню, ничего либо подобного. Всё через файл ~/.Xdefaults. Если хочешь, могу помочь с настройкой =]
[Ответить]
Тормоз Отвечает:
Август 1st, 2010 at 23:02
Не, спасибо :) Всё же с терминалом ещё мучаться - это красноглазие совсем. Lxterminal вполне неплох. И он точно может отображать 256 цветов, я это проверял, надо просто найти, как его на это настроить.
А Zsh, блин, охренительно монстрячный! Осознал, что потратил несколько часов на попытку более-менее настроить .zshrc после чего просто поставил fish.
Fish очень понравился... БЫ! Если бы не тормозил ужасно. В общем, не было никаких проблем, но Тормоз как обычно придумал их себе :) С оболочками теперь вот. Беда, беда.
[Ответить]
Тормоз Отвечает:
Август 1st, 2010 at 23:04
http://brokenbrake.biz/2010/07/23/stupidity#c011781
[Ответить]
Тормоз Отвечает:
Август 1st, 2010 at 23:15
Проблема в том, что я его никогда не пойму полностью, это игрушка для постоянной настройки, как vim только хуже. Ну и были глюки всякие (не помню точно).
Fish недошеллом тебе кажется скорей всего только потому что ты фанат Zsh :)
bosha Отвечает:
Август 1st, 2010 at 23:33
Я не то чтобы фанат.. Просто пришёл к выводу, что zsh для меня удобнее. и практичнее, чем bash, csh, fish и т.д. К тому же я уже даже не помню когда последний раз открывал файл конфиругации (добавление новых alias'ов не в счёт) =)
bosha Отвечает:
Август 1st, 2010 at 23:09
Насчёт fish это очень спорно =) Он на мой взгляд недошелл какой-то =)
А в чём проблема с zsh?
[Ответить]
Тормоз Отвечает:
Август 1st, 2010 at 23:16
Здесь пишу, потому что у тебя, видимо, предел вложенности достигнут. Ох не люблю вообще эти "деревья". При этом форма себя очень неадекватно ведёт, пишет "
Тормоз Отвечает:
Август 1st, 2010 at 23:16
Упс. Видимо, временный был глюк. Но писало что-то вроде "невозможно отправить комментарий". ХЗ в чём дело.
Ссылка | Август 1st, 2010 at 18:35
Кстати, вместо питоновского скриптика для Google Translate лучше использовать локальную консольную утилиту. Я так думаю, она побыстрее будет работать http://habrahabr.ru/blogs/nix/69041/
[Ответить]
bosha Отвечает:
Август 1st, 2010 at 19:15
Пожалуй =)
Что примечательно, так это то, что пост на хабре писал тоже я :D
[Ответить]
Тормоз Отвечает:
Август 1st, 2010 at 20:48
Упс :) Извини, не заметил. Смешно получилось.
[Ответить]
bosha Отвечает:
Август 1st, 2010 at 21:04
Ничего, ничего =)
Я правда сам не знаю зачем на хабр написал, а не в блог =)
[Ответить]
Ссылка | Август 1st, 2010 at 19:05
А я то думал почему у меня нехрена не работало! а я оказывается твой .zshrc забыл!
Как обычно спасибо за твои конфиги =3
[Ответить]
bosha Отвечает:
Февраль 8th, 2011 at 10:00
@ZekMan, ты хочешь сказать у тебя ФС посыпалась от отсутствия моего конфига о_О
[Ответить]
ZekMan Отвечает:
Февраль 9th, 2011 at 02:09
@bosha, нет))) от чего фс посыпалась так и останется тайной, а вот zsh нормально не работал =)
[Ответить]
Ссылка | Февраль 8th, 2011 at 06:54