履歴をスクロールするときに、複数行のコマンドによってカーソルの位置がおかしくなるのを防ぐにはどうすればよいですか?

履歴をスクロールするときに、複数行のコマンドによってカーソルの位置がおかしくなるのを防ぐにはどうすればよいですか?

関連している:履歴を参照するときに bash プロンプトがバグるのはなぜですか?

履歴は次のようになります。

 1831  git remote -v
 1832  gs 
 1833  gd 
 1834  gc -am 'moved apsum options etc to their own file
set routes to allow cors
changes to the apsum pull ' 
 1835  git push
 1836  reset
 1837  history
 1838  __git_ps1
 1839  reset
 1840  history
 1841  Kill 99894
 1842  history

g*これらはすべて git コマンドのエイリアスです。履歴をスクロールすると、1833 番 (アンダースコアはカーソル位置を示します) に到達するまではすべて正常です。

$ gd _
[ up arrow]
$ gds_
[up arrow]
$ gdit remote -v_

PS1 の非印刷文字が原因だと考えましたが、それらはすべて括弧で囲みました。

PS1="\n\[$FCYN\]\$(date +%H:%M:%S) \w\[$IGreen\]\$(__git_ps1)\[$Black\] $ \[$DarkGray\]"

何か見逃しましたか? これは複数行のコミット メッセージがあるときにのみ発生するものですか?

編集: 私の最終的な解決策はコメントに載せるには大きすぎます:

export PS1="\\n\[\033[38;5;246m\]\u@\[$(tput sgr0)\]\[\033[38;5;245m\]\h\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;28m\]\w\[$(tput sgr0)\]\[\033[38;5;15m\]\[$(tput sgr0)\]\[\033[38;5;2m\]`__git_ps1`\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;90m\]\t\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;232m\]\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\n\[$(tput sgr0)\]\[\033[38;5;0m\]\\$\[$(tput sgr0)\] "

奇妙に思えるかもしれませんが、git ブランチと明るい背景 (ここでは見えません) で読みやすい色を使用した、見やすいプロンプトが生成されます。

collumj@machineName ~ (dev) 17:35:42  
$ 

感謝しますhttp://bashrcgenerator.com/

答え1

「すべて」は括弧で囲まれていますが、不明な点がいくつかあります。列が右にシフトされているので、bash が気付かないテキストが送信されていることを意味します。

ロケールの不一致が原因でこのようなことが起こる可能性はありますが、おそらく気づくでしょうそれ

設定でカラー機能を使用していないことを確認してください__git_ps1。によるとフェドーラというスクリプトを呼び出すgit-prompt.sh、これにより ( を設定した場合GIT_PS1_SHOWCOLORHINTS) エスケープ シーケンスが送信され、実際の列に関して bash が混乱する可能性があります。

関連情報