私は使うviモード存在するああ、そしてAF - マジック トピック。
現在位置にあるかカーソルスタイルで表示したい。ノーマルモード(ブロック)または挿入モード(量)、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'
}
発見するここ。
これらの設定を使用すると、独立して考慮すると両方がうまく機能しますzsh
。vim
しかし、私がinvim
から入るときzsh
挿入モード、vim
で始まるノーマルモード(そうする必要がありますが)ビーム形状のカーソルはまだ表示されます。同様に終了するとvim
再び入りますzsh
。挿入モードしかし、カーソルはまだブロックにあります(最後のvim
モードノーマル)。
その後、初めてモードを切り替えると(inとout zsh
)、vim
カーソルは再び正常に動作します。
入った後でもvim
正しいカーソルを表示するにはどうすればよいですか?
入れてみよう
autocmd VimEnter * stopinsert
autocmd VimLeave * startinsert
my では~.vimrc
カーソルには影響しません。
答え1
precmd()
代わりに使用する方が良いと思いますpreexec()
。
# .zshrc
_fix_cursor() {
echo -ne '\e[5 q'
}
precmd_functions+=(_fix_cursor)
この方法:
- 君は変える必要はない
.vimrc
- コマンドを実行せずに新しいプロンプトを生成しても、カーソルは固定されます。
- あなたはあなた
echo -ne '\e[5 q'
の.zshrc
。
答え2
これは私にとって効果的です。ここから持ってきました。https://gist.github.com/LukeSmithxyz/e62f26e55ea8b0ed41a65912fbebbe52
# vi mode
bindkey -v
export KEYTIMEOUT=1
# 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
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"
}
zle -N zle-line-init
echo -ne '\e[5 q' # Use beam shape cursor on startup.
preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
\e[5 q
次のように、数字を順番に変更することで(ビームは5、ブロックは1)、目的のカーソルタイプ(点滅、|、長方形、または_)をカスタマイズできます。
Set cursor style (DECSCUSR), VT520.
0 ⇒ blinking block.
1 ⇒ blinking block (default).
2 ⇒ steady block.
3 ⇒ blinking underline.
4 ⇒ steady underline.
5 ⇒ blinking bar, xterm.
6 ⇒ steady bar, xterm.
答え3
答え4
また、使用することができます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()
プロンプトを変更するのではなく、コマンドを実行するために使用されるため、問題はよりよく解決されると思います。