web-dev-qa-db-ja.com

異なるvi編集モードの異なるbashプロンプト?

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

B.t.w、これは [〜#〜] zsh [〜#〜] で可能と思われる

113
Thomas

新鮮な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対応プログラムに影響するはずです;)

66
eMPee584

Bash 4.4/Readline 7.0 ユーザーが設定可能なモード文字列のサポートを追加します

ベータ版を試すことはできますが、現時点では少しバグが多いようです。また、プロンプトでモードインジケータを表示する場所の指定もサポートしていません(これがキラー機能だと思います)。

ちょっと待って、少しコンパイルするのが怖くないなら、この機能をサポートするgithubにbash 4.3とreadline 6.3のパッチを適用したバージョンを公開しました。

パッチを当てたバージョンでは、次のようなことができます。

enter image description here

インストール方法など、詳細は https://github.com/calid/bash で入手できます。

20
Dylan Cali

グーグルを検索し、bashのマニュアルページを見てからbashのソースコード(lib/readline/vi_mode.c)を見てみると、挿入モードからコマンドモードに移行するときにプロンプ​​トを変更する簡単な方法がないように見えます。ソースでモードを開始および停止するための呼び出しがありますが、誰かがbashソースにパッチを当てる機会があるかもしれません。

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

これがどこに行くのかを知りたいので、あなたの質問を増やしています。

19
Jeremy Heslop

複数行プロンプトと.inputrc

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

解決策は、単一行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 _

Preview (ソース)

7
user3034472

これは私が~/.inputrc

set show-mode-in-Prompt on
set vi-ins-mode-string \1\e[34;1m\2└──[ins] \1\e[0m\2
set vi-cmd-mode-string \1\e[33;1m\2└──[cmd] \1\e[0m\2

挿入モードは青色になります。

└──[ins]

コマンドモードは黄色で表示されます。

└──[cmd]

欠点は、ttyに表示されないことです。つまり、端末エミュレーターでのみ色のみが機能します。

0
Jetchisel

BASH viモードのインジケーターも取得しようとしていますが、皆さんはそれがシンプルであり、まだそれを行う方法がないことを知っています。

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

ちなみに、私は「alias a = 'cal」、または空のヒットを与える他の何か「a」に少し有用性を与えます。

0
Andrew_1510

.inputrcによるさまざまなプロンプトとカーソルスタイル

まず、4.3よりも高いバージョンのbashを実行していることを確認する必要があります。

$ 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)$ ...
0
winklerrr

このような複数行プロンプトの場合 image

私の仕事はこんな感じ

私のbashプロンプト

export PS1=" ┌錄 \[\e[32m\]\u\[\e[m\]\[\e[32m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\] \w \\$ \n "

.inputrc

set show-mode-in-Prompt on
set vi-ins-mode-string " └──錄 (ins):"
set vi-cmd-mode-string " └──錄 (cmd):"

これがお役に立てば幸いです

0
mark