zsh 配置范例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359

# History related
# {{{
unsetopt EXTENDED_HISTORY
unsetopt HIST_IGNORE_DUPS
export HISTSIZE=100000
export SAVEHIST=100000
export HISTFILE=~/.history
setopt INC_APPEND_HISTORY
setopt SHARE_HISTORY


# Enable 'cd' history, cd -[TAB] to see 'cd' history
setopt AUTO_PUSHD

# Save only once for duplicated paths
setopt PUSHD_IGNORE_DUPS

setopt HIST_IGNORE_SPACE
# }}}


#Command prompt
#{{{
#RPROMPT=$(echo '%{\033[31m%}%D %T%{\033[m%}')
#PROMPT=$(echo '%{\033[34m%}%M%{\033[32m%}%/
#%{\033[36m%}%n %{\033[01;31m%}>%{\033[33m%}>%{\033[34m%}>%{\033[m%} ')
#PROMPT=$(echo '%{\033[31m%}%D %T%{\033[m%}')
PROMPT=$(echo '%{\033[01;34m%}%M%{\033[01;00m%}:%{\033[01;32m%}%/
%{\033[01;36m%}%n %{\033[01;31m%}>%{\033[01;33m%}>%{\033[01;34m%}>%{\033[01;m%} ')
#}}}


# Title, status bar
#{{{
case $TERM in (*xterm*|*rxvt*|(dt|k|E)term)
precmd () { print -Pn "\e]0;%n@%M//%/\a" }
preexec () { print -Pn "\e]0;%n@%M//%/\ $1\a" }
;;
esac
#}}}


function allhistory {
Index=1
while read line
do
echo "$Index: $line"
Index=$[Index + 1]
done < $HISTFILE
}

function histall {
allhistory
}

function hist {
allhistory
}

function history {
allhistory
}


#a杂项 {{{
#允许在交互模式中使用注释 例如:
#cmd #这是注释
setopt INTERACTIVE_COMMENTS

#启用自动 cd,输入目录名回车进入目录
#稍微有点混乱,不如 cd 补全实用
#setopt AUTO_CD

#扩展路径
#/v/c/p/p => /var/cache/pacman/pkg
setopt complete_in_word

#Emacs风格 键绑定
bindkey -e
#设置 [DEL]键 为向后删除
bindkey "\e[3~" delete-char

#以下字符视为单词的一部分
#WORDCHARS='*?_-[]~=&;!#$%^(){}<>'
##LEO注释了这部分
#}}}


#自动补全功能 {{{
setopt AUTO_LIST
setopt AUTO_MENU
#开启此选项,补全时会直接选中菜单项
#setopt MENU_COMPLETE

autoload -U compinit
compinit

#自动补全缓存
#zstyle ':completion::complete:*' use-cache on
#zstyle ':completion::complete:*' cache-path .zcache
#zstyle ':completion:*:cd:*' ignore-parents parent pwd

#自动补全选项
zstyle ':completion:*:match:*' original only
zstyle ':completion::prefix-1:*' completer _complete
zstyle ':completion:predict:*' completer _complete
zstyle ':completion:incremental:*' completer _complete _correct
zstyle ':completion:*' completer _complete _prefix _correct _prefix _match _approximate

#路径补全
zstyle ':completion:*' expand 'yes'
zstyle ':completion:*' squeeze-shlashes 'yes'
zstyle ':completion::complete:*' '\\'

zstyle ':completion:*' menu select
zstyle ':completion:*:*:default' force-list always

#彩色补全菜单
eval $(dircolors -b)
export ZLSCOLORS="${LS_COLORS}"
zmodload zsh/complist
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'

#修正大小写
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'
#错误校正
zstyle ':completion:*' completer _complete _match _approximate
zstyle ':completion:*:match:*' original only
zstyle ':completion:*:approximate:*' max-errors 1 numeric

#kill 命令补全
compdef pkill=kill
compdef pkill=killall
zstyle ':completion:*:*:kill:*' menu yes select
zstyle ':completion:*:*:*:*:processes' force-list always
zstyle ':completion:*:processes' command 'ps -au$USER'

#补全类型提示分组
zstyle ':completion:*:matches' group 'yes'
zstyle ':completion:*' group-name ''
zstyle ':completion:*:options' description 'yes'
zstyle ':completion:*:options' auto-description '%d'
zstyle ':completion:*:descriptions' format $'\e[01;33m -- %d --\e[0m'
zstyle ':completion:*:messages' format $'\e[01;35m -- %d --\e[0m'
zstyle ':completion:*:warnings' format $'\e[01;31m -- No Matches Found --\e[0m'
#}}}

##行编辑高亮模式 {{{
# Ctrl+@ 设置标记,标记和光标点之间为 region
zle_highlight=(region:bg=magenta #选中区域
special:bold #特殊字符
isearch:underline)#搜索时使用的关键字
#}}}

##空行(光标在行首)补全 "cd " {{{
user-complete(){
case $BUFFER in
"" ) # 空行填入 "cd "
BUFFER="cd "
zle end-of-line
zle expand-or-complete
;;
"cd --" ) # "cd --" 替换为 "cd +"
BUFFER="cd +"
zle end-of-line
zle expand-or-complete
;;
"cd +-" ) # "cd +-" 替换为 "cd -"
BUFFER="cd -"
zle end-of-line
zle expand-or-complete
;;
* )
zle expand-or-complete
;;
esac
}
zle -N user-complete
bindkey "\t" user-complete
#}}}

##在命令前插入 sudo {{{
#定义功能
#sudo-command-line() {
# [[ -z $BUFFER ]] && zle up-history
# [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
# zle end-of-line #光标移动到行末
#}
#zle -N sudo-command-line
#定义快捷键为: [Esc] [Esc]
#bindkey "\e\e" sudo-command-line
#}}}

#命令别名 {{{
#alias -g cp='cp -i'
#alias -g mv='mv -i'
#alias -g rm='rm -i'
alias -g ls='ls -X -F --color=auto'
alias -g ll='ls -l'
alias -g grep='grep --color=auto'
alias -g la='ls -a'
#alias -g ee='emacsclient -t'
#alias -g tk='tmux kill-server'
#哈哈哈,我现在有了byobu
alias -g bb='byobu-tmux'
alias -g x='exit'
alias -g t='faweibo -t'
alias -g tm='tmux'

#alias -g cd....='cd ../..'
#Well this must consult Gods later.__Leo

#[Esc][h] man 当前命令时,显示简短说明
alias run-help >&/dev/null && unalias run-help
autoload run-help

#历史命令 top10
alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
#}}}

##afor Emacs {{{
#在 Emacs终端 中使用 Zsh 的一些设置 不推荐在 Emacs 中使用它
if [[ "$TERM" == "dumb" ]]; then
setopt No_zle
PROMPT='%n@%M %/
>>'
alias ls='ls -F'
fi
#}}}

#{{{自定义补全
#补全 ping
zstyle ':completion:*:ping:*' hosts 192.168.128.1{38,} www.g.cn \
192.168.{1,0}.1{{7..9},}

#补全 ssh scp sftp 等
#my_accounts=(
#{r00t,root}@{192.168.1.1,192.168.0.1}
#kardinal@linuxtoy.org
#123@211.148.131.7
#)
#zstyle ':completion:*:my-accounts' users-hosts $my_accounts
#}}}

####{{{
function calc { echo $(($@)) }
#[Esc][h] man 当前命令时,显示简短说明
alias run-help >&/dev/null && unalias run-help
autoload run-help

#历史命令 top10
alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
#}}}

##afor Emacs {{{
#在 Emacs终端 中使用 Zsh 的一些设置 不推荐在 Emacs 中使用它
if [[ "$TERM" == "dumb" ]]; then
zle -N user-complete
bindkey "\t" user-complete
#}}}

##在命令前插入 sudo {{{
#定义功能
#sudo-command-line() {
# [[ -z $BUFFER ]] && zle up-history
# [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER"
# zle end-of-line #光标移动到行末
#}
#zle -N sudo-command-line
#定义快捷键为: [Esc] [Esc]
#bindkey "\e\e" sudo-command-line
#}}}

#命令别名 {{{
#alias -g cp='cp -i'
#alias -g mv='mv -i'
#alias -g rm='rm -i'
alias -g ls='ls -X -F --color=auto'
alias -g ll='ls -l'
alias -g grep='grep --color=auto'
alias -g la='ls -a'
#alias -g ee='emacsclient -t'
#alias -g tk='tmux kill-server'
#哈哈哈,我现在有了byobu
alias -g bb='byobu-tmux'
alias -g x='exit'
alias -g t='faweibo -t'
alias -g tm='tmux'

#alias -g cd....='cd ../..'
#Well this must consult Gods later.__Leo

#[Esc][h] man 当前命令时,显示简短说明
alias run-help >&/dev/null && unalias run-help
autoload run-help

#历史命令 top10
alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10'
#}}}

##afor Emacs {{{
#在 Emacs终端 中使用 Zsh 的一些设置 不推荐在 Emacs 中使用它
if [[ "$TERM" == "dumb" ]]; then
setopt No_zle
PROMPT='%n@%M %/
>>'
alias ls='ls -F'
fi
#}}}

#{{{自定义补全
#补全 ping
zstyle ':completion:*:ping:*' hosts 192.168.128.1{38,} www.g.cn \
192.168.{1,0}.1{{7..9},}

#补全 ssh scp sftp 等
#my_accounts=(
#{r00t,root}@{192.168.1.1,192.168.0.1}
#kardinal@linuxtoy.org
#123@211.148.131.7
#)
#zstyle ':completion:*:my-accounts' users-hosts $my_accounts
#}}}

####{{{
function calc { echo $(($@)) }
function timeconv { date -d @$1 +"%Y-%m-%d %T" }

# }}}


if [ "Linux" = "`uname`" ]; then
export DRIVE_C='/media/SystemWin7'
export DRIVE_D='/media/Programs'
export DRIVE_E='/media/Work'
else
export DRIVE_C='/cygdrive/c'
export DRIVE_D='/cygdrive/d'
export DRIVE_E='/cygdrive/e'
fi


if [ "Linux" = "`uname`" ]; then
if [ -f $HOME/files/cfg/shrc ]; then
source $HOME/files/cfg/shrc
fi
else
if [ -f /cygdrive/e/files/cfg/shrc ]; then
source /cygdrive/e/files/cfg/shrc
fi
fi

# Go language
if [ -f $HOME/files/bin/go/misc/zsh/go ]; then
source $HOME/files/bin/go/misc/zsh/go
fi


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!