Newer
Older
myenv / zshrc / .zshrc
# ~/binをPATHに追加する
#PATH=~/bin:$PATH
#export PATH

# alias
#alias ls='ls -F --color=auto'
alias ls='ls -FG'
#alias ll='ls -la --color=auto'
alias ll='ls -laG'
#alias la='ls -a --color=auto'
alias la='ls -aG'
alias eng='LANG=C LANGUAGE=C LC_ALL=C'
alias tree='tree -NC'
# source-hightlight
function lessh() { src-hilite-lesspipe.sh $1 | less -R }

# user file-creation mask
umask 022

## キーバインド
# Emacs風キーバインド
#bindkey -e
# Vi風キーバインド
bindkey -v

## プロンプト
local C_ROOT="%{%}"    # 31: red
local C_LOCAL="%{%}"   # 36: cyan
local C_REMOTE="%{%}"  # 35: magenta
local C_RESET="%{%}"
case ${UID} in
0)
	PROMPT="${C_ROOT}%n@%m(%h%)${C_RESET}# "
	PROMPT2="%_> "
	RPROMPT="[%~]"
	SPROMPT="%r is correct? [n,y,a,e]: "
	[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
	PROMPT="${C_ROOT}%n@%B%m%b(%h%)${C_RESET}# "
	;;
*)
	PROMPT="${C_LOCAL}%n(%h%)${C_RESET}%% " 
	PROMPT2="%_> "
	RPROMPT="[%~]"
	SPROMPT="%r is correct? [n,y,a,e]: "
	[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
	PROMPT="${C_REMOTE}%n@%B%m%b(%h%)${C_RESET}%% "
	;;
esac
# コマンド実行後は右プロンプトを消す
setopt transient_rprompt

## タイトルバーに各種情報を表示
case "${TERM}" in
kterm*|xterm)
	precmd() {
	    echo -ne "\033]0;${LOGNAME}@${HOST%%.*}:${PWD}\007"
	}
	;;
esac 

## 補完
autoload -U compinit
compinit
# ディレクトリ名を入力するだけで移動
#setopt auto_cd 
# 自動でpushd
setopt auto_pushd
# 重複するディレクトリはpushdしない
setopt pushd_ignore_dups
# 存在しないコマンド入力時に修正を提案
setopt correct
# 補完候補リストを詰めて表示
setopt list_packed 
# 補完候補リスト表示時にビープ音を鳴らさない
setopt nolistbeep 

## 履歴
# 履歴ファイル
HISTFILE=~/.zsh_history
# メモリに保存する履歴の数
HISTSIZE=100000
# ファイルに保存する履歴の数
SAVEHIST=100000
# 同じコマンドを保存対象外とする
setopt hist_ignore_dups
# 複数のシェル間で履歴を共有する
setopt share_history
# historyコマンド自体は履歴に追加しない
setopt hist_no_store
# 余分な空白を除去して履歴に追加する
setopt hist_reduce_blanks
# スペースではじめたコマンドは履歴に追加しない
#setopt hist_ignore_space
# 直前と同じコマンドはヒストリに追加しない
setopt hist_ignore_dups

# 履歴検索機能
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 

## Zshの挙動
# パスの最後に付けたスラッシュを勝手に除去させない
setopt noautoremoveslash
# aliasの場合もaliasを展開して補完対象を探したりする
setopt complete_aliases

# ~/.zshrc.localが存在すれば読み込む
[ -f ~/.zshrc.local ] && source ~/.zshrc.local

#function zle-line-init zle-keymap-select {
#    VIM_NORMAL="%K{208}%F{black}⮀%k%f%K{208}%F{white} % NORMAL %k%f%K{black}%F{208}⮀%k%f"
#    VIM_INSERT="%K{075}%F{black}⮀%k%f%K{075}%F{white} % INSERT %k%f%K{black}%F{075}⮀%k%f"
#    RPS1="${${KEYMAP/vicmd/$VIM_NORMAL}/(main|viins)/$VIM_INSERT}"
#    RPS2=$RPS1
#    zle reset-prompt
#}
#zle -N zle-line-init
#zle -N zle-keymap-select

function zle-line-init zle-keymap-select {
  vimode="${${KEYMAP/vicmd/NORMAL}/(main|viins)/INSERT}"
 
	# update status line
	if [ -n "$TMUX" ]; then
		# tmux
		if [ $vimode = "NORMAL" ]; then
			statbg="colour236"
			statfg="colour247"
			statl1bg="colour240"
			statl1fg="colour231"
			statl2bg="colour148"
			statl2fg="colour22"
			statr1bg="colour240"
			statr1fg="colour247"
			statr2bg="colour252"
			statr2fg="colour236"
		else
			statbg="colour24"
			statfg="colour117"
			statl1bg="colour31"
			statl1fg="colour231"
			statl2bg="colour231"
			statl2fg="colour23"
			statr1bg="colour31"
			statr1fg="colour117"
			statr2bg="colour117"
			statr2fg="colour23"
		fi
		tmux set -g status-bg ${statbg} > /dev/null
		tmux set -g status-fg ${statfg} > /dev/null
		statl1="#[bg=${statl1bg}, fg=${statl1fg}] #H "
		statl1a="#[bg=${statbg}, fg=${statl1bg}]⮀"
		statl2="#[bg=${statl2bg}, fg=${statl2fg}] $vimode "
		statl2a="#[bg=${statl1bg}, fg=${statl2bg}]⮀"
		tmux set -g status-left "${statl2}${statl2a}${statl1}${statl1a}" > /dev/null
		statr1="#[bg=${statr1bg}, fg=${statr1fg}] #($HOME/.battery) "
		statr1a="#[bg=${statbg}, fg=${statr1bg}]⮂"
		statr2="#[bg=${statr2bg}, fg=${statr2fg}] %Y-%m-%d(%a) %H:%M "
		statr2a="#[bg=${statr1bg}, fg=${statr2bg}]⮂"
		tmux set -g status-right "${statr1a}${statr1}${statr2a}${statr2}" > /dev/null
	else
		# zsh
		showmode $vimode
	fi
}
if [ "$TMUX" != "" ]; then	
	zle -N zle-line-init
	zle -N zle-keymap-select
fi

function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
	tac="tail -r"
    fi
    # peco --query $LBUFFER 直前の文字列を初期値にし検索する
    # awk '!a[$0]++' 連想配列を利用し重複を高速に削除する
    # awk は一行づつ処理を行う ($0 はその行全体)
    BUFFER=$(history -n 1 | eval $tac | awk '!a[$0]++' | peco --prompt '(*´⊿`)⊃' --query "$LBUFFER")
    # カーソルを行末に移動する
    # 変数名の前に # を付けることで変数の文字数をカウントする
    CURSOR=$#BUFFER
    #zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

function ls-peco() {
    FILTERD_LS=$(ls | peco)
    BUFFER=${BUFFER}${FILTERD_LS}
    CURSOR=$#BUFFER
}

function peco-process-kill() {
    for pid in `ps aux | peco --prompt 'KILL!>' | awk '{print $2}'`
    do
	    kill $pid
	    echo "Killed ${pid}"
    done
}
alias kill-peco="peco-process-kill"