LoginSignup
11
10

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