bashで履歴検索を逆にしてから矢印キーを押すと、カーソルが間違った場所に表示される


10

CTRL+ を使用してコマンドラインから逆履歴検索を行っているときに、コマンドrを編集したい場合、矢印キーを押すかCTRL+ aまたはCTRL+を入力すると、カーソルが間違った位置にジャンプすることがあります。e。ジャンプ先の特定の位置は、で設定したコマンドラインプロンプトのサイズに等しいオフセットのようPS1です。

カーソルの実際の位置が画面に表示されるものとは異なるため、これにより問題が発生します。コマンドに対する今後の編集は、カーソルがジャンプした場所のようにレンダリングされますが、実際のコマンドはジャンプせずに正しい位置を保持します。

誰がこれを引き起こしているのか、またはそれを修正する方法を知っていますか?

編集:PS1問題の最後に改行を追加すると、消えてしまうようです。ただし、プロンプトと同じ行にコマンドを入力することをお勧めします。

回答:


6

これは多くの場合、履歴内のコマンドが1行より長いことが原因です。履歴から短いアイテムを選択すると、コマンドラインを再レ​​ンダリングする際のプロンプトの幅が考慮されないように見えるため、その長いコマンドの後のすべてが厄介です。

私が見つけた簡単な解決策は、ホームキーを押し、「echo」を挿入してEnterキーを押すことです。次に、最後のコマンドを呼び出して、そこから編集します。(最初にエコーを削除します。:)


ほんの少し前に実際に試してみました。私の場合、エコーを飲み込むパイプがコマンドにあったため、不注意でファイルを吹き飛ばしました。私の実験によると、これは正しいです。これは長いコマンドにのみ影響するようです。
ジョンデリー、2011

私が見つけたエコーよりも良い解決策:エコーではなく「#」を行の先頭に追加します。このように、bashは行全体をコメントのように扱います。
ジョンデリー

1
さらに良い:現在の行が再描画されれば、問題は解消するようです。画面をクリアして現在の行を再描画するClか、バインドされていない関数redraw-current-lineのキーバインディングを作成します。
jonderry

スクロールバッファーを失うことは本当に嫌いなので、Clソリューションについて言及するのを忘れましたが、はい、これは履歴ナビゲーションからの一時的なレンダリングの不具合であるため、再描画を強制すると修正されます。redraw-current-lineはさらに良いソリューションのように聞こえます!
cabbey 2011

13

多分あなたは\ [と\]で囲まれていないPS1の非印刷エスケープシーケンスを持っています。

これらすべてを次のように囲んでください。

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

1
\[andで非印刷シーケンスのみを囲む場合に機能します\](したがって、これらのブロック引用の複数のグループが必要です)
Andomar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.