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 的源代码之后,我还编写了一个小 C 程序来模拟 Vim 的功能,但我无法用我的程序重现相同的行为。

那么,为什么我们在这种情况下会出现这种行为以及如何解决呢?

相关内容