读取shell命令输出的最佳方法

时间:2012-02-05 09:43:55

标签: shell vim shellexecute

在Vim中,读取shell命令输出的最佳(可移植和快速)方法是什么?此输出可能是二进制的,因此包含空值,并且(不)具有重要的尾随换行符。我看到目前的解决方案:

  1. 使用system()。问题:不适用于NULL。
  2. 使用:read !。问题:不会保存尾随换行符,试图智能检测输出格式(dos / unix / mac)。
  3. 使用!重定向到临时文件,然后readfile(, "b")读取它。问题:两次调用fs,shellredir选项也默认重定向stderr并且它应该不太可移植(这里提到'shellredir'因为它可能被设置为有效值)。
  4. 使用system()并通过xxd过滤输出。问题:非常慢,便携性最低(管道不等于'shellredir')。
  5. 还有其他想法吗?

1 个答案:

答案 0 :(得分:5)

您使用的是文字编辑器。如果您关心NUL,跟踪EOL和(可能)冲突的编码,您还需要使用十六进制编辑器吗?

如果我需要对操作进行这样的控制,我确实使用xxd路径,

:se binary

您似乎错过的一个不错的选择是插入模式表达式寄存器插入:

  

C-R =system('ls -l') 输入

对于字符编码业务,这可能会或可能不会更聪明/更少侵入,但如果它对您来说足够重要,您可以尝试一下。

或者您可以使用Perl或Python支持来有效地使用popen

粗略的想法:

:perl open(F, "ls /tmp/ |"); my @lines = (<F>); $curbuf->Append(0, @lines)