11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zshのbindkeyとprompt

Last updated at Posted at 2014-04-26

bindkey

emacsとvi

bindkey -s

キーバインドには一括した設定が用意されています。切り替えは、以下の様なキーを設定すると分かりやすいです。

~/.zshrc
bindkey -sv '^e' 'bindkey -e\n'
 
bindkey -se '^v' 'bindkey -v\n'

bindkey -e,v

個人的には以下のように設定しています。

~/.zshrc
function airchrome-bindmode-emacs () {
bindkey -e
}
zle -N airchrome-bindmode-emacs
bindkey -v '^e' airchrome-bindmode-emacs
bindkey -a '^e' airchrome-bindmode-emacs
 
function airchrome-bindmode-vi () {
bindkey -v
}
zle -N airchrome-bindmode-vi
bindkey -e '^v' airchrome-bindmode-vi
 
bindkey -v

prompt

bindkey_mode

しかし、上記では現在どのキーバインドを使用しているのか分かりにくいです。よって、以下のようにプロンプトに表示すると分かりやすいです。

~/.zshrc
# prompt-bindkey_mode
# http://mba-hack.blogspot.jp/2014/04/zsh.html
function airchrome-bindmode-emacs () {
bindkey -e
EMACS_INSERT=`bindkey -lL main | cut -d ' ' -f 3`
if echo $EMACS_INSERT | grep emacs > /dev/null 2>&1;then
EMACS_INSERT="%K{black}%F{011}⮂%k%f%K{011}%F{034} % $EMACS_INSERT %k%f"
VIM_NORMAL="%K{011}%F{125}⮂%k%f%K{125}%F{015} % NORMAL %k%f%K{125}%F{black}⮂%k%f"
VIM_INSERT="%K{011}%F{075}⮂%k%f%K{075}%F{026} % INSERT %k%f%K{075}%F{black}⮂%k%f"
else
EMACS_INSERT="%K{black}%F{034}⮂%k%f%K{034}%F{011} % $EMACS_INSERT %k%f"
VIM_NORMAL="%K{034}%F{125}⮂%k%f%K{125}%F{015} % NORMAL %k%f%K{125}%F{black}⮂%k%f"
VIM_INSERT="%K{034}%F{075}⮂%k%f%K{075}%F{026} % INSERT %k%f%K{075}%F{black}⮂%k%f"
fi
RPS1="$EMACS_INSERT${${KEYMAP/vicmd/$VIM_NORMAL}/(main|viins)/$VIM_INSERT}"
RPS2=$RPS1
zle reset-prompt
}
zle -N airchrome-bindmode-emacs
bindkey -v '^e' airchrome-bindmode-emacs
bindkey -a '^e' airchrome-bindmode-emacs
 
function airchrome-bindmode-vi () {
bindkey -v
EMACS_INSERT=`bindkey -lL main | cut -d ' ' -f 3`
if echo $EMACS_INSERT | grep emacs > /dev/null 2>&1;then
EMACS_INSERT="%K{black}%F{011}⮂%k%f%K{011}%F{034} % $EMACS_INSERT %k%f"
VIM_NORMAL="%K{011}%F{125}⮂%k%f%K{125}%F{015} % NORMAL %k%f%K{125}%F{black}⮂%k%f"
VIM_INSERT="%K{011}%F{075}⮂%k%f%K{075}%F{026} % INSERT %k%f%K{075}%F{black}⮂%k%f"
else
EMACS_INSERT="%K{black}%F{034}⮂%k%f%K{034}%F{011} % $EMACS_INSERT %k%f"
VIM_NORMAL="%K{034}%F{125}⮂%k%f%K{125}%F{015} % NORMAL %k%f%K{125}%F{black}⮂%k%f"
VIM_INSERT="%K{034}%F{075}⮂%k%f%K{075}%F{026} % INSERT %k%f%K{075}%F{black}⮂%k%f"
fi
RPS1="$EMACS_INSERT${${KEYMAP/vicmd/$VIM_NORMAL}/(main|viins)/$VIM_INSERT}"
RPS2=$RPS1
zle reset-prompt
}
zle -N airchrome-bindmode-vi
bindkey -e '^v' airchrome-bindmode-vi
 
bindkey -v

bindkey -lL main | cut -d ' ' -f 3で現在のキーバインドを取得してます。

最終行のbindkey -vはデフォルト設定です。-aはviのノーマルモードです。

show_buffer_stack

zshのコマンドラインスタックをプロンプトに表示させる

コマンドラインスタックをプロンプトに表示することもできます。

~/.zshrc
# prompt-show_buffer_stack
# https://gist.github.com/yukirin/7067299
# bindkey "^Q" show_buffer_stack
local p_buffer_stack=""
local -a buffer_stack_arr
 
function make_p_buffer_stack()
{
	if [[ ! $#buffer_stack_arr > 0 ]]; then
		p_buffer_stack=""
		return
	fi
	p_buffer_stack="%F{cyan}<stack:$buffer_stack_arr>%f"
}
 
function show_buffer_stack()
{
	local cmd_str_len=$#LBUFFER
	[[ cmd_str_len > 10 ]] && cmd_str_len=10
	buffer_stack_arr=("[$LBUFFER[1,${cmd_str_len}]]" $buffer_stack_arr)
	make_p_buffer_stack
	zle push-line-or-edit
	zle reset-prompt
}
 
function check_buffer_stack()
{
	[[ $#buffer_stack_arr > 0 ]] && shift buffer_stack_arr
	make_p_buffer_stack
}
 
zle -N show_buffer_stack
bindkey "^Q" show_buffer_stack
add-zsh-hook precmd check_buffer_stack
 
RPROMPT='${p_buffer_stack}'

branch

記号なども使えます。この辺りは、vim-powerlineで使われてるものが参考になりますね。

~/.zshrc
zstyle ':vcs_info:git:*' stagedstr "⇊"
zstyle ':vcs_info:git:*' unstagedstr "⭠"

話は変わりますが、最近、vimのステータスラインをvim-airlineに変更してみました。

~/.vimrc
let g:airline_theme             = 'powerlineish'
let g:airline_enable_branch     = 1
let g:airline_enable_syntastic  = 1
 
" vim-powerline symbols
let g:airline_left_sep          = '⮀'
let g:airline_left_alt_sep      = '⮁'
let g:airline_right_sep         = '⮂'
let g:airline_right_alt_sep     = '⮃'
let g:airline_branch_prefix     = '⭠'
let g:airline_readonly_symbol   = '⭤'
let g:airline_linecolumn_prefix = '⭡'
let g:airline#extensions#tabline#enabled = 1

お勧めのキーバインドがあれば、是非、教えて下さい。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?