Skip to content

Instantly share code, notes, and snippets.

@generall
Last active August 29, 2015 14:19
Show Gist options
  • Save generall/96c67010b34bda579972 to your computer and use it in GitHub Desktop.
Save generall/96c67010b34bda579972 to your computer and use it in GitHub Desktop.
My .zshrc
# загружаем дефолтный профиль оболочки
source /etc/profile
#
# тут немного всякой хери, смысл которой я сам не особо понимаю
#
# Use hard limits, except for a smaller stack and no core dumps
unlimit
limit stack 8192
limit core 0
limit -s
# Установка атрибутов доступа для вновь создаваемых файлов
umask 022
# Shell functions
setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" } # csh compatibility
freload() { while (( $# )); do; unfunction $1; autoload -U $1; shift; done }
# 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
# Completions
zstyle ':completion:*::::' completer _expand _complete _ignored _approximate
zstyle -e ':completion:*:approximate:*' max-errors 'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) numeric )'
zstyle ':completion:*:expand:*' tag-order all-expansions
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 ''
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns '*?.o' '*?.c~''*?.old' '*?.pro'
zstyle ':completion:*:functions' ignored-patterns '_*'
# менюшку нам для астокомплита
#zstyle ':completion:*' menu yes select
setopt AUTO_MENU
zstyle ':completion:*:*:*' menu select=1 _complete _ignored _approximate
#
# различные опцие шела
#
# Позволяем разворачивать сокращенный ввод, к примеру cd /u/sh в /usr/share
autoload -U compinit && compinit
# файл истории команд
HISTFILE=~/.zhistory
HISTSIZE=1024
alias history='history 0'
# Число команд, сохраняемых в HISTFILE
SAVEHIST=5000
# Дополнение файла истории
setopt APPEND_HISTORY
# Игнорировать все повторения команд
setopt HIST_IGNORE_ALL_DUPS
# Игнорировать лишние пробелы
setopt HIST_IGNORE_SPACE
# не пищать при дополнении или ошибках
setopt NO_BEEP
# если набрали путь к директории без комманды CD, то перейти
setopt AUTO_CD
# исправлять неверно набранные комманды
setopt CORRECT_ALL
# zsh будет обращаться с пробелами так же, как и bash
setopt SH_WORD_SPLIT
# последние комманды в начале файла и не хранить дубликаты
setopt histexpiredupsfirst histfindnodups
# ещё всякая херь про истоию
setopt histignoredups histnostore histverify histignorespace extended_history share_history
# Установка и снятие различных опций шелла
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
# Не считать Control+C за выход из оболочки
setopt IGNORE_EOF
# разрешить комменты в оболочке
setopt INTERACTIVE_COMMENTS
# автоматическое удаление одинакового из этого массива
typeset -U path cdpath fpath manpath
# загружаем список цветов
autoload colors && colors
#
# Установка PROMT
#
# левый
PROMPT="%{$fg_bold[green]%}%n%{$reset_color%} %~ >>"
git_prompt() {
temp=`git symbolic-ref HEAD 2>/dev/null | cut -d / -f 3`
if [ "$temp" != "" ]; then echo "$temp:"; fi
}
setopt prompt_subst
export RPROMPT='[$(git_prompt)%~]'
# вопрос на автокоррекцию
SPROMPT='zsh: Заменить '\''%R'\'' на '\''%r'\'' ? [Yes/No/Abort/Edit] '
# симпотное добавления для kill
zstyle ':completion:*:*:kill:*:processes' list-colors "=(#b) #([0-9]#)*=$color[cyan]=$color[red]"
# заголовки и прочее.
precmd() {
[[ -t 1 ]] || return
case $TERM in
*xterm*|rxvt|(dt|k|E|a)term*) print -Pn "\e]0;[%~] %m\a" ;;
screen(-bce|.linux)) print -Pn "\ek[%~]\e\" && print -Pn "\e]0;[%~] %m (screen)\a" ;; #заголовок для скрина
esac
}
preexec() {
[[ -t 1 ]] || return
case $TERM in
*xterm*|rxvt|(dt|k|E|a)term*) print -Pn "\e]0;<$1> [%~] %m\a" ;;
screen(-bce|.linux)) print -Pn "\ek<$1> [%~]\e\" && print -Pn "\e]0;<$1> [%~] %m (screen)\a" ;; #заголовок для скрина
esac
}
typeset -g -A key
#
# экранируем спецсимволы в url, например &, ?, ~ и так далее
autoload -U url-quote-magic
zle -N self-insert url-quote-magic
#
# мои хоткеи
#
# дополнение по истории, ^X^Z включить ^Z выключить
autoload -U predict-on
zle -N predict-on
zle -N predict-off
bindkey -M emacs "^X^Z" predict-on
bindkey -M emacs "^Z" predict-off
# peжuм нaвuгaцuu в cтuлe emacs
bindkey -e
+ навигация по стрелкам
bindkey '^[[1;5C' emacs-forward-word
bindkey '^[^[[D' emacs-backward-word
# режим редактирования команды, вызывает для этого то что в $EDITOR
autoload -U edit-command-line
# Вызов редактора для редактирования строки ввода (хоткей в стиле emacs)
# bindkey -M vicmd v edit-command-line для командного режима vi
zle -N edit-command-line
bindkey -M emacs "^X^E" edit-command-line
#завершить слово команду
bindkey -M emacs "^N" complete-word
#вызов диалога удаления файлов в папке
function dialogrun; { rm -rf $(dialog --separate-output --checklist file 100 100 100 $(for l in $(ls -A); do echo "$l" "$(test -d $l && echo "dir" || echo "file")" 0; done) --stdout); clear }
zle -N dialogrun
bindkey -M emacs "^X^O" dialogrun
# куда же мы без калькулятора
autoload -U zcalc
#
# мои функции
#
ccd() { cd && ls}
# создать директорию и перейти в нее
mcd(){ mkdir $1; cd $1 }
# если текущая директория пустая, то удалить ее и перейти в родительскую директорию
rcd(){ local P="`pwd`"; cd .. && rmdir "$P" || cd "$P"; }
# быстрое переименование
name() {
name=$1
vared -c -p 'rename to: ' name
command mv $1 $name
}
# распаковка архива
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 ;;
*) 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
}
# мой cd
cdpath=( . ~ /mnt/MLIVE )
# mp3 в нормальную кодировку
mp32utf() { find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1 }
# конвертируем всякую дурь
mpg2flv() { ffmpeg -i $1 -ar 22050 -ab 32 -f flv -s 320x240 `echo $1 | awk -F . '{print $1}'`.flv }
flv2xvid() { mencoder "$1" -vf scale=320:240 -ovc xvid -xvidencopts bitrate=250:autoaspect -vf pp=lb -oac mp3lame -lameopts fast:preset=standard -o "./basename $1.avi" }
flv2divx() { mencoder "$1" --vf scale=320:240 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=250:mbd=2:v4mv:autoaspect -vf pp=lb -oac mp3lame -lameopts fast:preset=standard -o "./basename $1.avi" }
# top по имени процесса, правда только по полному
pidtop() {top -p `pidof $@ | tr ' ' ','`}
# простой калькулятор
calc() {echo "${1}"|bc -l;}
# мой айпишник
myip() {lynx --source http://www.formyip.com/ |grep The | awk {'print $5'}}
# великий рандом для перемешивания строк в файле
rand() { awk '{print rand()"\t"$0}'|sort|awk -F'\t' '{print $2}' }
# копипаст в консоли
ccopy(){ cp $1 /tmp/ccopy.$1; }
alias cpaste="ls /tmp/ccopy.* | sed 's|/tmp/ccopy.||' | xargs -I % mv /tmp/ccopy.% ./%"
#
# переменные окружения и прочая чушь
#
# перенаправляем
READNULLCMD=${PAGER}
#оформим подсветку в grep
export GREP_COLOR="1;33"
# если стоит most то заюзаем в качестве $PAGER
[[ -x $(whence -p most) ]] && export PAGER=$(whence -p most)
# редактор по дефолту
export EDITOR=vim
# пути где искать бинарники
export PATH="$PATH:~/soft/bin/"
# ООо и русские имена файлов
export OOO_FORCE_DESKTOP=gnome
# забыл зачем ставил
export LESSCHARSET=UTF-8
#разукрашиваем ls и автодополнение
export LS_COLORS='no=00;37:fi=00;37:di=01;36:ln=04;36:pi=33:so=01;35:do=01;35:bd=33;01:cd=33;01:or=31;01:su=37:sg=30:tw=30:ow=34:st=37:ex=01;31:*.cmd=01;31:*.exe=01;31:*.com=01;31:*.btm=01;31:*.sh=01;31:*.run=01;31:*.tar=33:*.tgz=33:*.arj=33:*.taz=33:*.lzh=33:*.zip=33:*.z=33:*.Z=33:*.gz=33:*.bz2=33:*.deb=33:*.rpm=33:*.jar=33:*.rar=33:*.jpg=32:*.jpeg=32:*.gif=32:*.bmp=32:*.pbm=32:*.pgm=32:*.ppm=32:*.tga=32:*.xbm=32:*.xpm=32:*.tif=32:*.tiff=32:*.png=32:*.mov=34:*.mpg=34:*.mpeg=34:*.avi=34:*.fli=34:*.flv=34:*.3gp=34:*.mp4=34:*.divx=34:*.gl=32:*.dl=32:*.xcf=32:*.xwd=32:*.flac=35:*.mp3=35:*.mpc=35:*.ogg=35:*.wav=35:*.m3u=35:';
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
# значение цветов #30 черный текст #40 черный фон
#00 восстановление цвета по умолчанию #31 красный текст #41 красный фон
#01 включить яркие цвета #32 зеленый текст #42 зеленый фон
#04 подчеркнутый текст #33 желтый (или коричневый) текст #43 желтый (или коричневый) фон
#05 мигающий текст #34 синий текст #44 синий фон
# ну или color юзать #35 фиолетовый текст #45 фиолетовый фон
# #36 cyan текст #46 cyan фон
# алиасы #37 белый (или серый) текст #47 белый (или серый) фон
#
# цветной grep
alias grep='grep --color=auto'
# более человекочитаемые df и du
alias df='df -h'
alias du='du -h'
# переименование-перемещение c пogтвepжgeнueм без коррекции
alias mv='nocorrect mv -i'
# рекурсивное копирование с подтверждением без коррекции
alias cp='nocorrect cp -iR'
# удаление с подтверждением без коррекции
alias rm='nocorrect rm -i'
# принудимтельное удаление без коррекции
alias rmf='nocorrect rm -f'
# принудительное рекурсивное удаление без коррекции
alias rmrf='nocorrect rm -fR'
# создание каталогов без коррекции
alias mkdir='nocorrect mkdir'
# показ файлов в цвете
alias ls='ls -F --color=auto'
# разукрашиваем некоторые команды с помощью grc
[[ -f /usr/bin/grc ]] && {
alias ping="grc --colour=auto ping"
alias traceroute="grc --colour=auto traceroute"
alias make="grc --colour=auto make"
alias diff="grc --colour=auto diff"
alias cvs="grc --colour=auto cvs"
alias netstat="grc --colour=auto netstat"
}
# разукрашиваем логи с помощью grc
alias logc="grc cat"
alias logt="grc tail"
alias logh="grc head"
#
# запуск программ
#
# везде
alias -s {avi,mpeg,mpg,mov,m2v,flv}=mplayer
alias -s {zip,fb2}=fbless
alias -s txt=$PAGER
alias -s py=python
alias -s {ogg,mp3,wav,wma}=mplayer
# в иксах
alias -s {xls,doc,,rtf,ppt,odt,sxw}=soffice
alias -s {png,gif,jpg,jpeg}=feh
alias -s {pdf,djvu}=evince
# без иксов
[[ -z $DISPLAY ]] && {
alias -s {odt,doc,sxw,xls,doc,rtf}=catdoc
alias -s {png,gif,jpg,jpeg}="fbi -a"
alias -s {pdf,djvu}=evince
}
# html сам пусть соображает чё запускать
autoload -U pick-web-browser
alias -s {html,htm}=pick-web-browser
#
# глобальные алиасы
#
alias -g H="| head"
alias -g T="| tail"
alias -g G="| grep"
alias -g L="| less"
alias -g M="| most"
alias -g B="&|"
alias -g HL="--help"
alias -g LL="2>&1 | less"
alias -g CA="2>&1 | cat -A"
alias -g NE="2> /dev/null"
alias -g NUL="> /dev/null 2>&1"
#конвертим вывод в utf8, а то достало
alias -g KU="| iconv -c -f koi8r -t utf8"
alias -g CU="| iconv -c -f cp1251 -t utf8"
#ну и обратно тоже
alias -g UK="| iconv -c -f utf8 -t koi8r"
alias -g UC="| iconv -c -f utf8 -t cp1251"
#
# куча алиасов
#
# sudo
alias spacman="sudo pacman"
alias pstop="sudo pppoe-stop"
alias pstart="sudo pppoe-start"
alias halt="sudo halt"
alias reboot="sudo reboot"
alias gparted="sudo gparted"
# родной скрин
alias screen="screen -DR"
# ну так привычнее :)
alias ncmpc="ncmpcpp"
# lastfm
alias shell-fm="shell-fm lastfm://user/muhas"
# список удаленных файлов с NTFS, FAT, UFS1/2, FFS, Ext2 и Ext3
# пакет sleuthkit, утилита icat для восстановления
alias fls="fls -rd"
#
# хитрожопые алиасы
#
# пишем диски
alias iso2cd="cdrecord -s dev=`cdrecord --devices 2>&1 | grep "\(rw\|dev=\)" | awk {'print $2'} | cut -f'2' -d'=' | head -n1` gracetime=1 driveropts=burnfree -dao -overburn -v"
# nrg2iso
alias nrg2iso="dd bs=1k if=$1 of=$2 skip=300"
# ls -l с цифровым видом прав
alias lls="ls -l | sed -e 's/--x/1/g' -e 's/-w-/2/g' -e 's/-wx/3/g' -e 's/r--/4/g' -e 's/r-x/5/g' -e 's/rw-/6/g' -e 's/rwx/7/g' -e 's/---/0/g'"
# показываев дерево директорий
alias dirf='find . -type d | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"'
# grep по ps aux
alias psgrep='ps aux | grep $(echo $1 | sed "s/^\(.\)/[\1]/g")'
# удаляем пустые строки и комментарии
alias delspacecomm="sed '/ *#/d; /^ *$/d' $1"
# создаем пароль из 6символов
alias mkpass="head -c6 /dev/urandom | xxd -ps"
alias beep="paplay /usr/share/sounds/KDE-Sys-App-Message.ogg"
#
# команды при запуске zsh
#
# фортунки с лора, без них скучно =)
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM
export JAVA_HOME="/opt/java/jdk-current"
export PATH="/usr/lib/ccache:/opt/java/jdk-current/bin/:/opt/java/jdk-current/lib/:/opt/java/jre-current/bin/:$PATH"
export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment