ファイル記述子のwritefile()で生成された出力にソートの問題があります。

ファイル記述子のwritefile()で生成された出力にソートの問題があります。

奇妙な出力を生成するコマンド:

$ vim -ec 'call writefile(["line1","line2"],"/proc/self/fd/9") | qall!' 9>&1 1>/dev/null 2>&1
line1
     line2
          $

同じコマンドをパイプしてcat端末制御シーケンスを調べます。

$ vim -ec 'call writefile(["line1","line2"],"/proc/self/fd/9") | qall!' 9>&1 1>/dev/null 2>&1 | cat -A
line1$
      line2$
            $

転送-s(事前自動モード)vimこれは効果があるようですが、このモードでは構文の強調が得られないため、このスイッチは使用できません。

$ vim -esc 'call writefile(["line1","line2"],"/proc/self/fd/9") | qall!' 9>&1 1>/dev/null 2>&1 | cat -A
line1$
line2$
$

また、出力を画面にパイプしlessて画面を再描画すると(Ctrl-L)、すべてが正しくソートされます!

Vimのソースコードを調べた後、Vimの機能をシミュレートするために小さなCプログラムも書いていましたが、私のプログラムで同じ動作を再現することはできませんでした。

では、この場合、なぜこのような動作が発生し、どのように解決しますか?

ベストアンサー1

おすすめ記事