在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
这对我来说似乎不对。
答案 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