私の bash プロンプトは、いくつかの場所から盗んで寄せ集めたものだと認めますが、上下矢印で bash 履歴をスクロールすると、以前のコマンドの一部がその長さに追加されることがあります。
たとえば、以前のコマンドが次のとおりだったとします。
ls
cd /home/caleb
vim .bashrc
プロンプトで 2 回上にスクロールすると、次のようになります。
$ vim .bcd /home/caleb
最初の 5 文字は最後のコマンドから残ります。
なぜこのようなことが起きているのか、また、どうすれば止められるのか、誰か分かるでしょうか?
私のプロンプトは次のコードで設定されています (ここに含められないほど長いです):出典: github.com
答え1
プロンプトのどこかがおかしくなっています。通常、シェルは印刷できない用語コードを出力していると考え、それがスペースを占めることを期待しています。私があなたにできる最善のアドバイスは、この問題の原因となっているコードを特定するために、この動作が止まるまでプロンプトに体系的に追加 (または削除) することです。
答え2
カラーコードは角括弧で囲む必要があります。括弧はbashに、囲まれたテキストは印刷されないことを伝えます。
@Phreditor の例を基にすると、改行後に行われたフォーマットはすべて元の問題を引き起こすことがわかります。
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\033[0;90m\$ "
フォーマット コードを [] で囲むことで、煩わしい動作が起こらないようにします。
export PS1="\n\[\[\033[01;33m\][\w]\[\033[00m\]\n\[\033[0;90m\]\$ "
ドキュメント:http://tldp.org/HOWTO/Bash-Prompt-HOWTO/nonprintingchars.html
PS1 フォーマットでは値が長くなりすぎて読みにくくなるため、フォーマット コードを変数に配置します。
BYELLOW='\[\033[01;33m\]'
IBLACK='\[\033[0;90m\]'
PS_CLEAR='\[\033[0m\]'
export PS1="\n${BYELLOW}[\w]${PS_CLEAR}\n${IBLACK}\$ "
答え3
私も同じ問題を抱えていましたが、それは色の定義に関連していました。
私の場合、複数行のプロンプトがあります (プロンプトによって表示されるパスの長さに関係なく、現在のコマンドに最大のスペースが与えられます)。
悪いバージョン:
export PS1="\n\n\[\033[01;33m[\w]\n\033[00m\$ "
良いバージョン:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\$ "
\033[00m
色を終了します。新しい行 ( ) の後にあると\n
、以前のコマンドが背景色で上書きされ、端末で適切な再描画ができなくなります。新しい行の後ろに移動することで、問題は解決しました。
(Mac OS 10.8 のターミナルを使用)
答え4
私もこの問題に遭遇しました。何が検出されたのでしょうか?
PS1 変数内に色がある場合 (例: "\e[35m" )、常に "\[" と "\]" で囲む必要があります (例: "\[\e[35m\]" )。
このルールに従って PS1 のすべての色をマークすると、うまくいきました!
bash の履歴をスクロールする際に問題が発生することはなくなりました。
悪い例:PS1="\e[0;36m[\u@\h[\e[1;31m$ORACLESID\e[0;36m] \W]\e[0m"; PS1をエクスポート
良い例え:PS1="\[\e[0;36m\][\u@\h[\e[1;31m\]$ORACLESID\[\e[0;36m\]]\W]\e[0m\] "; PS1をエクスポート