edit russian papers

This commit is contained in:
arcan1s
2014-07-30 21:37:43 +04:00
parent 8421dca4c8
commit 4b2a877fb7
16 changed files with 310 additions and 185 deletions

View File

@ -6,19 +6,22 @@ layout: paper
tags: zshrc, настройка, linux
title: О zshrc
short: about-zshrc
description: Это моя первая статья в блоге (я думаю, мне нужно что-нибудь для тестов =)). Существует множество похожих статей и, я думаю, не буду отличаться от большинства. Я просто хочу показать мой <code>.zshrc</code> и объяснить, что в нем есть и зачем оно нужно. Также, любые комментарии или дополнения приветствуются. <a href="http://archlinux.org.ru/forum/topic/12752/">Оригинал</a> статьи.
description: Это моя первая статья в блоге (я думаю, мне нужно что-нибудь для тестов =)). Существует множество похожих статей и, я думаю, не буду отличаться от большинства. Я просто хочу показать мой <code>.zshrc</code> и объяснить, что в нем есть и зачем оно нужно. Также, любые комментарии или дополнения приветствуются. <a href="http://archlinux.org.ru/forum/topic/12752/" title="Тема на форуме">Оригинал</a> статьи.
---
<h2><a name="prepare" class="anchor" href="#prepare"><span class="octicon octicon-link"></span></a>Подготовка</h2>
<h2><a href="#prepare" class="anchor" name="prepare"><span class="octicon octicon-link"></span></a>Подготовка</h2>
<p>Сначала установите необходимый минимум:</p>
{% highlight bash %}
pacman -Sy pkgfile zsh zsh-completions zsh-syntax-highlighting
{% endhighlight %}
<p><a href="https://www.archlinux.org/packages/pkgfile/">pkgfile</a> очень полезная утилита. Данная команда также установит шелл, дополнения к нему и подсветку синтаксиса.</p>
<h2><a name="configuration" class="anchor" href="#configuration"><span class="octicon octicon-link"></span></a>Настройка шелла</h2>
<p>Все доступные опции приведены <a href="http://zsh.sourceforge.net/Doc/Release/Options.html">здесь</a>.</p>
<p><a href="https://www.archlinux.org/packages/pkgfile/" title="Пакет Archlinux">pkgfile</a> очень полезная утилита. Данная команда также установит шелл, дополнения к нему и подсветку синтаксиса.</p>
<h2><a href="#configuration" class="anchor" name="configuration"><span class="octicon octicon-link"></span></a>Настройка шелла</h2>
<p>Все доступные опции приведены <a href="http://zsh.sourceforge.net/Doc/Release/Options.html" title="Документация zsh">здесь</a>.</p>
<p>Указываем файл с историей, число команд хранящихся в кэше текущего сеанса и число команд, хранящихся в файле:</p>
{% highlight bash %}
# history
HISTFILE=~/.zsh_history
@ -27,6 +30,7 @@ SAVEHIST=500000
{% endhighlight %}
<p>Я не могу запомнить все комбинации <code>Ctrl+</code>, поэтому я назначаю клавиши на их стандартное использование:</p>
{% highlight bash %}
# bindkeys
bindkey '^[[A' up-line-or-search # up arrow for back-history-search
@ -38,9 +42,11 @@ bindkey '\e[4~' end-of-line # end
bindkey '\e[5~' up-line-or-history # page-up
bindkey '\e[6~' down-line-or-history # page-down
{% endhighlight %}
<p>Но здесь важно, что стрелки <code>вверх</code>/<code>вниз</code> служат для навигации по истории с учетом <b>уже введенной части</b> команды. А <code>PgUp</code>/<code>PgDown</code> <b>проигнорируют</b> уже введенную часть команды.</p>
<p>Автодополнение команд:</p>
{% highlight bash %}
# autocomplete
autoload -U compinit
@ -48,9 +54,11 @@ compinit
zstyle ':completion:*' insert-tab false
zstyle ':completion:*' max-errors 2
{% endhighlight %}
<p>Подключается полное автодополнение команд. <code>insert-tab false</code> включит автодополнение для <b>невведенной</b> команды (не знаю, зачем). <code>max-errors</code> устанавливает максимальное число опечаток, которые могут быть исправлены.</p>
<p>Приглашение:</p>
{% highlight bash %}
# promptinit
autoload -U promptinit
@ -58,6 +66,7 @@ promptinit
{% endhighlight %}
<p>Включим цвета:</p>
{% highlight bash %}
# colors
autoload -U colors
@ -66,53 +75,71 @@ colors
<p>Различные опции.</p>
<p>Смена директории без ввода <code>cd</code>:</p>
{% highlight bash %}
# autocd
setopt autocd
{% endhighlight %}
<p>Корректировка опечаток (и шаблон вопроса):</p>
{% highlight bash %}
# correct
setopt CORRECT_ALL
SPROMPT="Correct '%R' to '%r' ? ([Y]es/[N]o/[E]dit/[A]bort) "
{% endhighlight %}
<p>Отключаем е#$%ую пищалку:</p>
{% highlight bash %}
# disable beeps
unsetopt beep
{% endhighlight %}
<p>Включаем калькулятор:</p>
{% highlight bash %}
# calc
autoload zcalc
{% endhighlight %}
<p>Дополнение истории (<b>а не перезапись</b> файла):</p>
{% highlight bash %}
# append history
setopt APPEND_HISTORY
{% endhighlight %}
<p>Не сохранять дубликаты в историю:</p>
{% highlight bash %}
# ignore dups in history
setopt HIST_IGNORE_ALL_DUPS
{% endhighlight %}
<p>...и дополнительные пробелы:</p>
{% highlight bash %}
# ignore spaces in history
setopt HIST_IGNORE_SPACE
{% endhighlight %}
<p>...и пустые линии тоже:</p>
{% highlight bash %}
# reduce blanks in history
setopt HIST_REDUCE_BLANKS
{% endhighlight %}
<p>Включаем <code>pkgfile</code>:</p>
{% highlight bash %}
# pkgfile
source /usr/share/doc/pkgfile/command-not-found.zsh
{% endhighlight %}
<h2><a name="highlighting" class="anchor" href="#highlighting"><span class="octicon octicon-link"></span></a>Подсветка синтаксиса</h2>
<h2><a href="#highlighting" class="anchor" name="highlighting"><span class="octicon octicon-link"></span></a>Подсветка синтаксиса</h2>
{% highlight bash %}
# highlighting
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
@ -159,10 +186,12 @@ ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow' # конс
# root
#ZSH_HIGHLIGHT_STYLES[root]='bg=red'
{% endhighlight %}
<p>В первой строке включаем подсветку. Затем включаем основную подсветку, а также подсветку скобок и шаблонов. Шаблоны указываются ниже (<code>rm -rf *</code> в примере). Также может быть включена подсветка команд от <code>root</code> и курсора <code>cursor</code>. Синтаксис настроек понятен, <code>fg</code> цвет шрифта, <code>bg</code> цвет фона.</p>
<h2><a name="prompt" class="anchor" href="#prompt"><span class="octicon octicon-link"></span></a>$PROMPT и $RPROMPT</h2>
<h2><a href="#prompt" class="anchor" name="prompt"><span class="octicon octicon-link"></span></a>$PROMPT и $RPROMPT</h2>
<p>Я хочу использовать один файл <code>.zshrc</code> для рута и обычного пользователя:</p>
{% highlight bash %}
# PROMPT && RPROMPT
if [[ $EUID == 0 ]]; then
@ -185,6 +214,7 @@ fi
{% endhighlight %}
<p><code>fg</code> цвет шрифта, <code>bg</code> цвет фона. <code>_bold</code> и <code>_no_bold</code> регулируют оттенок. Команды должны быть обрамлены в <code>%{ ... %}</code>, чтобы не показывались. Доступные цвета:</p>
{% highlight bash %}
black
red
@ -197,6 +227,7 @@ white
{% endhighlight %}
<p>Доступные переменные:</p>
{% highlight bash %}
%n - имя пользователя
%m - хостнейм (выставляется только в начале сессии)
@ -213,6 +244,7 @@ white
{% endhighlight %}
<p>RPROMPT (необходим пакет <code>acpi</code>):</p>
{% highlight bash %}
precmd () {
# battery charge
@ -237,12 +269,14 @@ $(batcharge)\
$returncode\
"%{$fg_bold[white]%}]%{$reset_color%}"
{% endhighlight %}
<p>Мой RPROMPT показывает текущее время, заряд батареи и код возврата последнего приложения. <code>precmd()</code> необходимо для автоматического обновления. Конструкция <code>$(if.true.false)</code> является условным оператором в <code>zsh</code>.</p>
<h2><a name="aliases" class="anchor" href="#aliases"><span class="octicon octicon-link"></span></a>Аллиасы</h2>
<h2><a href="#aliases" class="anchor" name="aliases"><span class="octicon octicon-link"></span></a>Аллиасы</h2>
<p><b>Копируйте только те аллиасы, которые Вам необходимы.</b> Если какой-либо аллиас использует приложение, которое не установлено, это приведет к сбою загрузки конфигурационного файла.</p>
<p>Полезная (или не очень) функция:</p>
{% highlight bash %}
show_which() {
OUTPUT=$(which $1 | cut -d " " -f7-)
@ -251,6 +285,7 @@ show_which() {
{% endhighlight %}
<p>Первая группа аллиасов:</p>
{% highlight bash %}
## alias
# цветной grep
@ -269,7 +304,8 @@ alias less='vimpager'
alias zless='vimpager'
{% endhighlight %}
<p>ls аллиасы (смотри <a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?ls">man ls</a>):</p>
<p>ls аллиасы (смотри <a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?ls" title="Мануал">man ls</a>):</p>
{% highlight bash %}
alias ls='show_which ls && ls --color=auto --group-directories-first'
alias ll='show_which ll && ls -l --human-readable'
@ -282,6 +318,7 @@ alias lm='show_which lm && la | more'
{% endhighlight %}
<p>Аллиасы для быстрого просмотра файлов из консоли (просто набери имя файла!):</p>
{% highlight bash %}
# alias -s
alias -s {avi,mpeg,mpg,mov,m2v,mkv}=mpv
@ -293,6 +330,7 @@ alias -s {html,htm}=opera
{% endhighlight %}
<p>"sudo" аллиасы:</p>
{% highlight bash %}
# sudo alias
if [[ $EUID == 0 ]]; then
@ -316,6 +354,7 @@ fi
{% endhighlight %}
<p>Некоторые глобальные аллиасы. Если они включены, команда <code>cat foo g bar</code> будет эквивалентна <code>cat foo | grep bar</code>:</p>
{% highlight bash %}
# global alias
alias -g g="| grep"
@ -325,7 +364,7 @@ alias -g h="| head"
alias -g dn="&> /dev/null &"
{% endhighlight %}
<h2><a name="functions" class="anchor" href="#functions"><span class="octicon octicon-link"></span></a>Функции</h2>
<h2><a href="#functions" class="anchor" name="functions"><span class="octicon octicon-link"></span></a>Функции</h2>
<p>Специальная функция для <code>xrandr</code>:</p>
{% highlight bash %}
@ -352,6 +391,7 @@ projctl () {
{% endhighlight %}
<p>К сожалению, я не могу запомнить флаги <code>tar</code>, поэтому я использую специальные функции:</p>
{% highlight bash %}
# function to extract archives
# EXAMPLE: unpack file
@ -405,6 +445,7 @@ pack () {
{% endhighlight %}
<p>Специальная функция для <code>su</code>:</p>
{% highlight bash %}
su () {
CHECKSU=0
@ -423,6 +464,7 @@ su () {
{% endhighlight %}
<p>Функция, которая заменяет оригиналькую команду <code>rm</code>. Если Вы наберете <code>rm</code>, это будет эквивалентно перемещению в корзину, также, Вы можете легко восстановить удаленный файл:</p>
{% highlight bash %}
rm () {
# error check
@ -466,6 +508,7 @@ rm () {
{% endhighlight %}
<p>Функция для автоматических обновлений путей после установки пакетов:</p>
{% highlight bash %}
pacman () {
/usr/bin/sudo /usr/bin/pacman $* && echo "$*" | grep -q "S\|R\|U" && rehash
@ -478,12 +521,12 @@ yatest () {
/usr/bin/yaourt --config /etc/pactest.conf $* && echo "$*" | grep -q "S\|R\|U" && rehash
}
{% endhighlight %}
<p>Но автодополнение для <code>yaourt -Ss</code> <a href="https://github.com/zsh-users/zsh-completions/pull/205">будет требовать</a> привилегий рута.</p>
<h2><a name="variables" class="anchor" href="#variables"><span class="octicon octicon-link"></span></a>Переменные</h2>
<h2><a href="#variables" class="anchor" name="variables"><span class="octicon octicon-link"></span></a>Переменные</h2>
<p>Рекомендуется хранить свои переменные в <code>~/.zshenv</code>. Но я все храню в одном файле.</p>
<p>Пути, маска создаваемых файлов, редактор и пейджер:</p>
{% highlight bash %}
# path
export PATH="$PATH:$HOME/.local/bin"
@ -495,6 +538,7 @@ export PAGER="vimpager"
{% endhighlight %}
<p>Хэши. Если они включены, команда <code>~global</code> будет эквивалентна команде <code>/mnt/global</code>:</p>
{% highlight bash %}
# hash
hash -d global=/mnt/global
@ -504,8 +548,12 @@ hash -d u1=/mnt/usbdev1
hash -d u2=/mnt/usbdev2
{% endhighlight %}
<h2><a name="screenshot" class="anchor" href="#screenshot"><span class="octicon octicon-link"></span></a>Скриншот</h2>
<p><a href="/resources/screenshots/zshrc_demo.png"><img src="/resources/preview/zshrc_demo_prev.jpg"></a></p>
<h2><a href="#screenshot" class="anchor" name="screenshot"><span class="octicon octicon-link"></span></a>Скриншот</h2>
<div class="thumbnails">
{% assign scrdesc = "Как оно выглядит" %}
{% assign scrname = "zshrc_demo" %}
{% include prj_scr.html %}
</div>
<h2><a name="file" class="anchor" href="#file"><span class="octicon octicon-link"></span></a>Файл</h2>
<p><a href="https://raw.github.com/arcan1s/dotfiles/master/zshrc">Мой</a> <code>.zshrc</code>.</p>
<h2><a href="#file" class="anchor" name="file"><span class="octicon octicon-link"></span></a>Файл</h2>
<p><a href="https://raw.github.com/arcan1s/dotfiles/master/zshrc" title="Github" type="text/plain">Мой</a> <code>.zshrc</code>.</p>