%20%E5%88%B0%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%E4%BA%A7%E7%94%9F%E7%9A%84%E8%BE%93%E5%87%BA%E5%AD%98%E5%9C%A8%E5%AF%B9%E9%BD%90%E9%97%AE%E9%A2%98.png)
产生奇怪输出的命令:
$ 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 的功能,但我无法用我的程序重现相同的行为。
那么,为什么我们在这种情况下会出现这种行为以及如何解决呢?