私のプロンプト定義とzshのcatの間に競合があります。

私のプロンプト定義とzshのcatの間に競合があります。

リモートファイルシステムには、短いテキスト文字列(1行の一連の数字)を含むファイルがあります。 nanoやEmacsなどのテキストエディタでファイルを開くと、文字列を見ることができます。また、これが関連しているかどうかはわかりませんが、lsファイルは8バイト*で報告されます。

変なのはcatこれを報告してもcat何も報告されないということです。

ところで、行の末尾に改行を追加するとcat内容が表示され、混乱します。

だから私の質問は次のようになります

  • なぜこれが起こるのですか?cat内容を印刷するには、各行の最後に改行が本当に必要ですか?これがデフォルトの動作ですかcat? (それではなぜですか?)
  • cat改行の有無にかかわらず、ファイルのすべての内容を強制的に印刷する方法はありますか?

修正する:

以下の回答に基づいて、プロンプトを定義した方法を投稿するのが適切だと思いました。私はにあり、zsh次のものがあります。2行~/.zshrc:

export PS1="%{$fg[white]%}%n%{$reset_color%} @ %{$fg[green]%}%m: %{$fg[yellow]%}%~ %{$reset_color%}%%
> "

プロンプトを定義する前に、次の2行があります。これにより、シェルでカラーエイリアスを使用できると考えられます。

autoload -U colors
colors

質問を変えてください:

上記を考慮して、どのようにプロンプ​​トに改行を追加し、上記のようにcatファイルを正しく印刷できますか?


touch*私がランダムファイルであれば、ファイルlsが0バイトしかないと報告されますが、ls私のファイルが8バイトという事実を報告するのが正しいと思います。しかし、これが役に立つかどうかはわかりません。

ベストアンサー1

Zshは、プロンプトが既知の場所から開始できるように、プロンプトの前にCRを自動的に出力します。 zsh以外のシェルを使用すると、次のようになります。

$ cat file
12345678$ _ <-- your prompt after the file contents

この問題に関するよくある質問は次のとおりです。http://zsh.sourceforge.net/FAQ/zshfaq03.html#l40

このため、テキストファイルは改行で終わる必要があります。改行を含まないテキストファイルを生成するツールを見つけることはまれです(クロスプラットフォーム環境を除外 - Windowsメモ帳は改行でファイルを終了しません)はい)

ほとんどのコマンドの出力後にプロンプ​​トの前に空白行を追加することができる場合(Windowsなど)、プロンプトの先頭に改行文字を追加してみてください。

export PS1="
%{$fg[white]%}%n%{$reset_color%} @ %{$fg[green]%}%m: %{$fg[yellow]%}%~ %{$reset_color%}%%
> "

そして(オンにしても実際に動作する可能性があります)、プロンプト_crシェルオプションを無効にします。リンクメールで「スペースライン」オプションを試すこともできます。

おすすめ記事