web-dev-qa-db-ja.com

端末プロンプトが現在の行を上書きする

端末のプロンプトラインに問題があります。行が長すぎると、同じ行に折り返され、その後 Up arrow 見た目がさらに悪くなります。

私はすでにチェックしました ターミナルプロンプトが正しく折り返されていません ですが、印刷できない文字の角かっこをすべて閉じているようです。

これは私のPS1です:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot) }\[\033[01;36m\]\u@\h\[\033[00m\]\033[01;34m\]\w\033[00m\][$(type __git_ps1 >/dev/null 2>&1 && __git_ps1 "(%s)")]

これを私の標準のプロンプトラインと考えてください

MELISC@work~/dev/bin_tools[((main))]

私は得ることができました

assdasdasdasdasdadasdsadadasdaddasdadadasdadsadasdsa((main))] asdsadsadsadsadasdasdassdasdasdassdasdassdasdasdasdasdasdasdsadsad

.bashrcはすでに確認済みです

私は持っていて、shopt -s checkwinsizeは列を自動チェックする必要があります

6
melisc

コマンド履歴を表示し、コマンドラインを編集できるようにするため、何が印刷され、何を消去/再書き込みする必要があるかについてのBourne AgainShellの考えを完全に禁止しました。

プロンプトをセクションに分割します。

  1. _\[\e]0;\u@\h: \w\a\]_ —非印刷文字、適切に囲まれている
  2. ${debian_chroot:+($debian_chroot) } —文字のみを印刷します。おそらく
  3. _\[\033[01;36m\]_ —印刷されない文字、適切に囲まれている
  4. _\u@\h_ —文字のみを印刷する
  5. _\[\033[00m\]_ —印刷されない文字、適切に囲まれている
  6. _\033[01;34m\]_ —印刷されない文字、不適切に囲まれているため、Bourne AgainShellはそれらが
  7. _\w\033[00m\]_ —印刷文字と非印刷文字の誤った混合
  8. [$(type __git_ps1 >/dev/null 2>&1 && __git_ps1 "(%s)")] —文字のみを印刷します。おそらく

私は以前にこのアドバイスをしました 、しかしここにも当てはまるのは一般的なアドバイスです:

  • 独自の健全性のために、_\e_または_\033_を一貫して使用してください。
  • _\[_および_\]_を、ネストされていないペアと厳密に一致させる。
  • all非印刷シーケンスが_\[_と_\]_内にあることを確認してください(逆に、すべての印刷シーケンスがそうではないことを確認してください)。

(これが、私が個人的にZシェルとその代替のプロンプト拡張メカニズムを好む理由です。奇抜な色のプロンプトが必要な場合に使用します。知っている _%F{green}_のようなものはシーケンスを印刷しないので言われる;そしてそれはまたそれらを配線することなくterminfoから正しいエスケープシーケンスを解決する。)

11
JdeBP

JdeBPの答えは素晴らしいですが、私のPS1はすでに適切だったので、私のために働いたものを追加したいと思いました。私はもともと、GitHubのWSLリポジトリの関連する問題( #271 )にこれを投稿しました:


この問題が私を苛立たせているので、後世のためにここにないものを追加したいと思います。少なくとも私にとっては、ようやく原因を見つけたと思うので、これが他の人の助けになることを願っています。この問題は、さまざまなディストリビューションを備えたさまざまなシステム(ビルド18362-18975)で見られました。 .bashrcのPS1の構文が100%正しく、印刷されないすべての文字が適切にエスケープされていることを確認しました。

私にとっての問題は、コンソールのプロパティにありました。 MicrosoftストアからWSLディストリビューション(Ubuntu、Debian、Kali)をインストールし、スタートメニューからアプリを実行しました。これにより、LinuxブランドのクラシックなWindowsコマンドプロンプトコンソールでWSLが起動します。 (ところで、Shift +右クリック/「Linuxシェルをここに開く」でフォルダーから起動すると、同じコンソールウィンドウが開きます)。

いずれにせよ、ポイントは、表示されるコンソールのタイトルバーを右クリックし、[プロパティ]をクリックして、[サイズ変更時にテキスト出力を折り返す]オプションを選択することです。これが問題の解決策です。

Console Properties

Wrap Text

これで、次の行に折り返すコマンドを適切に入力し、カーソルを適切に移動できます。これは間違いなくどこかのバグですが、どこに問題があるのか​​わかりません。

0
Chiramisu