2010-06-24 56 views
5

我嘗試使用vim的內部grep和'**'通配符,如下面的命令:Vim:grep的通配符在windows中不起作用

grep "test" **\*.txt 

vim給出以下錯誤:

FINDSTR: Cannot open **\*.txt 

當我刪除'**'通配符時,命令正常工作:

grep "test" *.txt 

我將反斜槓更改爲正斜槓,但它也沒有幫助:

grep "test" **\*.txt 

這再次給出了上述錯誤。

可能是什麼原因?

注意:我在Microsoft Windows XP上使用GVim 7.2。

回答

5

在XP下執行Vim中的「:grep」默認情況下不使用「grep.exe」 。默認使用「FINDSTR」,它是Windows安裝的部分 。 「FINDSTR」與grep 不兼容。由於此,您將收到錯誤消息

FINDSTR: Cannot open **\*.txt 

請參閱「:help grepprg」。

如果你想使用grep的Windows端口,你必須安裝 它既然grep既不是Windows的一部分,也不是Vim的安裝。

但自7.0以來,Vim有一個名爲vimgrep的內部grep。 有關詳細信息,請參閱「:help vimgrep」。

您必須相應地設置'grepprg',以便使用grep或vimgrep(而不是默認的FINDSTR) 。

+2

非常感謝你。這解決了這個問題:「:設置grepprg =內部」 – 2010-06-25 06:55:30

1

您應該嘗試vimgrep

2

安裝cygwinmingwunxutils得到grep的(我用的cygwin)。將bin目錄添加到PATH中。

而像Habi said,添加到您的vimrc:

set grepprg=grep\ -nH 

(這是在* nix grep的默認使用。)

此外,如果你:help grep,你會得到的說明grep和vimgrep之間的區別。 (速度與便攜性和靈活性。)

+0

在我的情況下,我不得不使用'設置grepprg = grep \ -nH',但否則這工作完美。 – 2013-07-12 16:29:27

+0

@Smashd:修正! – idbrii 2013-07-17 20:44:39

1

在Windows上,如果要掛接到更快findstr可以使用

set grepprg=findstr\ /n\ /s

在你。的vimrc現在

:vimgrep methodname **/*.py相當於

:grep methodname *.py

兩種方法都返回您可以通過quickfix窗口瀏覽結果的列表(:copen:cn/:cp:cclose

以我的經驗FINDSTR比vimgrep快大約30倍,但是它可能與你的項目大小無關,vimgrep的正則表達式更適合使用。

0

請注意:grep不是vim的內部grep(即:vimgrep),而是外部grep程序的包裝器。

如果您安裝了替代模式匹配器(即MinGW's或Cygwin的grep),您可以編輯您的vimrc文件來代替它。

set grepprg=C:/MinGW/msys/1.0/bin/egrep\ -nR\ $*\ * 

的「$ 」是你的表達會走,「」末意味着每個文件類型。 Grep足夠快,或者我的代碼庫足夠小,我不在意限制文件類型。使用-n和-R標誌將使其返回結果非常像vimgrep(顯然,模式表達式將會不同)。

0

**由'grepprg'中指定的外部工具進行擴展,對於Windows,由於grepprg只是findstr工具,因此未擴展。

但是你傳給Vim的命令行的任何參數也去的工具,所以只是做一個遞歸FINDSTR搜索:

:grep /S pattern *.txt 
相關問題