-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.zshrc
371 lines (332 loc) · 11.2 KB
/
.zshrc
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
360
361
362
363
364
365
366
367
368
369
370
371
bindkey -v #vimlike
function load-if-exists() { test -e "$1" && source "$1" }
load-if-exists $HOME/.zshrc.local
load-if-exists $HOME/dotfiles/.zshrc.git
load-if-exists $HOME/.pythonbrew/etc/bashrc
function exists { which $1 &> /dev/null }
if exists nvim; then
alias vi='nvim'
alias vim='nvim'
else
alias vi='vim'
fi
# vim no plugin mode
alias suvim='vim -u NORC'
export EDITOR=vi
alias ls='ls -lFGha'
alias grep='grep --color'
alias rg="rg --hidden --glob '!.git'"
alias l='less'
alias -g G='| grep '
alias -g L='| less'
alias du='du -h'
alias df='df -h'
autoload -Uz zmv
alias zmv='noglob zmv -W'
alias ..='cd ../'
alias ...='cd ../../'
alias ....='cd ../../../'
if [[ -x `which colordiff` ]]; then
alias diff='colordiff -u'
else
alias diff='diff -u'
fi
## ファイル操作の確認
alias cp="cp -i"
alias mv="mv -i"
if builtin command -v hub > /dev/null; then
eval "$(hub alias -s)"
fi
############################################################
# Util methods
############################################################
############################################################
# 履歴関係
############################################################
HISTFILE=~/.zsh_history # ヒストリファイル指定
HISTSIZE=100000 # ヒストリに保存するコマンド数
SAVEHIST=100000 # ヒストリファイルに保存するコマンド数
setopt hist_ignore_all_dups # 重複するコマンド行は古い方を削除
setopt share_history # コマンド履歴ファイルを共有する
setopt append_history # 履歴を追加
setopt inc_append_history # 各端末でコマンドを実行した順番にヒストリへ追加
setopt hist_ignore_space # 先頭がスペースの場合、ヒストリに追加しない
setopt auto_pushd # cd -<TAB>でディレクトリの移動履歴表示
setopt pushd_ignore_dups # 移動履歴の重複を削除
setopt hist_no_store # historyコマンドを記録しない
setopt hist_reduce_blanks # 余分な空白を削除して記録
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^p" history-beginning-search-backward-end
bindkey "^n" history-beginning-search-forward-end
#bindkey "^r" history-incremental-pattern-search-backward
############################################################
# 補完関係
############################################################
# 標準補完
autoload -Uz compinit
compinit
setopt auto_cd # ディレクトリ名を入力するだけでディレクトリ変更
setopt auto_list # 自動的に候補一覧を表示
setopt auto_menu #自動的に補完工をを表示する
setopt correct # 間違ったコマンドを修正
setopt list_packed # 補完候補をまとめて表示
setopt list_rows_first #補完の表示を水平方向に
setopt nolistbeep # 補完時ビープなし
#setopt complete_aliases # aliasも補完に含める
setopt complete_in_word # 語の途中でもカーソル位置で補完
setopt always_last_prompt #補完のときプロンプトの位置を変えない
setopt list_types # 補完候補の表示を親切に
# 今いるディレクトリを補完候補から外す
zstyle ':completion:*' ignore-parents parent pwd ..
# 補完候補に色を付ける
# "": 空文字列はデフォルト値
zstyle ':completion:*:default' list-colors ""
# 補完方法毎にグループ化する
# %B...%b:「...」を太字にする
# %d: 補完方法のラベル
zstyle ':completion:*' format '%B%d%b'
zstyle ':completion:*' group-name ''
# 補完候補をメニューから選択する
zstyle ':completion:*:default' menu select=2
# 補完候補がなければあいまい検索
# m:{a-z}={A-Z}:小文字を大文字に変えて検索
# r:|[._-]=*: ._-の前にワイルドカードがあるものとして補完
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z} r:|[._-]=*'
# 設定した時間以上処理が掛かった場合詳細を表示
REPORTTIME=3
# 補完方法の設定
# _oldlist 前回の補完結果の再利用
# _complete 補完する
# _match globを展開しないで候補の一覧から補完
# _history ヒストリのコマンドも補完候補とする
# _ignored 補完候補にださないと指定したものを補完候補
# _approximate 似ている補完候補も補完候補とする
# _prefix カーソル以降を無視してカーソル位置までで補完
zstyle ':completion:*' completer _oldlist _complete _match _history _ignored _prefix
# 補完候補をキャッシュ
zstyle ':completion:*' use-cache yes
# 詳細な情報を使う
zstyle ':completion:*' verbose yes
zstyle ':completion:sudo:*' environ PATH="$SUDO_PATH:$PATH"
# globを展開しないで候補の一覧から補完
zstyle ':completion:*' glob_complete
# 補完時ヒストリ展開
setopt hist_expand
# PCRE 互換の正規表現を使う
setopt re_match_pcre
# カレントディレクトリ中に指定されたディレクトリがみつからなかった場合に
# 移動先を検索するリスト
cdpath=(~)
# URLを自動エスケープする
autoload -Uz url-quote-magic
zle -N self-insert url-quote-magic
############################################################
# その他の標準設定
############################################################
## keep background processes at full speed
setopt NOBGNICE
## restart running processes on exit
setopt HUP
setopt NO_BEEP # ビープを鳴らさない
# jobsでプロセスIDも出力する
setopt long_list_jobs
############################################################
# ls hook
############################################################
typeset -ga chpwd_functions
ls_abbrev() {
# -a : Do not ignore entries starting with ..
# -C : Force multi-column output.
# -F : Append indicator (one of */=>@|) to entries.
local cmd_ls='ls'
local -a opt_ls
opt_ls=('-aCF' '--color=always')
case "${OSTYPE}" in
freebsd*|darwin*)
if type gls > /dev/null 2>&1; then
cmd_ls='gls'
else
# -G : Enable colorized output.
opt_ls=('-lFG')
fi
;;
esac
local ls_result
ls_result=$(CLICOLOR_FORCE=1 COLUMNS=$COLUMNS command $cmd_ls ${opt_ls[@]}) #| sed $'/^\e\[[0-9;]*m$/d')
local ls_lines=$(echo "$ls_result" | wc -l | tr -d ' ')
if [ $ls_lines -gt 20 ]; then
echo "$ls_result" | head -n 10
echo '...'
echo "$ls_result" | tail -n 10
echo "$(command ls -1 -A | wc -l | tr -d ' ') files exist"
else
echo "$ls_result"
fi
}
chpwd_functions+=ls_abbrev
############################################################
# zsh library
############################################################
# z.sh
autoload -Uz is-at-least
_Z_CMD=j
_Z_DATA=~/dotfiles/zsh/.z
if is-at-least 4.3.9; then
load-if-exists $HOME/dotfiles/zsh/z/z.sh
else
_Z_NO_PROMPT_COMMAND=1
load-if-exists $HOME/dotfiles/zsh/z/z.sh && {
function precmd_z() {
_z --add "$(pwd -P)"
}
precmd_functions+=precmd_z
}
fi
test $? || unset _Z_CMD _Z_DATA _Z_NO_PROMPT_COMMAND
zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format '%F{yellow}Completing %B%d%b%f'
#################################
# {{{ 養成ギブス
#################################
net_tools_deprecated_message () {
echo -n 'net-tools コマンドはもう非推奨ですよ?おじさんなんじゃないですか? '
}
case ${OSTYPE} in
linux*) # not found command ip & ss in os x
arp () {
net_tools_deprecated_message
echo 'Use `ip n`'
}
ifconfig () {
net_tools_deprecated_message
echo 'Use `ip a`, `ip link`, `ip -s link`'
}
iptunnel () {
net_tools_deprecated_message
echo 'Use `ip tunnel`'
}
iwconfig () {
echo -n 'iwconfig コマンドはもう非推奨ですよ?おじさんなんじゃないですか? '
echo 'Use `iw`'
}
nameif () {
net_tools_deprecated_message
echo 'Use `ip link`, `ifrename`'
}
netstat () {
net_tools_deprecated_message
echo 'Use `ss`, `ip route` (for netstat -r), `ip -s link` (for netstat -i), `ip maddr` (for netstat -g)'
}
route () {
net_tools_deprecated_message
echo 'Use `ip r`'
}
;;
esac
# }}}
### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"
# load-if-exists $HOME/.zshrc.local
# load-if-exists $HOME/dotfiles/.zshrc.git
# load-if-exists $HOME/.pythonbrew/etc/bashrc
# plugin manager
#if [[ ! -f ~/.antigen.zsh ]]; then
# curl -L git.io/antigen > ~/.antigen.zsh
#fi
#source ~/.antigen.zsh
#antigen bundle b4b4r07/enhancd
#antigen bundle junegunn/fzf
#antigen bundle zsh-users/zsh-syntax-highlighting
#antigen bundle zsh-users/zsh-history-substring-search
#antigen bundle zsh-users/zsh-completions
#antigen bundle superbrothers/zsh-kubectl-prompt
#antigen apply
if [[ ! -d ~/.zplug ]]; then
git clone https://github.com/zplug/zplug ~/.zplug
source ~/.zplug/init.zsh && zplug update --self
fi
source ~/.zplug/init.zsh
# from:gh-r
if [[ `uname -m` == "x86_64" ]]; then
arch="linux_amd64"
else
arch="darwin_arm64"
fi
zplug "b4b4r07/enhancd", use:init.sh
#zplug "junegunn/fzf", from:gh-r, as:command, rename-to:fzf, use:"*${arch}*"
zplug "junegunn/fzf", use:"shell/*.zsh", as:plugin, defer:2
zplug "junegunn/fzf", as:command, use:"bin/fzf-tmux"
zplug "zsh-users/zsh-syntax-highlighting", defer:2
zplug "zsh-users/zsh-history-substring-search"
zplug "zsh-users/zsh-completions"
zplug "superbrothers/zsh-kubectl-prompt"
# Install packages that have not been installed yet
if ! zplug check --verbose; then
printf "Install? [y/N]: "
if read -q; then
echo; zplug install
else
echo
fi
fi
zplug load --verbose
# install any tools
if ! exists asdf; then
git clone https://github.com/asdf-vm/asdf.git ~/.asdf
fi
#. $HOME/.asdf/asdf.sh
#if ! exists fzf; then
# git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
# ~/.fzf/install
#fi
if ! exists ghq; then
asdf plugin add ghq
asdf install ghq latest
fi
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
function fzf-src () {
local selected_dir=$(ghq list --full-path --vcs git | fzf --query "$LBUFFER")
if [ -n "$selected_dir" ]; then
BUFFER="cd ${selected_dir}"
zle accept-line
fi
zle clear-screen
}
zle -N fzf-src
bindkey '^g' fzf-src
function fzf-select-history() {
BUFFER=$(history -n -r 1 | fzf --no-sort --exact --query "$LBUFFER")
CURSOR=$#BUFFER
zle reset-prompt
}
zle -N fzf-select-history
bindkey '^r' fzf-select-history
export PATH="$HOME/.rbenv/bin:$PATH"
if exists rbenv; then
eval "$(rbenv init -)"
else
echo "not install rbenv"
fi
#brew install coreutils
if exists gdircolors; then
eval $(gdircolors $HOME/dotfiles/dircolors-solarized/dircolors.ansi-universal)
else
if ! exists dircolors; then
echo "not install gdircolors, 'brew install coreutils'"
fi
fi
if [ -n "$LS_COLORS" ]; then
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
fi
if exists direnv; then
eval "$(direnv hook zsh)"
fi
source ~/dotfiles/.zshrc.color
export PATH=$PATH:$HOME/.local/bin
if exists cargo; then
export PATH=$PATH:$HOME/.cargo/bin
fi
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh