私はvimユーザーですが、最近zshで遊んで、シェルでviモードを使用できるようにしました(挿入/コマンドモードインジケーターがないため、bashでは実用的ではありません)。いくつかの例を読んだ後、それに応じて行を更新するために次の関数を設定しました(私も使用しているvim-powerlineに一致するように配色を選択しました):
vim_ins_mode="%{$fg[white]%}%{$fg_bold[blue]$bg[white]%} INSERT %{$reset_color%}"
vim_cmd_mode="%{$fg[green]%}%{$fg_bold[black]$bg[green]%} COMMAND %{$reset_color%}"
vim_mode=$vim_ins_mode
function zle-line-init zle-keymap-select {
RPS1="${${KEYMAP/vicmd/${vim_cmd_mode}}/(main|viins)/${vim_ins_mode}}"
RPS2=$RPS1
zle reset-prompt
}
zle -N zle-line-init
zle -N zle-keymap-select
より多くのコマンドを実行すると、前のコマンドのRPS1が画面に出力されることを除いて、これはうまく機能します。ご想像のとおり、端末全体に複数の明るいボックスがあると、かなり気が散ることがあります。
前のコマンドとしてラインバッファにダンプされる前に、このフィールドをなんとかしてクリアしたいと思っていますが、これまでのところ、私が見た例もzshテーマもこれを行うのに苦労していません。古い.bashrcファイルでは、出力の色が影響を受けないようにコマンドの色をリセットするトラップを設定していましたが、ここで同様のことが可能かどうか疑問に思っています。それとも、zshを使ったよりクリーンな方法がありますか?