通过Windows上的外部程序过滤行不会返回任何内容

时间:2012-01-21 02:32:04

标签: windows vim cmd

在Windows上的Vim内部,我试图通过shell可执行文件过滤文件中的行。我正在使用以下命令:

:0,$!sort

我的想法是使用Windows sort命令对文件行进行排序。

问题是我得不到任何回报,所以,有效地,文件中的所有行都被删除,即它们被替换为什么(我可以使用undo u 恢复所有行。)< / p>

在Vim之外,以下命令可以正常工作:

type sort-lines.txt | sort

(“sort-lines.txt”是我在vim中使用的测试文件。)

我已经尝试使用Windows sort命令以及Cygwin sort命令。结果是一样的。

有趣的是,如果我在Vim中使用以下命令:

:0,$!dir

文件的行将替换为dir命令的输出。这让我觉得外部程序正在执行,但它没有正确接收文件中的输入行。

是否需要在我的配置中调整某些内容才能使其正常工作?我检查了Vim的shellpipe选项的值,它被设置为:

shellpipe=>%s 2>&1

这对我来说似乎不对。

2 个答案:

答案 0 :(得分:4)

好的,我发现了这个问题。

我在我的注册表中设置了一个Autorun CMD脚本。每当vim启动CMD以运行过滤器时,Autorun脚本就会运行并以某种方式阻止管道输入数据进入。

要解决此问题,我更改了vim“shell”变量的值。以下是我设置的内容。

:set shell=C:\Windows\system32\cmd.exe\ /d

/ d告诉CMD不要运行任何自动运行脚本。为了转义cmd.exe和/ d之间的空格字符,必须使用“cmd.exe”之后的额外反斜杠。

有了这个设置,过滤工作正常。

有关自动运行和/ d选项的讨论,请参阅this MSDN article

谢谢,达西,指出我正确的方向。 (顺便说一句,你有一个很棒的姓氏。)

答案 1 :(得分:-1)

vim有一个内置的排序工具。你可以试试。

:0,$sort