Skip to content

Instantly share code, notes, and snippets.

@sluchin
Last active September 29, 2022 02:24
Show Gist options
  • Save sluchin/b4aa98dfa15a3edfa4acb6f60448d806 to your computer and use it in GitHub Desktop.
Save sluchin/b4aa98dfa15a3edfa4acb6f60448d806 to your computer and use it in GitHub Desktop.
# .zshrc
[[ -f $HOME/.zshenv ]] && source $HOME/.zshenv
stty stop undef
bindkey -e
# autoload
autoload -Uz run-help
autoload -Uz zmv
autoload -Uz select-word-style
select-word-style default
## コマンド履歴関連
HISTFILE=~/.zhistory
HISTTIMEFORMAT='%F %T '
HISTSIZE=100000
SAVEHIST=100000
#HISTCONTROL=ignoredups:ignorespace
#HISTIGNORE=ls:pwd
export HISTFILE HISTTIMEFORMAT HISTSIZE SAVEHIST
export HISTCONTROL HISTIGNORE
fc -R $HISTFILE
setopt auto_cd
setopt auto_pushd
setopt pushd_ignore_dups
setopt extended_history # timestamp を含めた形式の履歴の形式にする
setopt hist_expire_dups_first # 履歴上限に達したら重複排除を実施する
setopt hist_find_no_dups # line editor モードで重複した履歴の表示を行わない
#setopt hist_ignore_all_dups # 全ての重複を排除する
setopt hist_ignore_dups # 直前と被る重複を排除する
setopt hist_ignore_space # 先頭スペースの場合は履歴に含めない
setopt hist_save_no_dups # 履歴ファイルに書き込む際,新しいものと重複する古いコマンドを削除する
setopt hist_verify # 履歴を参照したコマンドを直接実行しない
setopt share_history # コマンドが(履歴から)読み込まれると同時に履歴ファイルに書き込みを行う
setopt hist_no_store # history コマンドは履歴に含めない
setopt hist_reduce_blanks # 余分なスペースを削除する
setopt hist_lex_words # 空白の取扱を通常のシェルと同様にする
setopt inc_append_history # すぐにヒストリファイルに追記する
## プロンプト関連
autoload -Uz colors
colors
# git-prompt
[[ -f $HOME/.zsh.d/git-prompt.sh ]] && source $HOME/.zsh.d/git-prompt.sh
# プロンプトのオプション表示設定
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto
# プロンプトの表示設定
setopt prompt_subst
#TMOUT=1
#TRAPALRM() {zle reset-prompt}
PROMPT='%F{yellow}%n@%m%f: %F{yellow}%~%f %F{red}%f
\$ '
RPROMPT='%F{cyan}$(__git_ps1 "[%s]")%f%F{white} %*%f (%(?:%{$fg_bold[green]%}%?:%{$fg_bold[red]%}%?)%{${reset_color}%})'
## 補完機能
zstyle ':completion:*:*:git:*' script ~/.git-completion.bash
# `compinit` scans $fpath, so do this before calling it.
fpath=(~/.zsh.d/functions $fpath)
autoload -Uz compinit && compinit
autoload -U colors && colors
export LSCOLORS=exfxcxdxbxegedabagacad
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'
zstyle ':completion:*' list-colors "${LS_COLORS}"
alias ls="ls -F --color=auto"
# 単語の入力途中でもTab補完を有効化
setopt complete_in_word
# 補完候補をハイライト
zstyle ':completion:*:default' menu select=1
# キャッシュの利用による補完の高速化
zstyle ':completion::complete:*' use-cache true
# 大文字、小文字を区別せず補完する
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# 補完リストの表示間隔を狭くする
setopt list_packed
# コマンドの打ち間違いを指摘してくれる
setopt correct
SPROMPT="correct: $RED%R$DEFAULT -> $GREEN%r$DEFAULT ? [Yes/No/Abort/Edit] => "
## ディレクトリ移動関連
# cdr
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
if type peco >/dev/null 2>&1; then
function peco-buffer()
{
BUFFER=$(eval ${BUFFER} | peco)
CURSOR=0
}
zle -N peco-buffer
bindkey '^p' peco-buffer
function peco-history()
{
local tac
if type tac > /dev/null 2>&1; then
tac="tac"
else
tac="tail -r"
fi
BUFFER=$(\history -n 1 | egrep -v "^cd" | eval $tac | \
peco --prompt="history >" --query "$LBUFFER")
CURSOR=$#BUFFER
zle clear-screen
}
zle -N peco-history
bindkey '^r' peco-history
function peco-cdr ()
{
local dir=$(cdr -l | sed 's/^[0-9]\+ \+//' | \
peco --prompt="cdr >" --query "$LBUFFER")
if [ -n "$dir" ]; then
BUFFER="cd ${dir}"
zle accept-line
fi
}
zle -N peco-cdr
bindkey '^s' peco-cdr
MAXDEPTH=""
function peco-path()
{
if [[ -n $RBUFFER ]]; then
(( CURSOR++ ))
return 0;
fi
local filepath=$(find . -maxdepth ${MAXDEPTH:-5} | \
grep -v '/\.' | peco --prompt 'path >' --query "$LBUFFER")
if [ -n "$filepath" ]; then
if [ -d "$filepath" ]; then
BUFFER+="cd '$filepath'"
elif [ -f "$filepath" ]; then
BUFFER="emacsclient '$filepath'"
fi
zle accept-line
else
return 1
fi
CURSOR=$#BUFFER
}
zle -N peco-path
bindkey '^f' peco-path
function peco-kill()
{
local pid=$(ps aux --sort=-pid | peco --prompt 'kill >' | awk '{ print $2 }')
if [ ${#pid} -ne 0 ]; then
kill "$@" $pid
echo "kill $@ ${pid}"
fi
}
zle -N peco-kill
alias pk="peco-kill"
alias pkill="peco-kill"
function peco-grep() {
res=$(grep --color=never "$@" | \
peco --prompt 'grep >' | \
awk -F: '{ print $2" "$1 }')
if [ ${#res} -ne 0 ]; then
local file=$(echo $res | awk -F" " '{ print $2 }')
local nu=$(echo $res | awk -F" " '{ print $1 }')
emacsclient +${nu:=0} ${file}
echo "emacsclient +${nu} ${file}"
fi
}
zle -N peco-grep
alias pg="peco-grep"
alias pgrep="peco-grep"
fi
## shell options
setopt auto_cd # ディレクトリ名の入力のみで移動する
setopt auto_remove_slash # スラッシュの削除
setopt auto_pushd # cd -[TAB] でこれまでに移動したディレクトリ一覧を表示
setopt auto_name_dirs # 代入直後から名前付きディレクトリにする
setopt auto_menu # 補完キー連打で補完候補を順に表示する
setopt cdable_vars # チルダ省略
setopt pushd_to_home # 引数なし pushd で $HOME に戻る(直前 dir へは cd - で)
setopt pushd_ignore_dups # ディレクトリスタックに重複する物は古い方を削除
setopt list_packed # 補完候補リストを詰めて表示
setopt list_types # 補完候補にファイルの種類も表示する
setopt print_eight_bit # 補完候補リストの日本語を適正表示
setopt no_clobber # 上書きリダイレクトの禁止
setopt no_hup # logout 時にバックグラウンドジョブを kill しない
setopt no_beep # コマンド入力エラーで BEEP を鳴らさない
setopt glob_complete # glob を展開しないで候補の一覧から補完する
setopt extended_glob # 拡張グロブ
setopt numeric_glob_sort # 数字を数値と解釈して昇順ソートで出力
setopt prompt_subst # PROMPT 変数を変数展開
setopt interactive_comments # コマンド入力中のコメントを認める
setopt always_last_prompt # 元のプロンプロに留まる
setopt complete_aliases # エイリアスには別の補完規則を適用する
setopt notify # バックグラウンドジョブの状態変化を即時報告する
setopt globdots # 明確なドットの指定なしで.から始まるファイルをマッチ
setopt check_jobs # ジョブが残っているとき警告を出す
setopt auto_param_keys # カッコの対応などを自動的に補完
setopt complete_in_word # 語の途中でもカーソル位置で補完
setopt long_list_jobs # jobs でプロセスID も出力する
setopt magic_equal_subst # = 以降も補完する(--prefix=/usr など)
unsetopt auto_param_keys # 変数名の後ろに空白を挿入
unsetopt auto_param_slash # ディレクトリの後ろスラッシュを挿入
unsetopt sh_word_split # クオートしていない変数を単語分割する
## alias
alias vi="vim -u $HOME/.vimrc"
@sluchin
Copy link
Author

sluchin commented Sep 29, 2022

Updated

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment