bash(ttyとX)で長い入力文字列を使用すると、ホームキーは奇妙に動作します。

bash(ttyとX)で長い入力文字列を使用すると、ホームキーは奇妙に動作します。

Home現在の入力が十分に短い(例:<36文字)をクリックすると、正常に機能します。しかし、長い命令を入力した後に再び最初に戻ろうとすると、操作は完了したようですが、命令は実行されません。見せるために正しい。最初はじゃなくて10文字くらい後ろにいるようですね。 「盲目的に」と入力するとうまくいきますが、入力全体が右に移動したが再描画されなかったかのように完全に混乱しているようです。だから上書きしようと入力しましたが、「実際には」そうではありませんでした。なぜなら、私が「削除した」部分が「実際には」右10文字だったからです。したがって、コマンドを削除しようとすると最初の10文字が表示されますが、クリックすると前の入力が空のEnterように別のプロンプトが表示されます。

私はこれが最善の説明ではないことを知っていますが、ポイントはbashがそれを認識して正しいことをしようとしますが、しばしば失敗することです。

私はこれをttyとXセッションのある端末で再現しました。Ctrl+をクリックするVと他のシーケンス(X、tty)Homeが表示されますが、どちらも私のシーケンスのようです。^[OH^[[1~/etc/inputrc

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[7~": beginning-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif

echo $TERMlinuxttyセッションとxtermXセッションに表示されます。

それ

GNU bash、バージョン 4.2.24(2)-リリース(i686-pc-linux-gnu)

誰もこれについての手がかりを持っていますか?

ベストアンサー1

プロンプトの印刷されていない部分(色の変更に使用されるエスケープシーケンスを含むがこれらに限定されない)をおよびで囲む必要があります\[\]

オリジナルのヒント:\e[0;36m[\u@\h \W]\$ \e[m
修正のヒント:\[\e[0;36m\][\u@\h \W]\$ \[\e[m\]

そしてその間のすべての内容は実際には画面に印刷されないことを\[知らせます\]bashつまり、長さは0です。入力した文字をどこでエコーするかを知るには、計算されたプロンプトの長さが必要です。\[ \]これを無視すると、bashプロンプトの長さが誤って計算され、カーソルがbash現実と一致しないという考えのため、奇妙な端子形状に応じた動作が発生することがよくあります。

おすすめ記事