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

回复 ".zshrc"

这儿你可以回复上面这条便签

captcha