2010-06-24 15 views
5

próbuję użyć wewnętrznego grep vim jest z '**' zamiennika jak w poniższym poleceniem:vim: wieloznaczny grep nie działa w oknach

grep "test" **\*.txt 

vim daje następujący błąd:

FINDSTR: Cannot open **\*.txt 

Kiedy Usuwam '**' wieloznaczny, polecenie działa poprawnie:

grep "test" *.txt 

Zmieniłem ba ckslashes do przekazywania ukośników, ale to nie pomogło ani:

grep "test" **\*.txt 

Daje powyższy błąd ponownie.

Jaki może być tego powód?

Uwaga: Używam GVim 7.2 w systemie Microsoft Windows XP.

Odpowiedz

5

Wykonanie ": grep" w Vimie pod XP nie używa domyślnie "grep.exe" . Domyślnie używany jest "FINDSTR", który jest częścią instalacji systemu Windows. "FINDSTR" nie jest zgodny z na grep. Z tego powodu pojawia się komunikat o błędzie:

FINDSTR: Cannot open **\*.txt 

Zobacz ": help grepprg".

Jeśli chcesz użyć portu Windows grep, musisz zainstalować , ponieważ grep nie jest ani częścią Windows, ani instalacją Vim .

Ale od 7.0 Vim ma wewnętrzny grep o nazwie vimgrep. Zobacz ": help vimgrep", aby uzyskać szczegółowe informacje.

Musisz ustawić 'grepprg' odpowiednio, aby użyć albo grep lub vimgrep (zamiast domyślnego FINDSTR).

+2

Dziękuję bardzo. Rozwiązało to problem: ": set grepprg = internal" –

2

Install cygwin, mingw, lubunxutils uzyskać grep (używam cygwin). Dodaj katalog bin do swojej zmiennej PATH.

I jak Habi said, dodać do vimrc:

set grepprg=grep\ -nH 

(To co grep na * nix używa domyślnie.)

Ponadto, jeśli :help grep, dostaniesz opis różnice między grep i vimgrep. (Speed ​​vs. przenośności i elastyczności.)

+0

W moim przypadku musiałem użyć 'set grepprg = grep \ -nH', ale poza tym działało idealnie. –

+0

@Smashd: Naprawiono! – idbrii

1

W systemie Windows, jeśli chcesz, aby podłączyć się szybciej findstr można użyć

set grepprg=findstr\ /n\ /s

w twojej.vimrc i teraz

:vimgrep methodname **/*.py jest równoważna

:grep methodname *.py

Zarówno zwróci listę wyników można nawigować po quickfix oknie (:copen, :cn/:cp, :cclose)

w moim doświadczeniu findstr jest około 30 razy szybszy niż vimgrep, jednak może nie mieć znaczenia rozmiar twojego projektu i regex vimgrep są znacznie przyjemniejsze w użyciu.

0

Należy zauważyć, że: grep nie jest wewnętrznym grepem vima (to znaczy: vimgrep), ale otokiem dla zewnętrznego programu grep.

Jeśli masz zainstalowany alternatywny wzorzec matematyczny (np. Greg MinGW lub Cygwin), możesz edytować plik vimrc, aby go użyć.

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

The '$ ' jest gdzie wyrażenie będzie odchodzenie, '' na końcu oznacza każdy typ pliku. Grep jest wystarczająco szybki lub mój kod jest tak mały, że nie zależy mi na ograniczeniu typów plików. Użycie flag -n i -R sprawi, że zwróci wyniki podobne do vimgrep (oczywiście wyrażenia w tekście będą różne).

0

** jest rozszerzane przez zewnętrzne narzędzie określone w 'grepprg', lub w przypadku Windows, nie rozszerzone, ponieważ grepprg jest tylko narzędziem findstr.

Ale jakieś argumenty ty przechodzą na linii poleceń Vima również przejść do narzędzia, tak po prostu zrobić rekurencyjne przeszukiwanie findstr:

:grep /S pattern *.txt 
Powiązane problemy