122

Bash で vi モード (set -o vi) を使用する場合、現在のモード (挿入またはコマンド) に応じたプロンプトが表示されると便利です。この編集モードをどのように見つけますか?

ところで、これはZSHで可能であるようです:

4

9 に答える 9

72

フレッシュな bash 4.3 と readline 6.3 には、皆さんのための何かがあります.. 変更ログから:

4.  New Features in Readline
j.  New user-settable variable, show-mode-in-prompt, adds a characters to the
    beginning of the prompt indicating the current editing mode.

だから置く

set show-mode-in-prompt on

/etc/inputrc または ~/.inputrc (thx stooj) に入力すると、すべての readline 対応プログラムに影響するはずです ;)

于 2013-06-17T09:33:45.563 に答える
19

googleを検索し、bashのマニュアルページを調べてからbashのソースコード(lib / readline / vi_mode.c)を調べた後、挿入モードからコマンドモードに移行するときにプロンプ​​トを簡単に変更する方法はないようです。ソースのモードを開始および停止する必要があるため、誰かがbashソースにパッチを適用する機会があるようです。

あなたの投稿を見て、bashviモードの設定に興味を持ちました。私はviが大好きで、コマンドラインを使用しないのはなぜですか。ただし、プロンプトを変更せずに挿入モードになっているかどうかを追跡する必要があるようです(多くのフォーラム投稿など)。ESCを押さない限り、常に挿入モードになっている価値があります。少し簡単になりますが、必ずしも直感的であるとは限りません。

私はこれがどこに行くのかを見たいので、あなたの質問を上げています。

于 2010-01-22T14:52:19.657 に答える
7

複数行プロンプトと.inputrc

Inputrc には、eMPee584 が書いたように を追加することで、+挿入:用および通常モード用の を表示するオプションがありますが、これは複数行のプロンプト (古いバージョンの bash および readline) ではうまく機能しません。set show-mode-in-prompt on~/.inputrc

解決策は、単一行PS1( >) と、プロンプトの前に何かをエコーする関数です。これは bash に組み込まれており、PROMPT_COMMAND.

function prompt {
    PS1=' > '
    echo -e "$(date +%R)  $PWD"
}

PROMPT_COMMAND='prompt' 

通常のプロンプト文字列は、printf のエコーでは使用できません。は-eカラーコードを解釈するためのものであり、\[またはを追加する必要\]はありませんが、とにかく機能しません。

挿入モード:

20:57   /home/sshbio/dotfiles/bash
+ > _

通常モード:

20:57   /home/sshbio/dotfiles/bash
: > _

tab を押すと、PS1 のみが繰り返されます。これは私にとって理にかなっています。

20:57   /home/sshbio/dotfiles/bash
+ > ls _
bashrc      bash_profile     inputrc
+ > ls _

プレビュー (ソース)

于 2016-01-31T20:19:40.987 に答える
6

異なるプロンプトとカーソル スタイル.inputrc

最初に、以下よりも新しいバージョンの bash を実行していることを確認する必要があります4.3

$ bash --version
GNU bash, version 4.4

次に、次の行を に追加します~/.inputrc

#################### VIM ####################
# FOR MORE INFORMATION CHECK:
# https://wiki.archlinux.org/index.php/Readline

# TURN ON VIM (E.G. FOR READLINE)
set editing-mode vi

# SHOW THE VIM MODE IN THE PROMPT (COMMAND OR INSERT)
set show-mode-in-prompt on

# SET THE MODE STRING AND CURSOR TO INDICATE THE VIM MODE
#   FOR THE NUMBER AFTER `\e[`:
#     0: blinking block
#     1: blinking block (default)
#     2: steady block
#     3: blinking underline
#     4: steady underline
#     5: blinking bar (xterm)
#     6: steady bar (xterm)
set vi-ins-mode-string (ins)\1\e[5 q\2
set vi-cmd-mode-string (cmd)\1\e[1 q\2

コマンド モードでは、カーソルはブロックとして表示されます。
挿入モードでは、カーソルは縦棒として表示されます。

プロンプト自体は、モードに応じて次のようになります。

(cmd)$ ... 
(ins)$ ...
于 2020-02-11T23:53:47.970 に答える
0

私は BASH vi モードのインジケーターも取得しようとしていますが、皆さんはそれが単純に聞こえ、まだそれを行う方法がないことを学びました。

私の現在のアプローチは次のとおりです。どちらのモードかわからない場合は「a」を押します。BASH PROMOT の後に「a」が表示された場合は、「INSERT」モードになっていることがわかります。その後、「RETURN」を押して続行します。これは、私にとって小さな煩わしさを解決する簡単な方法です。

ところで、私は'alias a='cal'、または空のヒットを少し便利にするために何か他のものを使用しています.

于 2010-09-19T03:18:09.183 に答える