---
category: ru
type: paper
hastr: true
layout: paper
tags: zshrc, настройка, linux
title: О zshrc
short: about-zshrc
description: Это моя первая статья в блоге (я думаю, мне нужно что-нибудь для тестов =)). Существует множество похожих статей и, я думаю, не буду отличаться от большинства. Я просто хочу показать мой .zshrc
и объяснить, что в нем есть и зачем оно нужно. Также, любые комментарии или дополнения приветствуются. Оригинал статьи.
---
Сначала установите необходимый минимум:
{% highlight bash %} pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting {% endhighlight %}pkgfile очень полезная утилита. Данная команда также установит шелл, дополнения к нему и подсветку синтаксиса.
Все доступные опции приведены здесь.
Указываем файл с историей, число команд хранящихся в кэше текущего сеанса и число команд, хранящихся в файле:
{% highlight bash %} # history HISTFILE=~/.zsh_history HISTSIZE=500000 SAVEHIST=500000 {% endhighlight %}Я не могу запомнить все комбинации Ctrl+
, поэтому я назначаю клавиши на их стандартное использование:
Но здесь важно, что стрелки вверх
/вниз
служат для навигации по истории с учетом уже введенной части команды. А PgUp
/PgDown
проигнорируют уже введенную часть команды.
Автодополнение команд:
{% highlight bash %} # autocomplete autoload -U compinit compinit zstyle ':completion:*' insert-tab false zstyle ':completion:*' max-errors 2 {% endhighlight %}Подключается полное автодополнение команд. insert-tab false
включит автодополнение для невведенной команды (не знаю, зачем). max-errors
устанавливает максимальное число опечаток, которые могут быть исправлены.
Приглашение:
{% highlight bash %} # promptinit autoload -U promptinit promptinit {% endhighlight %}Включим цвета:
{% highlight bash %} # colors autoload -U colors colors {% endhighlight %}Различные опции.
Смена директории без ввода cd
:
Корректировка опечаток (и шаблон вопроса):
{% highlight bash %} # correct setopt CORRECT_ALL SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) " {% endhighlight %}Отключаем е#$%ую пищалку:
{% highlight bash %} # disable beeps unsetopt beep {% endhighlight %}Включаем калькулятор:
{% highlight bash %} # calc autoload zcalc {% endhighlight %}Дополнение истории (а не перезапись файла):
{% highlight bash %} # append history setopt APPEND_HISTORY {% endhighlight %}Не сохранять дубликаты в историю:
{% highlight bash %} # ignore dups in history setopt HIST_IGNORE_ALL_DUPS {% endhighlight %}...и дополнительные пробелы:
{% highlight bash %} # ignore spaces in history setopt HIST_IGNORE_SPACE {% endhighlight %}...и пустые линии тоже:
{% highlight bash %} # reduce blanks in history setopt HIST_REDUCE_BLANKS {% endhighlight %}Включаем pkgfile
:
В первой строке включаем подсветку. Затем включаем основную подсветку, а также подсветку скобок и шаблонов. Шаблоны указываются ниже (rm -rf *
в примере). Также может быть включена подсветка команд от root
и курсора cursor
. Синтаксис настроек понятен, fg
цвет шрифта, bg
цвет фона.
Я хочу использовать один файл .zshrc
для рута и обычного пользователя:
fg
цвет шрифта, bg
цвет фона. _bold
и _no_bold
регулируют оттенок. Команды должны быть обрамлены в %{ ... %}
, чтобы не показывались. Доступные цвета:
Доступные переменные:
{% highlight bash %} %n - имя пользователя %m - хостнейм (выставляется только в начале сессии) %M - хостнейм %l - текущая tty %? - код возврата предыдущего приложения %# - # для рута и % для обычных пользователей %T - время (HH:MM) %* - время (HH:MM:SS) %D - дата (YY-MM-DD) %d - текущая директория %~ - то же, домашняя директория будет заменена на ~ %1/ - то же, но только последняя директория {% endhighlight %}RPROMPT (необходим пакет acpi
):
Мой RPROMPT показывает текущее время, заряд батареи и код возврата последнего приложения. precmd()
необходимо для автоматического обновления. Конструкция $(if.true.false)
является условным оператором в zsh
.
Копируйте только те аллиасы, которые Вам необходимы. Если какой-либо аллиас использует приложение, которое не установлено, это приведет к сбою загрузки конфигурационного файла.
Полезная (или не очень) функция:
{% highlight bash %} show_which() { OUTPUT=$(which $1 | cut -d " " -f7-) echo "Running '$OUTPUT'" 1>&2 } {% endhighlight %}Первая группа аллиасов:
{% highlight bash %} ## alias # цветной grep alias grep='grep --colour=auto' # замена top на htop alias top='show_which top && htop' # chromium с различными прокси серверами (i2p и tor в наличии) alias chrommsu='show_which chrommsu && chromium --proxy-server=cache.msu:3128' alias chromtor='show_which chromtor && chromium --proxy-server="socks://localhost:9050" --incognito' alias chromi2p='show_which chromi2p && chromium --proxy-server="http=127.0.0.1:4444;https=127.0.0.1:4445" --incognito' # человеческие df и du alias df='show_which df && df -k --print-type --human-readable' alias du='show_which du && du -k --total --human-readable' # замена less и zless на vimpager alias less='vimpager' alias zless='vimpager' {% endhighlight %}ls аллиасы (смотри man ls):
{% highlight bash %} alias ls='show_which ls && ls --color=auto --group-directories-first' alias ll='show_which ll && ls -l --human-readable' alias lr='show_which lr && ls --recursive' alias la='show_which la && ll --almost-all' alias lx='show_which lx && ll -X --ignore-backups' alias lz='show_which lz && ll -S --reverse' alias lt='show_which lt && ll -t --reverse' alias lm='show_which lm && la | more' {% endhighlight %}Аллиасы для быстрого просмотра файлов из консоли (просто набери имя файла!):
{% highlight bash %} # alias -s alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv alias -s {mp3,flac}=qmmp alias -s {odt,doc,xls,ppt,docx,xlsx,pptx,csv}=libreoffice alias -s {pdf}=okular autoload -U pick-web-browser alias -s {html,htm}=opera {% endhighlight %}"sudo" аллиасы:
{% highlight bash %} # sudo alias if [[ $EUID == 0 ]]; then alias fat32mnt='show_which fat32mnt && mount -t vfat -o codepage=866,iocharset=utf8,umask=000' alias synctime='show_which synctime && { ntpd -qg; hwclock -w; date; }' else alias fat32mnt='show_which fat32mnt && sudo mount -t vfat -o codepage=866,iocharset=utf8,umask=000' alias umount='show_which umount && sudo umount' alias mount='show_which mount && sudo mount' alias netctl='show_which netctl && sudo netctl' alias synctime='show_which synctime && { sudo ntpd -qg; sudo hwclock -w; date; }' alias wifi-menu='show_which wifi-menu && sudo wifi-menu' alias dhcpcd='show_which dhcpcd && sudo dhcpcd' alias journalctl='show_which journalctl && sudo journalctl' alias systemctl='show_which systemctl && sudo systemctl' alias modprobe='show_which modprobe && sudo modprobe' alias rmmod='show_which rmmod && sudo rmmod' alias staging-i686-build='show_which staging-i686-build && sudo staging-i686-build' alias staging-x86_64-build='show_which staging-x86_64-build && sudo staging-x86_64-build' fi {% endhighlight %}Некоторые глобальные аллиасы. Если они включены, команда cat foo g bar
будет эквивалентна cat foo | grep bar
:
Специальная функция для xrandr
:
К сожалению, я не могу запомнить флаги tar
, поэтому я использую специальные функции:
Специальная функция для su
:
Функция, которая заменяет оригиналькую команду rm
. Если Вы наберете rm
, это будет эквивалентно перемещению в корзину, также, Вы можете легко восстановить удаленный файл:
Функция для автоматических обновлений путей после установки пакетов:
{% highlight bash %} pacman () { /usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\|R\|U" && rehash } yaourt () { /usr/bin/yaourt $* && echo "$*" | grep -q "S\|R\|U" && rehash } # for testing repo yatest () { /usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\|R\|U" && rehash } {% endhighlight %}Рекомендуется хранить свои переменные в ~/.zshenv
. Но я все храню в одном файле.
Пути, маска создаваемых файлов, редактор и пейджер:
{% highlight bash %} # path export PATH="$PATH:$HOME/.local/bin" # umask umask 022 # editor export EDITOR="vim" export PAGER="vimpager" {% endhighlight %}Хэши. Если они включены, команда ~global
будет эквивалентна команде /mnt/global
:
Мой .zshrc
.