zsh で出力結果の最終行が表示されない問題の解決方法
2018-12-12起こっていた現象
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 SHELL の 16.2.8 Prompting に詳しく書いてありますが、簡単に内容を書いておきます。
- prompt_cr
プロンプトを表示する直前にキャリッジリターンを出力します。 - prompt_sp
prompt_cr オプションによって表示されなかった行を保持するようにします。
上記の 2 つのオプションはデフォルトでオンになっていると書かれていますが、明示的に書かないと機能しませんでした。これは prezto が悪いのか pure が悪いのか…。
この対応策については prezto と pure の issue に関連するものがいくつかあり、そこからたどり着きました。
- sorin-ionescu/prezto | Some prompts remove last line from command output #1557
- sorin-ionescu/prezto | Ensure external prompts also set the prompt_sp option #1425
- sindresorhus/pure | Add back the prompt_sp option for zsh >= 5.4.1 #338
ひとまずこれで改行を含まない最終行も表示されるようになりました。
comments powered by Disqus