zshとvimのモードに応じてカーソルスタイルを変更する

zshとvimのモードに応じてカーソルスタイルを変更する

私は使う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'
    }

発見するここ

からvimウェンデルそして端末

これらの設定を使用すると、独立して考慮すると両方がうまく機能しますzshvimしかし、私が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

おすすめ記事