web-dev-qa-db-ja.com

BashのViコマンドライン編集でコマンドモードと挿入モードを区別する方法

Viモードのbashが挿入モードに切り替えられたとき、使用モード(コマンドまたは編集)についてのヒントが得られないため、常に少し混乱しています。改造を区別する方法はありますか?カーソルの色の自動変更などでしょうか?

56
chuwy

/ etc/inputrc(または〜/ .inputrc)に次を追加します:

set show-mode-in-Prompt on

これにより、プロンプトの前に + 挿入モードのとき  bash 4.3のコマンドモード中

編集:最新バージョンのbash 4.4では、代わりにデフォルトで「(ins)」または「(cmd)」が前に付いたプロンプトが表示されます。ただし、次のように変更できます。

set vi-ins-mode-string "+"
set vi-cmd-mode-string ":"

また、 '\ e [1; 31m'のようなカラーコードを使用できますが、それらを '\ 1'および '\ 2'で囲んで、readlineを幸せに保つことができます。

set vi-cmd-mode-string "\1\e[1;31m\2:\1\e[0m\2"
46
Isaac Hanson

@Isaac Hansonの回答に基づいて、.inputrcでこれらを設定することにより、(VIMの場合と同様に)カーソルスタイルを設定してモードを反映できます。

set editing-mode vi
set show-mode-in-Prompt on
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2

# optionally:
# switch to block cursor before executing a command
set keymap vi-insert
RETURN: "\e\n"

これにより、挿入モードのビームカーソルまたは通常モードのブロックカーソルが表示されます。

その他のオプション(\e[の後の数字を置き換えます):

        Ps = 0  -> blinking block.
        Ps = 1  -> blinking block (default).
        Ps = 2  -> steady block.
        Ps = 3  -> blinking underline.
        Ps = 4  -> steady underline.
        Ps = 5  -> blinking bar (xterm).
        Ps = 6  -> steady bar (xterm).

端末がDECSCURSRをサポートしている必要があります(xterm、urxvt、iTerm2など)。 TMUXはこれらもサポートします(tmuxの外部でTERM=xterm-256colorを設定した場合)。

38
laktak

Korn Shellでviモードを何年も使用した後、基本的に、コマンドを入力する前にESCを数回タップし、ESC次にiをタップして入力を開始するように訓練しました。

基本的な前提は、ESCを押すだけで、どのモードにいるかが正確にわかるということです。

11
Clarkey