起こっていた現象

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

環境

  • macOS 10.12.6
  • zsh 5.6.2 (x86_64-apple-darwin16.7.0)

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 SHELL16.2.8 Prompting に詳しく書いてありますが、簡単に内容を書いておきます。

  • prompt_cr
    プロンプトを表示する直前にキャリッジリターンを出力します。
  • prompt_sp
    prompt_cr オプションによって表示されなかった行を保持するようにします。

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

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


以上、よっしー (michimani) でした。

Share to ...

Follow on Feedly

comments powered by Disqus