カスタム.bash_profileを使用したターミナルでの奇妙な動作


8

動作を説明するのは難しいですが、ここに短いクリップがあります:

http://www.youtube.com/watch?v=9KqHBA94FPI

基本的に、複数行のコマンドを入力すると、挿入ブロックは最初の行の終わりに戻り、最初の行の先頭に戻り、最初の行を上書きしてから、2番目、3番目などの行に通常のように続きます。 。削除すると、コマンド全体とコマンドの上にある行の空白が削除されます(user @ host / Directory情報を含む行の後にコマンドが挿入されるように設定しています。次に、削除することもできます。上記で説明したディレクトリとホストの最後の部分です。申し訳ありませんが、これを説明するのはひどいです。ビデオの方がうまくいきます。

これが私の.bash_profileの内容です:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

回答:


12

あなたは、bashのエスケープシーケンスと(この場合は、お使いのANSIエスケープシーケンス)あなたの非印刷文字を囲む必要があります\[\]。これにより、bashは囲まれた文字が表示されないことを認識します。つまり、スペースを取りません。それらは、行ラッパーで使用される語長の計算に含めるべきではありません。

つまり、PS1定義を変更します。

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

…へ:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

そしてPS1、これは人間が読むためだけの同じ値で、おそらく読みやすさが向上しています(下の行のANSIエスケープ、中央のbashエスケープ、上の行の印刷文字)。

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

参考文献:


これは完璧です、私の問題を解決しました。助けてくれてありがとう!
Blair Beckwith

ブレア、Ask Differentへようこそ!質問への回答が気に入ったら、賛成票を投じて同意してください。
ノーヒルサイド

0

皆さん、

私は同様の問題を抱えていて、PS1変数を元の変数から非常に単純な変数に変更するだけで解決策を見つけました。実際の名前は実際に:export PS1 = Alex

これで私の端末は異常な動作をしなくなりました。

お役に立てれば幸いです。

Alex(Mac Lion 10.8)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.