Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Мой .zshrc с комментариями || muhas — Заметки аскетичного гика #1007

Open
tg-z opened this issue Mar 19, 2020 · 0 comments

Comments

@tg-z
Copy link
Owner

tg-z commented Mar 19, 2020

Выкладываю свой zshrc. Немного причесал. С комментариями оказалось 377 строк, без комментариев около ста шестидесяти. Как-то он у меня постоянно растет и изменяется, в общем у меня это единственный конфиг который я допиливаю (добавляю функции и алиасы) для удобства. Все никак не могу придумать нормальный FMMODE, поэтому кусок касающийся его и не привожу. Думаю как небольшой хелп по настройке zsh этот конфиг сойдет.

# загружаем дефолтный профиль оболочки

# Настраиваем безполезные клавиши плюс бекспей

# алиас ибо на некоторых машинах нихера чё-то без алиаса на загружается

alias zkbd='zsh /usr/share/zsh/4.3.9/functions/Misc/zkbd'
autoload zkbd
[[ ! -d ~/.zkbd ]] && mkdir ~/.zkbd
[[ ! -f ~/.zkbd/$TERM-$VENDOR-$OSTYPE ]] && zkbd 

# в новых версях пути поменялись, после вызова zkbd пишет новые,
# просто у мну старые файлы до сих пор валяются и работают

source  ~/.zkbd/$TERM-$VENDOR-$OSTYPE
[[ -n ${key[Home]}    ]]  && bindkey  "${key[Home]}"    beginning-of-line
[[ -n ${key[End]}     ]]  && bindkey  "${key[End]}"     end-of-line
[[ -n ${key[Insert]}  ]]  && bindkey  "${key[Insert]}"  overwrite-mode
[[ -n ${key[Delete]}  ]]  && bindkey  "${key[Delete]}"  delete-char
[[ -n ${key[Up]}      ]]  && bindkey  "${key[Up]}"      up-line-or-history
[[ -n ${key[Down]}    ]]  && bindkey  "${key[Down]}"    down-line-or-history
[[ -n ${key[Left]}    ]]  && bindkey  "${key[Left]}"    backward-char
[[ -n ${key[Right]}   ]]  && bindkey  "${key[Right]}"   forward-char
[[ -n ${key[Backspace]}   ]]  && bindkey  "${key[Backspace]}"   backward-delete-char

# PageUp PageDown(в арче лоханулись, забыли прописать)

bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history

# тут немного всякой хери, смысл которой я сам не особо понимаю

# Use hard limits, except for a smaller stack and no core dumps


unlimit
limit stack 8192
limit core 0
limit -s

# Установка атрибутов доступа для вновь создаваемых файлов

# Shell functions

setenv() { typeset -x "${1}${1:+=}${(@)argv[2,$#]}" }  
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

# различные опцие шела

# Позволяем разворачивать сокращенный ввод, к примеру cd /u/sh в /usr/share

autoload -U compinit && compinit

# файл истории команд

# Число команд, сохраняемых в HISTFILE

# Дополнение файла истории

# Игнорировать все повторения команд

setopt  HIST_IGNORE_ALL_DUPS

# Игнорировать лишние пробелы

# не пищать при дополнении или ошибках

# если набрали путь к директории без комманды CD, то перейти

# исправлять неверно набранные комманды

# zsh будет обращаться с пробелами так же, как и bash

# последние комманды в начале файла и не хранить дубликаты

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 за выход из оболочки

# автоматическое удаление одинакового из этого массива

typeset -U path cdpath fpath manpath

# загружаем список цветов

autoload colors && colors

# Установка PROMT

# левый

PROMPT="%{$fg_bold[grey]%}>>%{$reset_color%}"

# правый
# %(?,%{\e[0;32m%}:%)%{\e[0m%},%{\e[0;31m%}:(%{\e[0m%}
# когда всё гуд хороший смайлик, когда ошибка то грусный, ну и цветные ясен фиг

RPROMPT="%{$fg_bold[grey]%}%~/ %{$reset_color%}% %(?,%{$fg[green]%}:%)%{$reset_color%},%{$fg[red]%}:(%{$reset_color%}"

# вопрос на автокоррекцию

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

# режим редактирования команды, вызывает для этого то что в $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

# куда же мы без калькулятора

# мои функции

# создать директорию и перейти в нее

# если текущая директория пустая, то удалить ее и перейти в родительскую директорию

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:

# великий рандом для перемешивания строк в файле

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.% ./%"

# переменные окружения и прочая чушь

# перенаправляем
#оформим подсветку в grep

# если стоит most то заюзаем в качестве $PAGER

[[ -x $(whence -p most) ]] && export PAGER=$(whence -p most)

# редактор по дефолту

# пути где искать бинарники

export PATH="$PATH:~/soft/bin/"

# ООо и русские имена файлов

export OOO_FORCE_DESKTOP=gnome

# забыл зачем ставил

#разукрашиваем 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 красный фон
#1 включить яркие цвета #32 зеленый текст #42 зеленый фон
#4 подчеркнутый текст #33 желтый (или коричневый) текст #43 желтый (или коричневый) фон
#5 мигающий текст #34 синий текст #44 синий фон
# ну или color юзать #35 фиолетовый текст #45 фиолетовый фон
# #36 cyan текст #46 cyan фон
# алиасы #37 белый (или серый) текст #47 белый (или серый) фон

# цветной grep

# более человекочитаемые df и du

alias df='df -h'
alias du='du -h'

# переименование-перемещение c пogтвepжgeнueм без коррекции

# рекурсивное копирование с подтверждением без коррекции

alias cp='nocorrect cp -iR'

# удаление с подтверждением без коррекции

# принудимтельное удаление без коррекции

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"

# ну так привычнее :)

# lastfm

alias shell-fm="shell-fm lastfm://user/muhas"

# список удаленных файлов с NTFS, FAT, UFS1/2, FFS, Ext2 и Ext3
# пакет sleuthkit, утилита icat для восстановления

# хитрожопые алиасы

# пишем диски

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"

# команды при запуске zsh

# фортунки с лора, без них скучно =)
http://muhas.ru/?p=55

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant