ZSH+gnome-terminal および VI 入力モード: ibeam またはブロック カーソルを表示する

ZSH+gnome-terminal および VI 入力モード: ibeam またはブロック カーソルを表示する

さまざまな方法があるZSH で VI キー バインディングを使用しているときに、挿入モードか通常モードかを表示します。

Gnome-terminalもキャレットを変更できるを呼び出してブロックからibeam に変換します。|gconftool-2

これら 2 つを組み合わせて、挿入モードの ibeam と通常モードのブロックを作成するにはどうすればよいでしょうか?

答え1

質問に両方の答えを記載する[12] これらを合わせると、次のようになります。

function zle-line-init zle-keymap-select {
    if [[ $KEYMAP == vicmd ]]; then
       gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block
    elif [[ $KEYMAP == (main|viins) ]]; then
       gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam
    fi
}
zle -N zle-line-init
zle -N zle-keymap-select

違いは、プロンプトを変更するのではなく、句$KEYMAPを使用してパラメータを直接チェックしif..fi、コマンドを実行することです。gconftool-2

答え2

gnome-terminal の最新バージョンでは、次のエスケープ シーケンスを使用してカーソルを変更できます。

  • \e[0 qまたは\e[ q: プロファイル設定で定義されたものにリセットします
  • \e[1 q: 点滅ブロック
  • \e[2 q: 安定したブロック
  • \e[3 q: 点滅する下線
  • \e[4 q: 下線が引かれています
  • \e[5 q: 点滅するIビーム
  • \e[6 q: 安定したIビーム

これらは、例えば次のようにして印刷できますecho -ne '\e[5 q'。mpy の回答に示されているように、これらを zsh 構成に接続します。

関連情報