michimani.net

zsh で出力結果の最終行が表示されない問題の解決方法

2018-12-12

起こっていた現象

zsh でなにかしらのコマンドを実行して出力される結果の最終行が表示されない という現象が起こっていました。

環境

zsh のフレームワークとして sorin-ionescu/prezto を使用して、テーマを pure にしていました。

現象の詳細

1 行だけの出力をしようとすると、

~
❯❯❯ echo -n hello world

~
❯❯❯

という感じで、何も表示されません。実際には一瞬だけ表示されてすぐに消えるという状態でした。

他のパターンとして、まず下記のように適当なテキストファイルを用意します。

line 1
line 2
line 3

このファイルの最終行の末尾には改行コードが無い状態です。
このファイルを cat で出力してみると、

~
❯❯❯ cat test.txt
line 1
line 2

~
❯❯❯

という感じで最終行が出力されません。

pure はプロンプトが 2 段で表示されるテーマなので、それが悪さしている感じでした。(多分)

やったこと

結論としては、下記の 2 つのオプションを .zshrc に追記しました。

setopt prompt_cr
setopt prompt_sp

それぞれのオプションについては 16 Options (zsh) | THE Z SHELL 16.2.8 Prompting に詳しく書いてありますが、簡単に内容を書いておきます。

上記の 2 つのオプションはデフォルトでオンになっていると書かれていますが、明示的に書かないと機能しませんでした。これは prezto が悪いのか pure が悪いのか…。
この対応策については prezto と pure の issue に関連するものがいくつかあり、そこからたどり着きました。

ひとまずこれで改行を含まない最終行も表示されるようになりました。


comments powered by Disqus