ZshでPreztoを導入してテーマをredhatにしたら、出力結果の改行無し最終行が表示されなくなった
2021/08/24
問題
タイトル通りで、Zsh使いになってZshフレームワークのPreztoを導入したら出力結果の改行無し最終行が表示されなくなった
自分は文字列を返すAPIをCurlで叩いた時に起きたけど、わかりやすいようにここではechoで例を示す
問題の出力例
[ytkg@TAKAGInoMacBook-Pro ~]$ echo -n "Hello\nWorld"
Hello
[ytkg@TAKAGInoMacBook-Pro ~]$
理想の出力例
[ytkg@TAKAGInoMacBook-Pro ~]$ echo -n "Hello\nWorld"
Hello
World[ytkg@TAKAGInoMacBook-Pro ~]$
原因
プロンプトの設定で、PROMPT_CRがONでPROMPT_SPがOFFになっているからっぽい
その組み合わせだとどうしてダメなのか、そもそもPROMPT_CRとPROMPT_SPは何なのかは割愛する
$ set -o | sed -e 's/^no\(.*\)on$/\1 off/' -e 's/^no\(.*\)off$/\1 on/' |grep -E "prompt(cr|sp)"
promptcr on
promptsp off
ちなみにZshのデフォルトは両方ともONらしいけど、redhatの場合、PROMPT_CRのみONにする設定になっていた
- https://zsh.sourceforge.io/Doc/Release/Options.html#Prompting
- zsh/prompt_redhat_setup at 00d20ed15e18f5af682f0daec140d6b8383c479a · zsh-users/zsh
解決方法
~/.zshrcにPROMPT_CRをOFFにする設定を追加する
~/.zshrc
unsetopt prompt_cr
$ source ~/.zshrc
$ set -o | sed -e 's/^no\(.*\)on$/\1 off/' -e 's/^no\(.*\)off$/\1 on/' |grep -E "prompt(cr|sp)"
promptcr off
promptsp off
[ytkg@TAKAGInoMacBook-Pro ~]$ echo -n "Hello\nWorld"
Hello
World[ytkg@TAKAGInoMacBook-Pro ~]$
理想の出力になった
補足
パイプやリダイレクトでも起きる
この現象は表示だけではなく、パイプやリダイレクトでも起きることを確認した
$ echo -n "Hello\nWorld" | cat
Hello
$ echo -n "Hello\nWorld" > output.txt
$ cat output.txt
Hello
PROMPT_SPをONにするパターンでは解決せず
PROMPT_SPをONにする解決方法の記事もいくつか見つかったが、自分の環境ではダメだった
~/.zshrc
setopt prompt_sp
$ set -o | sed -e 's/^no\(.*\)on$/\1 off/' -e 's/^no\(.*\)off$/\1 on/' |grep -E "prompt(cr|sp)"
promptcr on
promptsp on
[ytkg@TAKAGInoMacBook-Pro ~]$ echo -n "Hello\nWorld"
Hello
World%
[ytkg@TAKAGInoMacBook-Pro ~]$
最終行末尾に%が表示されているし、改行もされている