Guest User

Untitled

a guest
Jul 20th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.62 KB | None | 0 0
  1. # -*- mode: sh; indent-tabs-mode: nil -*-
  2.  
  3. export PATH="/usr/local/bin:$PATH"
  4.  
  5. # キーバインド
  6. ## Vimキーバインドを使う。
  7. bindkey -v
  8. bindkey '^R' history-incremental-search-backward
  9. bindkey '^P' history-beginning-search-backward
  10. bindkey '^N' history-beginning-search-forward
  11.  
  12. # ディレクトリ移動
  13. ## ディレクトリ名だけでcdする。
  14. setopt auto_cd
  15. ## cdで移動してもpushdと同じようにディレクトリスタックに追加する。
  16. setopt auto_pushd
  17. ## ディレクトリが変わったらディレクトリスタックを表示。
  18. chpwd_functions=($chpwd_functions dirs)
  19.  
  20. # ヒストリ
  21. ## ヒストリを保存するファイル
  22. HISTFILE=~/.zsh_history
  23. function history-all { history -E 1 }
  24. ## メモリ上のヒストリ数。
  25. ## 大きな数を指定してすべてのヒストリを保存するようにしている。
  26. HISTSIZE=10000000
  27. ## 保存するヒストリ数
  28. SAVEHIST=$HISTSIZE
  29. ## ヒストリファイルにコマンドラインだけではなく実行時刻と実行時間も保存する。
  30. setopt extended_history
  31. ## 同じコマンドラインを連続で実行した場合はヒストリに登録しない。
  32. setopt hist_ignore_dups
  33. ## スペースで始まるコマンドラインはヒストリに追加しない。
  34. setopt hist_ignore_space
  35. ## すぐにヒストリファイルに追記する。
  36. setopt inc_append_history
  37. ## zshプロセス間でヒストリを共有する。
  38. setopt share_history
  39. ## C-sでのヒストリ検索が潰されてしまうため、出力停止・開始用にC-s/C-qを使わない。
  40. setopt no_flow_control
  41.  
  42.  
  43. # プロンプト
  44. ## PROMPT内で変数展開・コマンド置換・算術演算を実行する。
  45. setopt prompt_subst
  46. ## PROMPT内で「%」文字から始まる置換機能を有効にする。
  47. setopt prompt_percent
  48. ## コピペしやすいようにコマンド実行後は右プロンプトを消す。
  49. setopt transient_rprompt
  50.  
  51. ## 256色生成用便利関数
  52. ### red: 0-5
  53. ### green: 0-5
  54. ### blue: 0-5
  55. color256()
  56. {
  57. local red=$1; shift
  58. local green=$2; shift
  59. local blue=$3; shift
  60.  
  61. echo -n $[$red * 36 + $green * 6 + $blue + 16]
  62. }
  63.  
  64. fg256()
  65. {
  66. echo -n $'\e[38;5;'$(color256 "$@")"m"
  67. }
  68.  
  69. bg256()
  70. {
  71. echo -n $'\e[48;5;'$(color256 "$@")"m"
  72. }
  73.  
  74. ## プロンプトの作成
  75. ## バージョン管理システムの情報も表示する
  76. autoload -Uz vcs_info
  77. zstyle ':vcs_info:*' formats \
  78. '(%{%F{white}%K{green}%}%s%{%f%k%})-[%{%F{white}%K{blue}%}%b%{%f%k%}]'
  79. zstyle ':vcs_info:*' actionformats \
  80. '(%{%F{white}%K{green}%}%s%{%f%k%})-[%{%F{white}%K{blue}%}%b%{%f%k%}|%{%F{white}%K{red}%}%a%{%f%k%}]'
  81.  
  82. ### プロンプトバーの左側
  83. ### %{%B%}...%{%b%}: 「...」を太字にする。
  84. ### %{%F{cyan}%}...%{%f%}: 「...」をシアン色の文字にする。
  85. ### %n: ユーザ名
  86. ### %m: ホスト名(完全なホスト名ではなくて短いホスト名)
  87. ### %{%B%F{white}%(?.%K{green}.%K{red})%}%?%{%f%k%b%}:
  88. ### 最後に実行したコマンドが正常終了していれば
  89. ### 太字で白文字で緑背景にして異常終了していれば
  90. ### 太字で白文字で赤背景にする。
  91. ### %{%F{white}%}: 白文字にする。
  92. ### %(x.true-text.false-text): xが真のときはtrue-textになり
  93. ### 偽のときはfalse-textになる。
  94. ### ?: 最後に実行したコマンドの終了ステータスが0のときに真になる。
  95. ### %K{green}: 緑景色にする。
  96. ### %K{red}: 赤景色を赤にする。
  97. ### %?: 最後に実行したコマンドの終了ステータス
  98. ### %{%k%}: 背景色を元に戻す。
  99. ### %{%f%}: 文字の色を元に戻す。
  100. ### %{%b%}: 太字を元に戻す。
  101. ### %D{%Y/%m/%d %H:%M}: 日付。「年/月/日 時:分」というフォーマット。
  102. prompt_bar_left_status="(%{%(?.%F{green}.%F{red})%}%c%{%f%})"
  103. prompt_bar_left_date="<%{%F{cyan}%}%D{%Y/%m/%d %H:%M}%{%f%}>"
  104. prompt_bar_left="-${prompt_bar_left_status}-${prompt_bar_left_date}-"
  105.  
  106. ### プロンプトバーの右側
  107. ### %{%B%K{magenta}%F{white}%}...%{%f%k%b%}:
  108. ### 「...」を太字のマゼンタ背景の白文字にする。
  109. ### %d: カレントディレクトリのフルパス(省略しない)
  110. #prompt_bar_right="-[%{%B%K{magenta}%F{white}%}%d%{%f%k%b%}]-"
  111.  
  112. ### 2行目左にでるプロンプト。
  113. ### %h: ヒストリ数。
  114. ### %(1j,(%j),): 実行中のジョブ数が1つ以上ある場合だけ「(%j)」を表示。
  115. ### %j: 実行中のジョブ数。
  116. ### %{%B%}...%{%b%}: 「...」を太字にする。
  117. ### %#: 一般ユーザなら「%」、rootユーザなら「#」になる。
  118. prompt_left="-%(1j,(%j),)%{%B%}%#%{%b%} "
  119.  
  120. ## プロンプトフォーマットを展開した後の文字数を返す。
  121. ## 日本語未対応。
  122. count_prompt_characters()
  123. {
  124. # print:
  125. # -P: プロンプトフォーマットを展開する。
  126. # -n: 改行をつけない。
  127. # sed:
  128. # -e $'s/\e\[[0-9;]*m//g': ANSIエスケープシーケンスを削除。
  129. # wc:
  130. # -c: 文字数を出力する。
  131. # sed:
  132. # -e 's/ //g': *BSDやMac OS Xのwcは数字の前に空白を出力するので削除する。
  133. print -n -P -- "$1" | sed -e $'s/\e\[[0-9;]*m//g' | wc -m | sed -e 's/ //g'
  134. }
  135.  
  136. ## プロンプトを更新する。
  137. update_prompt()
  138. {
  139. # プロンプトバーの左側の文字数を数える。
  140. # 左側では最後に実行したコマンドの終了ステータスを使って
  141. # いるのでこれは一番最初に実行しなければいけない。そうし
  142. # ないと、最後に実行したコマンドの終了ステータスが消えて
  143. # しまう。
  144. local bar_left_length=$(count_prompt_characters "$prompt_bar_left")
  145. # プロンプトバーに使える残り文字を計算する。
  146. # $COLUMNSにはターミナルの横幅が入っている。
  147. local bar_rest_length=$[COLUMNS - bar_left_length]
  148.  
  149. local bar_left="$prompt_bar_left"
  150. # パスに展開される「%d」を削除。
  151. local bar_right_without_path="${prompt_bar_right:s/%d//}"
  152. # 「%d」を抜いた文字数を計算する。
  153. local bar_right_without_path_length=$(count_prompt_characters "$bar_right_without_path")
  154. # パスの最大長を計算する。
  155. # $[...]: 「...」を算術演算した結果で展開する。
  156. local max_path_length=$[bar_rest_length - bar_right_without_path_length]
  157. # パスに展開される「%d」に最大文字数制限をつける。
  158. # %d -> %(C,%${max_path_length}<...<%d%<<,)
  159. # %(x,true-text,false-text):
  160. # xが真のときはtrue-textになり偽のときはfalse-textになる。
  161. # ここでは、「%N<...<%d%<<」の効果をこの範囲だけに限定させる
  162. # ために用いているだけなので、xは必ず真になる条件を指定している。
  163. # C: 現在の絶対パスが/以下にあると真。なので必ず真になる。
  164. # %${max_path_length}<...<%d%<<:
  165. # 「%d」が「${max_path_length}」カラムより長かったら、
  166. # 長い分を削除して「...」にする。最終的に「...」も含めて
  167. # 「${max_path_length}」カラムより長くなることはない。
  168. bar_right=${prompt_bar_right:s/%d/%(C,%${max_path_length}<...<%d%<<,)/}
  169. # 「${bar_rest_length}」文字分の「-」を作っている。
  170. # どうせ後で切り詰めるので十分に長い文字列を作っているだけ。
  171. # 文字数はざっくり。
  172. local separator="${(l:${bar_rest_length}::-:)}"
  173. # プロンプトバー全体を「${bar_rest_length}」カラム分にする。
  174. # %${bar_rest_length}<<...%<<:
  175. # 「...」を最大で「${bar_rest_length}」カラムにする。
  176. bar_right="%${bar_rest_length}<<${separator}${bar_right}%<<"
  177.  
  178. # プロンプトバーと左プロンプトを設定
  179. # "${bar_left}${bar_right}": プロンプトバー
  180. # $'\n': 改行
  181. # "${prompt_left}": 2行目左のプロンプト
  182. PROMPT="${bar_left}${bar_right}"$'\n'"${prompt_left}"
  183. # 右プロンプト
  184. # %{%B%F{white}%K{green}}...%{%k%f%b%}:
  185. # 「...」を太字で緑背景の白文字にする。
  186. # %~: カレントディレクトリのフルパス(可能なら「~」で省略する)
  187. RPROMPT="[%{%B%F{white}%K{magenta}%}%~%{%k%f%b%}]"
  188. case "$TERM_PROGRAM" in
  189. Apple_Terminal)
  190. # Mac OS Xのターミナルでは$COLUMNSに右余白が含まれていないので
  191. # 右プロンプトに「-」を追加して調整。
  192. ## 2011-09-05
  193. RPROMPT="${RPROMPT}-"
  194. ;;
  195. esac
  196.  
  197. # バージョン管理システムの情報を取得する。
  198. LANG=C vcs_info >&/dev/null
  199. # バージョン管理システムの情報があったら右プロンプトに表示する。
  200. if [ -n "$vcs_info_msg_0_" ]; then
  201. RPROMPT="${vcs_info_msg_0_}-${RPROMPT}"
  202. fi
  203.  
  204. # ターミナルのタイトルに接続情報等を表示
  205. mycmd=(${(s: :)${1}})
  206. echo -ne "\ek$(hostname|awk 'BEGIN{FS="."}{print $1}'):$mycmd[1]\e\\"
  207. }
  208.  
  209. ## コマンド実行前に呼び出されるフック。
  210. precmd_functions=($precmd_functions update_prompt)
  211.  
  212.  
  213. # 補完
  214. ## 初期化
  215. autoload -U compinit
  216. compinit
  217.  
  218. ## 補完方法毎にグループ化する。
  219. ### 補完方法の表示方法
  220. ### %B...%b: 「...」を太字にする。
  221. ### %d: 補完方法のラベル
  222. zstyle ':completion:*' format '%B%d%b'
  223. zstyle ':completion:*' group-name ''
  224.  
  225. ## 補完侯補をメニューから選択する。
  226. ### select=2: 補完候補を一覧から選択する。
  227. ### ただし、補完候補が2つ以上なければすぐに補完する。
  228. zstyle ':completion:*:default' menu select=2
  229.  
  230. ## 補完候補に色を付ける。
  231. ### "": 空文字列はデフォルト値を使うという意味。
  232. zstyle ':completion:*:default' list-colors ""
  233.  
  234. ## 補完候補がなければより曖昧に候補を探す。
  235. ### m:{a-z}={A-Z}: 小文字を大文字に変えたものでも補完する。
  236. zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
  237.  
  238. ## 補完方法の設定。指定した順番に実行する。
  239. ### _oldlist 前回の補完結果を再利用する。
  240. ### _complete: 補完する。
  241. ### _match: globを展開しないで候補の一覧から補完する。
  242. ### _ignored: 補完候補にださないと指定したものも補完候補とする。
  243. ### _approximate: 似ている補完候補も補完候補とする。
  244. ### _prefix: カーソル以降を無視してカーソル位置までで補完する。
  245. zstyle ':completion:*' completer \
  246. _oldlist _complete _match _ignored _approximate _prefix
  247.  
  248. ## 補完候補をキャッシュする。
  249. zstyle ':completion:*' use-cache yes
  250. ## 詳細な情報を使う。
  251. zstyle ':completion:*' verbose yes
  252. ## sudo時にはsudo用のパスも使う。
  253. zstyle ':completion:sudo:*' environ PATH="$SUDO_PATH:$PATH"
  254.  
  255. ## カーソル位置で補完する。
  256. setopt complete_in_word
  257. ## globを展開しないで候補の一覧から補完する。
  258. setopt glob_complete
  259. ## 補完時にヒストリを自動的に展開する。
  260. setopt hist_expand
  261. ## 補完候補がないときなどにビープ音を鳴らさない。
  262. setopt no_beep
  263. ## 辞書順ではなく数字順に並べる。
  264. setopt numeric_glob_sort
  265.  
  266.  
  267. # 展開
  268. ## --prefix=~/localというように「=」の後でも
  269. ## 「~」や「=コマンド」などのファイル名展開を行う。
  270. setopt magic_equal_subst
  271. ## 拡張globを有効にする。
  272. ## glob中で「(#...)」という書式で指定する。
  273. setopt extended_glob
  274. ## globでパスを生成したときに、パスがディレクトリだったら最後に「/」をつける。
  275. setopt mark_dirs
  276.  
  277.  
  278. # ジョブ
  279. ## jobsでプロセスIDも出力する。
  280. setopt long_list_jobs
  281.  
  282.  
  283. # 実行時間
  284. ## 実行したプロセスの消費時間が3秒以上かかったら
  285. ## 自動的に消費時間の統計情報を表示する。
  286. REPORTTIME=3
  287.  
  288. # ログイン・ログアウト
  289. ## 全てのユーザのログイン・ログアウトを監視する。
  290. watch="all"
  291.  
  292. ## ^Dでログアウトしないようにする。
  293. setopt ignore_eof
  294.  
  295.  
  296. # 単語
  297. ## 「/」も単語区切りとみなす。
  298. WORDCHARS=${WORDCHARS:s,/,,}
  299. ## 「|」も単語区切りとみなす。
  300. ## 2011-09-19
  301. WORDCHARS="${WORDCHARS}|"
  302.  
  303.  
  304. # alias
  305. ## ファイル操作を確認する。
  306. alias rm="rm -i"
  307. alias cp="cp -i"
  308. alias mv="mv -i"
  309.  
  310. # 補完
  311. # for zsh-completions
  312. fpath=(/usr/local/share/zsh-completions $fpath)
  313.  
  314. # autojump
  315. # alias j="autojump"
  316. # if [ -f `brew --prefix`/etc/autojump ]; then
  317. # . `brew --prefix`/etc/autojump
  318. # fi
  319.  
  320.  
  321. # z.sh
  322. # if which brew > /dev/null; then
  323. # _Z_CMD=j
  324. # source $(brew --prefix)/etc/profile.d/z.sh
  325. # fi
  326.  
  327. ## lsの設定
  328. export LSCOLORS=exfxcxdxbxegedabagacad
  329. export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
  330.  
  331. alias ls="ls -GF"
  332. alias gls="gls --color"
  333.  
  334. zstyle ':completion:*' list-colors 'di=34' 'ln=35' 'so=32' 'ex=31' 'bd=46;34' 'cd=43;34'
  335.  
  336.  
  337. # javac error
  338. # alias javac="javac -J-Dfile.encoding=UTF-8"
  339.  
  340. ## カスタムaliasの設定
  341. ### ~/.zsh.d/zshalias → ~/.zshaliasの順に探して
  342. ### 最初に見つかったファイルを読み込む。
  343. ### (N-.): 存在しないファイルは登録しない。
  344. ### パス(...): ...という条件にマッチするパスのみ残す。
  345. ### N: NULL_GLOBオプションを設定。
  346. ### globがマッチしなかったり存在しないパスを無視する。
  347. ### -: シンボリックリンク先のパスを評価。
  348. ### .: 通常のファイルのみ残す。
  349. ### 2011-11-06
  350. alais_files=(~/.zsh.d/zshalias(N-.)
  351. ~/.zshalias(N-.))
  352. for alias_file in ${alias_files}; do
  353. source "${alias_file}"
  354. break
  355. done
  356.  
  357. # ウィンドウタイトル
  358. ## 実行中のコマンドとユーザ名とホスト名とカレントディレクトリを表示。
  359. update_title() {
  360. local command_line=
  361. typeset -a command_line
  362. command_line=${(z)2}
  363. local command=
  364. if [ ${(t)command_line} = "array-local" ]; then
  365. command="$command_line[1]"
  366. else
  367. command="$2"
  368. fi
  369. print -n -P "\e]2;"
  370. echo -n "(${command})"
  371. print -n -P " %n@%m:%~\a"
  372. }
  373. ## X環境上でだけウィンドウタイトルを変える。
  374. if [ -n "$DISPLAY" ]; then
  375. preexec_functions=($preexec_functions update_title)
  376. fi
  377.  
  378. # node.js
  379. ## nvmを使っているなら有効にする
  380. ## 2013-07-20
  381. nvm_sh=~/.nvm/nvm.sh
  382. if [ -f ${nvm_sh} ]; then
  383. source ${nvm_sh}
  384. fi
  385.  
  386. function peco-history-selection() {
  387. BUFFER=`history -n 1 | tail -r | awk '!a[$0]++' | peco`
  388. CURSOR=$#BUFFER
  389. zle reset-prompt
  390. }
  391.  
  392. zle -N peco-history-selection
  393.  
  394. #
  395. setopt nonomatch
  396. export PATH=$PATH:/usr/local/opt/go/libexec/bin
  397. export PGDATA=/usr/local/var/postgres
Add Comment
Please, Sign In to add comment