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.htmlfunction airchrome-bindmode-emacs (){
bindkey -e
EMACS_INSERT=`bindkey -lL main | cut -d ' ' -f 3`if echo$EMACS_INSERT| grep emacs > /dev/null 2>&1;thenEMACS_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"elseEMACS_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"fiRPS1="$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;thenEMACS_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"elseEMACS_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"fiRPS1="$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
コマンドラインスタックをプロンプトに表示することもできます。
~/.zshrc
# prompt-show_buffer_stack# https://gist.github.com/yukirin/7067299#bindkey "^Q" show_buffer_stacklocal p_buffer_stack=""local -a buffer_stack_arr
function make_p_buffer_stack(){if[[ ! $#buffer_stack_arr> 0 ]];thenp_buffer_stack=""return fip_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
お勧めのキーバインドがあれば、是非、教えて下さい。