vi-modeをoh-my-zshで使用しますaf-magictheme。
カーソルのスタイルで、自分が通常モード(ブロック)であるか挿入モード(ビーム)であるかをzsh
とvim
。
これは私がこれまでに持っているものです:
私の~/.zshrc
:
# vim mode config
# ---------------
# Activate vim mode.
bindkey -v
# Remove mode switching delay.
KEYTIMEOUT=5
# Change cursor shape for different vi modes.
function zle-keymap-select {
if [[ ${KEYMAP} == vicmd ]] ||
[[ $1 = 'block' ]]; then
echo -ne '\e[1 q'
Elif [[ ${KEYMAP} == main ]] ||
[[ ${KEYMAP} == viins ]] ||
[[ ${KEYMAP} = '' ]] ||
[[ $1 = 'beam' ]]; then
echo -ne '\e[5 q'
fi
}
zle -N zle-keymap-select
# Use beam shape cursor on startup.
echo -ne '\e[5 q'
# Use beam shape cursor for each new Prompt.
preexec() {
echo -ne '\e[5 q'
}
見つかりました ここ 。
vim
では、Vundleおよびterminusを使用します=。
これらの構成では、zsh
とvim
の両方が独立して考慮されたときに正常に機能します。ただし、vim
からzsh
を挿入モードで入力すると、vim
は通常モードで始まります(必要に応じて) )がビーム形状カーソルを表示します。同様に、vim
を終了すると、挿入モードでzsh
に戻りますが、カーソルはまだブロック形状です(vim
はnormal)でした。
この後、初めてモードを切り替えたとき(zsh
とvim
の両方で)、カーソルは再び本来の動作をします。
vim
に出入りした後に、正しいカーソルを表示するにはどうすればよいですか?
置いてみた
autocmd VimEnter * stopinsert
autocmd VimLeave * startinsert
私の~.vimrc
、ただしこれはカーソルには影響しません。
precmd()
の代わりにpreexec()
を使用する方が良いと思います:
# .zshrc
_fix_cursor() {
echo -ne '\e[5 q'
}
precmd_functions+=(_fix_cursor)
こちらです:
.vimrc
echo -ne '\e[5 q'
に.zshrc
を2回書き込む必要はありません。私は解決策を見つけました:
これを~/.vimrc
:
autocmd VimEnter * silent exec "! echo -ne '\e[1 q'"
autocmd VimLeave * silent exec "! echo -ne '\e[5 q'"
zle-line-init()
を使用することもできます
_zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne "\e[5 q"
}
_
この問題はprecmd()
またはpreexec()
ではなく、これを使用して解決する方が良いと思います。どちらもプロンプトを修正するのではなく、コマンドを実行するために使用されるためです。