unstopt=しない
setipt=する
で読んで下さい
.zprofile
.zsh
# vim: set ff=unix tabstop=4 shiftwidth=0 softtabstop=-1 noexpandtab fileencoding=utf-8 fileformat=unix filetype=zsh :
# https://gist.github.com/kotashiratsuka/8b345e37fac98b71cbd6464c027bfe2c
# coredumpファイルを作らせないようにする
ulimit -c 0
# 日本語を使う
export LANG="ja_JP.UTF-8"
if [ ! -f ~/.zshrc.zwc -o ~/.zshrc -nt ~/.zshrc.zwc ]; then
zcompile ~/.zshrc
fi
.zshrc
# vim: set ff=unix tabstop=4 shiftwidth=0 softtabstop=-1 noexpandtab fileencoding=utf-8 fileformat=unix filetype=zsh foldmethod=marker :
# https://gist.github.com/kotashiratsuka/e1480b2dba48c1a85f9b60a3c1850bb5
# $PATH の重複をなくす
typeset -U path cdpath fpath manpath
# 補完機能を使用する
autoload -U compinit
compinit
zstyle ':completion::complete:*' use-cache true
# zstyle ':completion:*:default' menu select true
zstyle ':completion:*:default' menu select=1
# rehash不要にする
zstyle ":completion:*:commands" rehash 1
# 大文字、小文字を区別せず補完する
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# 補完でカラーを使用する
autoload colors
zstyle ':completion:*' list-colors "${LS_COLORS}"
# kill の候補にも色付き表示
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([%0-9]#)*=0=01;31'
# コマンドにsudoを付けても補完
zstyle ':completion:*:sudo:*' command-path /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/X11R6/bin
# 何も入力されていないときのTABでTABが挿入されるのを抑制
zstyle ':completion:*' insert-tab false
# auto cdr
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
zstyle ':completion:*' recent-dirs-insert both
zstyle ':chpwd:*' recent-dirs-max 300
zstyle ':chpwd:*' recent-dirs-default true
zstyle ':chpwd:*' recent-dirs-prune parent
# zsh内蔵エディタを使う
autoload -U zcalc
autoload zed
# zm内蔵リネームを使う
autoload -U zmv
alias mmv='noglob zmv -W'
# openssl ecparam -name secp384r1 -genkey > server.key
# openssl req -new -key server.key -out server.csr
# openssl req -in server.csr -key server.key -x509 -out server.crt -days $(( 365 * 5 ))
# zmv -W -n 'server.*' 'server.lcoal.*'
# xargsのzsh版zargsを使う
autoload -U zargs
# zargs OPTIONS -- GLOB -- COMMAND
# zargs -- **/*(.) -- ls
# zargs -P0 -i{} -- **/*.jpg -- command -i {} -o ./output
# ライン操作はEmacsスタイルで行う
bindkey -e
# 予測入力させる
# autoload predict-on
# zle -N predict-on
# zle -N predict-off
# bindkey '^X^P' predict-on
# bindkey '^O' predict-off
# zstyle ':predict' verbose true
# 履歴補完中の履歴移動
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end
# インクリメンタルサーチのデフォルト設定
# bindkey "^R" history-incremental-search-backward
# bindkey "^S" history-incremental-search-forward
# 履歴のインクリメンタル検索でワイルドカード利用可能
bindkey '^R' history-incremental-pattern-search-backward
bindkey '^S' history-incremental-pattern-search-forward
# 入力途中の履歴補完を有効化する
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
# character-search(c-]<char>)をbashと同じ挙動にする
bindkey '^]' vi-find-next-char
bindkey '^[' vi-find-prev-char
# プロンプト関係
# PROMPT="[%n@%m %~]%(!.#.$) "
# PROMPT2="%n %_%%"
# SPROMPT="%r is correct? [n,y,a,e]: "
# RPROMPT="[%l/zsh]"
autoload -Uz promptinit
promptinit
prompt redhat
# prompt -l
# prompt -p
# エディタでライン編集
autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line
# ヒストリーサイズ設定
HISTFILE=$HOME/.zsh_history
HISTSIZE=1000000
SAVEHIST=1000000
# ヒストリの一覧を読みやすい形に変更
HISTTIMEFORMAT="[%Y/%M/%D %H:%M:%S] "
# 補完リストが多いときに尋ねない
LISTMAX=1000
# "|,:"を単語の一部とみなさない
WORDCHARS="$WORDCHARS|:"
# http://www.ayu.ics.keio.ac.jp/~mukai/translate/zshoptions.html
# タブキーの連打で自動的にメニュー補完
setopt AUTO_MENU
# /foo/barでいきなりcd
setopt AUTO_CD
# "~$var" でディレクトリにアクセス
setopt AUTO_NAME_DIRS
# 補完が/で終って、つぎが、語分割子か/かコマンドの後(;とか&)だったら、補完末尾の/を取る
unsetopt AUTO_REMOVE_SLASH
# 曖昧な補完で、自動的に選択肢をリストアップ
setopt AUTO_LIST
# 変数名を補完する
setopt AUTO_PARAM_KEYS
# プロンプト文字列で各種展開を行なう
setopt PROMPT_SUBST
# サスペンド中のプロセスと同じコマンド名を実行した場合はリジュームする
setopt AUTO_RESUME
# rm * などの際確認しない
setopt RM_STAR_SILENT
# ファイル名の展開でディレクトリにマッチした場合末尾に / を付加する
setopt MARK_DIRS
# 明確なドットの指定なしで.から始まるファイルをマッチ
setopt GLOBDOTS
# rm *で確認
setopt RM_STAR_WAIT
# 行の末尾がバッククォートでも無視する
setopt SUN_KEYBOARD_HACK
# ~hoge以外にマッチする機能を使わない
setopt EXTENDED_GLOB
# 補完対象のファイルの末尾に識別マークをつける
setopt LIST_TYPES
# BEEPを鳴らさない
setopt NO_BEEP
# 補完候補など表示する時はその場に表示し、終了時に画面から消す
setopt ALWAYS_LAST_PROMPT
# cd kotaで/home/kotaに移動する
setopt CDABLE_VARS
# クォートされていない変数拡張が行われたあとで、フィールド分割
setopt SH_WORD_SPLIT
# 定義された全ての変数は自動的にexportする
setopt ALL_EXPORT
# ディレクトリ名を補完すると、末尾がスラッシュになる。
setopt AUTO_PARAM_SLASH
# 普通のcdでもスタックに入れる
setopt AUTO_PUSHD
# コマンドのスペルの訂正を使用する
setopt CORRECT
# 引数のスペルの訂正を使用する
unsetopt CORRECT_ALL
# aliasを展開して補完
unsetopt COMPLETE_ALIASES
# "*" にドットファイルをマッチ
unsetopt GLOB_DOTS
# 補完候補を詰めて表示
setopt LIST_PACKED
# ディレクトリスタックに、同じディレクトリを入れない
setopt PUSHD_IGNORE_DUPS
# 移動履歴をキューではなくスタックで番号付け(最近居た場所が上になる)
setopt PUSHD_MINUS
# ^Dでログアウトしないようにする
unsetopt IGNORE_EOF
# ジョブの状態をただちに知らせる
setopt NOTIFY
# 複数のリダイレクトやパイプに対応
setopt MULTIOS
# ファイル名を数値的にソート
setopt NUMERIC_GLOB_SORT
# リダイレクトで上書き禁止
unsetopt NOCLOBBER
# =以降でも補完できるようにする
setopt MAGIC_EQUAL_SUBST
# 補完候補リストの日本語を正しく表示
setopt PRINT_EIGHT_BIT
# 右プロンプトに入力がきたら消す
setopt TRANSIENT_RPROMPT
# 戻り値が0以外の場合終了コードを表示
unsetopt PRINT_EXIT_VALUE
# echo {a-z}などを使えるようにする
setopt BRACE_CCL
# !!などを実行する前に確認する
setopt HISTVERIFY
# 余分な空白は詰めて記録
setopt HIST_IGNORE_SPACE
# ヒストリファイルを上書きするのではなく、追加するようにする
setopt APPEND_HISTORY
# ジョブがあっても黙って終了する
setopt NO_CHECK_JOBS
# ヒストリに時刻情報もつける
setopt EXTENDED_HISTORY
# 履歴がいっぱいの時は最も古いものを先ず削除
setopt HIST_EXPIRE_DUPS_FIRST
# 履歴検索中、重複を飛ばす
setopt HIST_FIND_NO_DUPS
# ヒストリリストから関数定義を除く
unsetopt HIST_NO_FUNCTIONS
# 前のコマンドと同じならヒストリに入れない
setopt HIST_IGNORE_DUPS
# 重複するヒストリを持たない
setopt HIST_IGNORE_ALL_DUPS
# 実行するまえに必ず展開結果を確認できるようにする
setopt HIST_VERIFY
# 履歴をインクリメンタルに追加
setopt INC_APPEND_HISTORY
# history コマンドをヒストリに入れない
unsetopt HIST_NO_STORE
# 履歴から冗長な空白を除く
setopt HIST_REDUCE_BLANKS
# 履歴を共有
setopt SHARE_HISTORY
# 古いコマンドと同じものは無視
setopt HIST_SAVE_NO_DUPS
# 補完時にヒストリを自動的に展開する
setopt HIST_EXPAND
# 改行コードで終らない出力もちゃんと出力する
setopt NO_PROMPTCR
# loop の短縮形を許す
setopt SHORT_LOOPS
# コマンドラインがどのように展開され実行されたかを表示する
unsetopt XTRACE
# シンボリックリンクは実体を追うようになる
unsetopt CHASE_LINKS
# $0 にスクリプト名/シェル関数名を格納
setopt FUNCTION_ARGZERO
# Ctrl+S/Ctrl+Q によるフロー制御を使わないようにする
setopt NO_FLOW_CONTROL
# コマンドラインでも # 以降をコメントと見なす
setopt INTERACTIVE_COMMENTS
# デフォルトの複数行コマンドライン編集ではなく、1行編集モードになる
unsetopt SINGLE_LINE_ZLE
# 語の途中でもカーソル位置で補完
setopt COMPLETE_IN_WORD
# **で**/*と同じ意味になる >5.2
# setopt GLOB_STAR_SHORT
# 何も入力していない時にTABで展開を抑止
bindkey "^I" complete-word
# C-Uで行頭まで削除
bindkey "^U" backward-kill-line
# 補完候補のメニュー選択で、矢印キーの代わりにhjklで移動出来るようにする。
zmodload zsh/complist
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'j' vi-down-line-or-history
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
# ttyで省電力のための画面を消す機能を無効化する(xterm用)
# setterm -blank 0
# ^x*でマッチを展開
# bindkey "^X*" expand-word
# 端末設定
# Ctrl+H に 1 文字削除
# stty erase '^H'
# Ctrl+C に割り込み
# stty intr '^C'
# Ctrl+Z にサスペンド
# stty susp '^Z'
# C-^ で一つ上のディレクトリへ
# function cdup() {
# echo
# cd ..
# zle reset-prompt
# }
# zle -N cdup
# bindkey '^^' cdup
# C-~ でホームディレクトリへ
# function cdhome() {
# echo
# cd ~
# zle reset-prompt
# }
# zle -N cdhome
# bindkey '^~' cdhome
# zsh Git
autoload -Uz vcs_info
zstyle ":vcs_info:*" enable git
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "+"
zstyle ':vcs_info:git:*' unstagedstr "-"
zstyle ':vcs_info:git:*' actionformats '%F{5}[%f%s%F{5}]%F{3}%F{5}[%f%r%F{5}]%F{3}%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f%F{1}%u%f%F{6}%c%f'
zstyle ':vcs_info:git:*' formats '%F{5}[%f%s%F{5}]%F{3}%F{5}[%f%r%F{5}]%F{3}%F{5}[%F{2}%b%F{5}]%F{1}%u%f%F{6}%c%f'
precmd() { vcs_info }
RPROMPT='${vcs_info_msg_0_}%f'
# 3秒以上かかった処理は詳細表示
REPORTTIME=3
# 環境変数っをその場で編集
# vard PROMPT
# Manとかに色付け
man() {
LESS_TERMCAP_md=$'\e[01;31m' \
LESS_TERMCAP_me=$'\e[0m' \
LESS_TERMCAP_us=$'\e[01;32m' \
LESS_TERMCAP_ue=$'\e[0m' \
LESS_TERMCAP_so=$'\e[45;93m' \
LESS_TERMCAP_se=$'\e[0m' \
command man "$@"
}
# LESSオプション定義
LESS="--follow-name MRiP ?n?f%f .?m(file %i of %m) ..?e(END) ?x- Next\: %x..%t"
# vim,lessを標準にする
PAGER=`which less`
EDITOR=`which vim`
# Alias
alias ll='ls -lFhG'
alias lla='ls -lFhGa'
alias vi=vim
alias grep='grep --color=auto'
# 日本語の入ったhistoryを編集する
# http://kawabata.github.io/blog/2013-03-17-zsh-history.html
# https://poor-user.blogspot.com/2017/06/zsh-zsh-hitory-convert-to-utf-8.html
# https://gist.github.com/xkikeg/4162343/3ed7dfc1147b56931c4910cab0da47076b435d0d
# zshhist.py export > ~/.zsh_history.new
# vi ~/.zsh_history.new
# zshhist.py import < hist > ~/.zsh_history
# rm ~/.zsh_history.new
# いつも検索引っかからないオフィシャルmanページ
# http://zsh.sourceforge.net/Doc/Release/zsh_toc.html
#
# zsh glob qualifier zsh Expansion
# http://zsh.sourceforge.net/Doc/Release/Expansion.html
# わかんなかったらここ読め全部あるから
# http://www.strcat.de/zsh/
# ローカル設定をコンパイル&読み込み
if [ -f ~/.zsh_${USER}.zsh ]; then
if [ ! -f ~/.zsh_${USER}.zwc -o ~/.zsh_${USER}.zsh -nt ~/.zsh_${USER}.zwc ]; then
zcompile ~/.zsh_${USER}.zsh
fi
source ~/.zsh_${USER}.zsh
fi
.zsh_kota.zsh こいつはサーバーにはコピーしない
# vim: set ff=unix tabstop=4 shiftwidth=0 softtabstop=-1 noexpandtab fileencoding=utf-8 fileformat=unix filetype=zsh :#
# https://gist.github.com/kotashiratsuka/89fad9fd3edd2bec96a78dbc71c8d99b
# /usr/local/binを優先
PATH=/usr/local/bin:$PATH
# ${HOME}/binをパスに追加
PATH=${PATH}:~/bin
# MacPorsのvimを優先
EDITOR=`which vim`
# only mac
if [ "`uname`" = 'Darwin' ]; then
#MacPorts
PATH=/opt/local/bin:/opt/local/sbin:$PATH
#Vagrant
VAGRANT_DEFAULT_PROVIDER=vmware_fusion
#lesspipe.sh
LESSOPEN="`which lesspipe.sh` %s"
fi
# ProjectDirに移動して新しくshell&source
function p {
(
PROJ_DIR=$HOME/Git
cd $PROJ_DIR
if [ $1 ]; then
cd $PROJ_DIR/$1
else
cd `fd . -d 1 | fzf --height 40% --layout reverse-list --info inline --border --query "${1}"`
fi
PROJ_ROOT=`pwd`
exec $SHELL
)
}
# p コマンドでサブシェル、プロジェクト変数読み込み
if [ -f .git/hooks/project.sh ]; then
source .git/hooks/project.sh
fi
# iTerm2
if [[ -e ~/.iterm2_shell_integration.zsh ]]; then
source ~/.iterm2_shell_integration.zsh
fi
# Tmuxが起動されてなかったら起動する
if [[ -z $TMUX_PANE && $SSH_AUTH_SOCK && $SSH_CONNECTION ]] ;then
ID="$( tmux ls | grep -vm1 attached | cut -d: -f1 )"
if [[ -z $ID ]] ;then
tmux new-session
else
tmux attach-session -t "$ID"
fi
fi
# 自分の端末とリモートを区別しやすくする
# if [[ -z $TMUX_PANE ]] ;then
# #prompt fade magenta
# PROMPT=$'%F{magenta}%B%K{magenta}█▓▒░%F{white}%K{magenta}%B%n@%m%b%F{magenta}%K{black}█▓▒░%F{white}%K{black}%B \n%{\C-M%}%F{magenta}%K{black}%B%~/%b%k%f %# '
# else
# #prompt fade green
# PROMPT=$'%F{green}%B%K{green}█▓▒░%F{white}%K{green}%B%n@%m%b%F{green}%K{black}█▓▒░%F{white}%K{black}%B \n%{\C-M%}%F{green}%K{black}%B%~/%b%k%f %# '
# fi
# eDEX-UI ならカラー無効
# if [[ $TERM_PROGRAM == 'eDEX-UI' ]]; then
# TERM=vt220
# fi
# LSD
if $(type lsd >> /dev/null 2>&1); then
alias ll='lsd -l'
alias lla='lsd -la'
fi
# fzf
if [[ -f ~/.fzf.zsh ]]; then
source ~/.fzf.zsh
if $(ls --color=always >> /dev/null 2>&1); then
lscmd="ls -lFhG --color=always"
else
lscmd="CLICOLOR_FORCE=1 ls -lFhG"
fi
if [[ $REPORTTIME ]]; then
prefix="unset REPORTTIME && "
fi
if $(type bat >> /dev/null 2>&1); then
FZF_CTRL_T_OPTS="--preview '[[ \$(file --mime {}) =~ directory ]] && $lscmd {} || bat --color=always --style=header,grid --line-range :100 {}'"
else
FZF_CTRL_T_OPTS="--preview '[[ \$(file --mime {}) =~ directory ]] && $lscmd {} || head -100 {} 2> /dev/null || $lscmd {}'"
fi
FZF_DEFAULT_COMMAND="${prefix}fd -H -E .git"
FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
FZF_ALT_C_COMMAND="${prefix}fd --type d -H -E .git"
FZF_ALT_C_OPTS="--preview '$lscmd {}'"
bindkey '^[r' fzf-history-widget
bindkey '^R' history-incremental-pattern-search-backward
fi
# https://www.bigeekfan.com/post/20200705_z_in_zsh_with_cdr/
function z () {
local lines=$(cdr -l | grep --ignore-case "${1}")
if [ -z "$lines" ]; then
return 1
elif [ $(wc -l <<< "$lines") -eq 1 ]; then
cdr "${lines%% *}"
else
local selected_dir=$(cdr -l | fzf --height 40% --layout reverse-list --info inline --border --query "${1}")
if [ -n "$selected_dir" ]; then
cdr "${selected_dir%% *}"
fi
fi
}
# promptline
if [[ -e ~/.promptline.sh ]]; then
source ~/.promptline.sh
fi
# GnuPG
if [[ ! $GPG_TTY ]]; then
GPG_TTY=$(tty)
fi
# SSH Sockをtmux越しに動的に使う
if [[ "$SSH_AUTH_SOCK" && "$SSH_CONNECTION" ]]; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi