CTRLコマンド ラインから+を介して逆履歴検索しているときにr、コマンドを編集したい場合、矢印キーを押すか、CTRL+aまたはCTRL+を入力すると、カーソルが間違った位置にジャンプするeことがあることに気づきました。ジャンプ先の特定の位置は、 で設定されているコマンド ライン プロンプトのサイズに等しいオフセットのようですPS1
。
カーソルの実際の位置が画面に表示される位置と異なるため、問題が発生します。コマンドの今後の編集では、カーソルがジャンプ先にあるかのように表示されますが、実際のコマンドはジャンプせずに正しい位置を保持します。
これの原因や解決方法を知っている人はいますか?
編集: 最後に改行を追加すると、PS1
問題は解消されるようです。ただし、プロンプトと同じ行にコマンドを入力することをお勧めします。
答え1
これは、履歴内のコマンドが 1 行より長い場合によく発生します。履歴から短い項目を選択すると、コマンド ラインを再レンダリングする際にプロンプトの幅が考慮されないため、その長いコマンド以降のすべてがおかしくなります。
私が見つけた簡単な解決策は、ホーム キーを押して、「echo」と入力し、Enter キーを押すことです。次に、最後のコマンドを呼び出して、そこから編集します。(まず echo を削除します。:)
この問題の最も一般的な原因を修正する方法を示す、以下の alexander-somov の回答も参照してください。
答え2
PS1 に、\[ と \] で囲まれていない非印刷エスケープ シーケンスが含まれている可能性があります。
必ず次のようにすべてを囲んでください。
\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]