2012-01-21 73 views
1

在Windows內部Vim中,我試圖通過shell可執行文件過濾文件中的行。我使用下面的命令:在Windows上通過外部程序過濾行不會返回任何內容

:0,$!sort 

的想法是,我將使用Windows sort命令文件的行進行排序。

的問題是,我得不到任何回報。因此,有效的,文件中的所有行都被刪除,即它們什麼也沒有(我可以使用撤消ü恢復所有的行)所取代。的Vim

外,下面的命令正常工作:

type sort-lines.txt | sort 

( 「排序lines.txt」 是我用VIM工作的測試文件。)

我已經嘗試使用Windows sort命令以及Cygwin sort命令。結果是一樣的。

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

:0,$!dir 

的文件的行替換爲dir命令的輸出。這使我認爲外部程序正在執行,但它沒有正確接收來自文件的輸入行。

是否有需要在我的配置中進行調整以使其工作?我檢查Vim的shellpipe選項的值,並將其設置爲:

shellpipe=>%s 2>&1 

這看起來不正確我。

+0

可能是行不會被刪除。空行將顯示在頂部。你檢查了文件的最後一行嗎? –

回答

4

好的,我發現了這個問題。

我在註冊表中設置了一個Autorun CMD腳本。每當vim啓動CMD運行過濾器時,自動運行腳本將運行,並以某種方式阻止傳入的數據進入。

要解決該問題,我更改了vim「shell」變量的值。這是我設定的。

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

/d告訴CMD不要運行任何自動運行腳本。 「cmd.exe」之後的額外反斜槓對於轉義cmd.exe和/ d之間的空格字符是必需的。

使用此設置,過濾工作正常。

對於自動運行的討論和/ d選項見this MSDN article

感謝,達西,指着我在正確的方向。 (順便說一句,你有一個很好的姓。)

+1

很高興你知道了!順便說一句:你可能希望如下更新你的shell變量。 set shell = $ COMSPEC/d這樣,如果你在不同的windows系統上使用一個稍微不同的'windows'文件夾,你會沒事的。 (我不知道/ d,所以這很有趣。) – darcyparker

-1

vim有一個內置的排序工具。你可以試試。

:0,$sort 
相關問題