产生奇怪输出的命令:
$ 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 的功能,但我无法用我的程序重现相同的行为。
那么,为什么我们在这种情况下会出现这种行为以及如何解决呢?