~/.zshrc:


1 #color{{{   2 autoload colors zsh/terminfo   3 if [[ "$terminfo[colors]" -ge 8 ]]; then   4 colors   5 fi   6 for color in RED GREEN YELLOW BLUE MAGENTA CYAN WHITE; do   7 eval _$color='%{$terminfo[bold]$fg[${(L)color}]%}'   8 eval $color='%{$fg[${(L)color}]%}'   9 (( count = $count + 1 ))  10 done  11 FINISH="%{$terminfo[sgr0]%}"  12 #}}}  13   14 #命令提示符 {{{  15 precmd () {  16 local count_db_wth_char=${#${${(%):-%/}//[[:ascii:]]/}}  17 local leftsize=${#${(%):-%M%/}}+$count_db_wth_char  18 local rightsize=${#${(%):-%D %T }}  19 HBAR=" -"  20    21 FILLBAR="\${(l.(($COLUMNS - ($leftsize + $rightsize +2)))..${HBAR}.)}"  22    23 RPROMPT=$(echo "%(?..$RED%?$FINISH)")  24 PROMPT=$(echo "$BLUE%M$GREEN%/ $WHITE${(e)FILLBAR} $MAGENTA%D %T$FINISH  25 $CYAN%n $_YELLOW>>>$FINISH ")  26    27 #在 Emacs终端 中使用 Zsh 的一些设置  28 if [[ "$TERM" == "dumb" ]]; then  29 setopt No_zle  30 PROMPT='%n@%M %/  31 >>'  32 alias ls='ls -F'  33 fi      34 }  35 #}}}  36   37 #标题栏、任务栏样式{{{  38 case $TERM in (*xterm*|*rxvt*|(dt|k|E)term)  39    preexec () { print -Pn "\e]0;%n@%M//%/\ $1\a" }  40    ;;  41 esac  42 #}}}  43   44 #关于历史纪录的配置 {{{  45 #历史纪录条目数量  46 export HISTSIZE=10000  47 #注销后保存的历史纪录条目数量  48 export SAVEHIST=10000  49 #历史纪录文件  50 #export HISTFILE=~/.zhistory  51 #以附加的方式写入历史纪录  52 setopt INC_APPEND_HISTORY  53 #如果连续输入的命令相同,历史纪录中只保留一个  54 setopt HIST_IGNORE_DUPS        55 #为历史纪录中的命令添加时间戳        56 setopt EXTENDED_HISTORY        57    58 #启用 cd 命令的历史纪录,cd -[TAB]进入历史路径  59 setopt AUTO_PUSHD  60 #相同的历史路径只保留一个  61 setopt PUSHD_IGNORE_DUPS  62    63 #在命令前添加空格,不将此命令添加到纪录文件中  64 #setopt HIST_IGNORE_SPACE        65 #}}}  66   67 #每个目录使用独立的历史纪录{{{  68 HISTDIR="$HOME/.zhistory"  69     [[ ! -d "$HISTDIR" ]] && mkdir -p "$HISTDIR"  70 HISTFILE="$HISTDIR/${PWD//\//:}"  71 chpwd() {  72 #   fc -W                                       # write current history  file  73 #   "setopt INC_APPEND_HISTORY"  74     HISTFILE="$HISTDIR/${PWD//\//:}"            # set new history file  75     [[ ! -e "$HISTFILE" ]] && touch $HISTFILE  76     local ohistsize=$HISTSIZE  77         HISTSIZE=0                              # Discard previous dir's history  78         HISTSIZE=$ohistsize                     # Prepare for new dir's history  79     fc -R                                       # read from current histfile  80 }  81    82 function allhistory { cat $HISTDIR/* }                                   #*/  83 function convhistory {  84             sort $1 | sed 's/^:\([ 0-9]*\):[0-9]*;\(.*\)/\1::::::\2/' |  85             awk -F"::::::" '{ $1=strftime("%Y-%m-%d %T",$1) "|"; print }'    86 }  87 #使用 histall 命令查看全部历史纪录  88 function histall { convhistory =(allhistory) |  89             sed '/^.\{20\} *cd/i\\' }  90 #使用 hist 查看当前目录历史纪录  91 function hist { convhistory $HISTFILE }  92    93 #全部历史纪录 top55  94 function top55 { allhistory | awk -F':[ 0-9]*:[0-9]*;' '{ $1="" ; print }' | sed 's/ /\n/g' | sed '/^$/d' | sort | uniq -c | sort -nr | head -n 55 }  95    96 #}}}  97   98 #杂项 {{{  99 #允许在交互模式中使用注释  例如: 100 #cmd #这是注释 101 setopt INTERACTIVE_COMMENTS       102   103 #启用自动 cd,输入目录名回车进入目录 104 #稍微有点混乱,不如 cd 补全实用 105 #setopt AUTO_CD 106        107 #扩展路径 108 #/v/c/p/p => /var/cache/pacman/pkg 109 setopt complete_in_word 110   111 #禁用 core dumps 112 limit coredumpsize 0 113   114 #Emacs风格 键绑定 115 bindkey -e 116 #设置 [DEL]键 为向后删除 117 bindkey "\e[3~" delete-char 118   119 #以下字符视为单词的一部分 120 WORDCHARS='*?_-[]~=&;!#$%^(){}<>' 121 #}}} 122  123 #自动补全功能 {{{ 124 setopt AUTO_LIST 125 setopt AUTO_MENU 126 #开启此选项,补全时会直接选中菜单项 127 #setopt MENU_COMPLETE 128  129 autoload -U compinit 130 compinit 131   132 #自动补全缓存 133 #zstyle ':completion::complete:*' use-cache on 134 #zstyle ':completion::complete:*' cache-path .zcache 135 #zstyle ':completion:*:cd:*' ignore-parents parent pwd 136  137 #自动补全选项 138 zstyle ':completion:*' verbose yes 139 zstyle ':completion:*' menu select 140 zstyle ':completion:*:*:default' force-list always 141 zstyle ':completion:*' select-prompt '%SSelect:  lines: %L  matches: %M  [%p]' 142   143 zstyle ':completion:*:match:*' original only 144 zstyle ':completion::prefix-1:*' completer _complete 145 zstyle ':completion:predict:*' completer _complete 146 zstyle ':completion:incremental:*' completer _complete _correct 147 zstyle ':completion:*' completer _complete _prefix _correct _prefix _match _approximate 148   149 #路径补全 150 zstyle ':completion:*' expand 'yes' 151 zstyle ':completion:*' squeeze-slashes 'yes' 152 zstyle ':completion::complete:*' '\\' 153   154 #彩色补全菜单  155 eval $(dircolors -b)  156 export ZLSCOLORS="${LS_COLORS}" 157 zmodload zsh/complist 158 zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} 159 zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' 160   161 #修正大小写 162 zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 163 #错误校正       164 zstyle ':completion:*' completer _complete _match _approximate 165 zstyle ':completion:*:match:*' original only 166 zstyle ':completion:*:approximate:*' max-errors 1 numeric 167   168 #kill 命令补全       169 compdef pkill=killall 170 zstyle ':completion:*:*:kill:*' menu yes select 171 zstyle ':completion:*:*:*:*:processes' force-list always 172 zstyle ':completion:*:processes' command 'ps -au$USER' 173   174 #补全类型提示分组  175 zstyle ':completion:*:matches' group 'yes' 176 zstyle ':completion:*' group-name '' 177 zstyle ':completion:*:options' description 'yes' 178 zstyle ':completion:*:options' auto-description '%d' 179 zstyle ':completion:*:descriptions' format $'\e[01;33m -- %d --\e[0m' 180 zstyle ':completion:*:messages' format $'\e[01;35m -- %d --\e[0m' 181 zstyle ':completion:*:warnings' format $'\e[01;31m -- No Matches Found --\e[0m' 182 zstyle ':completion:*:corrections' format $'\e[01;32m -- %d (errors: %e) --\e[0m' 183   184 # cd ~ 补全顺序 185 zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand' 186 #}}} 187  188 ##行编辑高亮模式 {{{ 189 # Ctrl+@ 设置标记,标记和光标点之间为 region 190 zle_highlight=(region:bg=magenta #选中区域  191                special:bold      #特殊字符 192                isearch:underline)#搜索时使用的关键字 193 #}}} 194  195 ##空行(光标在行首)补全 "cd " {{{ 196 user-complete(){ 197     case $BUFFER in 198         "" )                       # 空行填入 "cd " 199             BUFFER="cd " 200             zle end-of-line 201             zle expand-or-complete 202             ;; 203         "cd  " )                   # TAB + 空格 替换为 "cd ~" 204             BUFFER="cd ~" 205             zle end-of-line 206             zle expand-or-complete 207             ;; 208         " " ) 209             BUFFER="!?" 210             zle end-of-line 211             ;; 212         "cd --" )                  # "cd --" 替换为 "cd +" 213             BUFFER="cd +" 214             zle end-of-line 215             zle expand-or-complete 216             ;; 217         "cd +-" )                  # "cd +-" 替换为 "cd -" 218             BUFFER="cd -" 219             zle end-of-line 220             zle expand-or-complete 221             ;; 222         * ) 223             zle expand-or-complete 224             ;; 225     esac 226 } 227 zle -N user-complete 228 bindkey "\t" user-complete 229   230 #显示 path-directories ,避免候选项唯一时直接选中 231 cdpath="/home" 232 #}}} 233  234 ##在命令前插入 sudo {{{ 235 #定义功能  236 sudo-command-line() { 237     [[ -z $BUFFER ]] && zle up-history 238     [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER" 239     zle end-of-line                 #光标移动到行末 240 } 241 zle -N sudo-command-line 242 #定义快捷键为: [Esc] [Esc] 243 bindkey "\e\e" sudo-command-line 244 #}}} 245    246 #命令别名 {{{ 247 alias -g cp='cp -i' 248 alias -g mv='mv -i' 249 alias -g rm='rm -i' 250 alias -g ls='ls -F --color=auto' 251 alias -g ll='ls -l' 252 alias -g grep='grep --color=auto' 253 alias -g ee='emacsclient -t' 254 alias -g history='history -fi' 255   256 #[Esc][h] man 当前命令时,显示简短说明  257 alias run-help >&/dev/null && unalias run-help 258 autoload run-help 259   260 #历史命令 top10 261 alias top10='print -l  ${(o)history%% *} | uniq -c | sort -nr | head -n 10' 262 #}}} 263  264 #路径别名 {{{ 265 #进入相应的路径时只要 cd ~xxx 266 hash -d WWW="/home/lighttpd/html" 267 hash -d ARCH="/mnt/arch" 268 hash -d PKG="/var/cache/pacman/pkg" 269 hash -d E="/etc/env.d" 270 hash -d C="/etc/conf.d" 271 hash -d I="/etc/rc.d" 272 hash -d X="/etc/X11" 273 hash -d BK="/home/r00t/config_bak" 274 hash -d HIST="$HISTDIR" 275 #}}} 276      277 #{{{自定义补全 278 #补全 ping 279 zstyle ':completion:*:ping:*' hosts 192.168.128.1{38,} http://www.g.cn \ 280        192.168.{1,0}.1{{7..9},} 281   282 #补全 ssh scp sftp 等 283 my_accounts=( 284 {r00t,root}@{192.168.1.1,192.168.0.1} 285 kardinal@linuxtoy.org 286 123@211.148.131.7 287 ) 288 zstyle ':completion:*:my-accounts' users-hosts $my_accounts 289   290 #def pacman-color completion as pacman 291 compdef pacman-color=pacman 292 #}}} 293  294 #{{{ F1 计算器 295 arith-eval-echo() { 296   LBUFFER="${LBUFFER}echo \$(( " 297   RBUFFER=" ))$RBUFFER" 298 } 299 zle -N arith-eval-echo 300 bindkey "^[[11~" arith-eval-echo 301 #}}} 302  303 ####{{{ 304 function timeconv { date -d @$1 +"%Y-%m-%d %T" } 305   306 # }}} 307  308   309 ## END OF FILE ################################################################# 310 # vim:filetype=zsh foldmethod=marker autoindent expandtab shiftwidth=4