2010-06-24 10 views
5

intento usar grep interno de vim con '**' comodín como en el siguiente comando:Vim: comodín de grep no funciona en Windows

grep "test" **\*.txt 

vim da el siguiente error:

FINDSTR: Cannot open **\*.txt 

Cuando me quito el comodín '**', el comando funciona correctamente:

grep "test" *.txt 

he cambiado el ba ckslashes para reenviar barras diagonales, pero no ayudó tampoco:

grep "test" **\*.txt 

Esto produce el error anterior nuevamente.

¿Cuál podría ser el motivo?

Nota: utilizo GVim 7.2 en Microsoft Windows XP.

Respuesta

5

Hacer un ": grep" en Vim en XP no usa "grep.exe" de forma predeterminada. Por defecto se usa "FINDSTR" que es la parte de la instalación de Windows. "FINDSTR" no es compatible a grep. Debido a esto, aparece el mensaje de error

FINDSTR: Cannot open **\*.txt 

Ver ": help grepprg".

Si desea utilizar un puerto de grep de Windows, debe instalar ya que grep no es parte de Windows ni de la instalación de Vim .

Pero desde 7.0 Vim tiene un grep interno llamado vimgrep. Consulte ": help vimgrep" para más detalles.

Debe configurar 'grepprg' según corresponda para que se use grep o vimgrep (en lugar del FINDSTR predeterminado).

+2

Muchas gracias. Esto resolvió el problema: ": set grepprg = internal" –

1

Deberías probar vimgrep.

2

Instalar cygwin, mingw, ounxutils para obtener grep (utilizo cygwin). Agregue el directorio bin a su RUTA.

Y como Habi said, añadir a su vimrc:

set grepprg=grep\ -nH 

(Esto es lo que grep en * nix usa por defecto.)

Además, si :help grep, obtendrá una descripción de las diferencias entre grep y vimgrep. (Velocidad vs portabilidad y flexibilidad.)

+0

En mi caso tuve que usar 'set grepprg = grep \ -nH', pero de lo contrario, funcionó perfectamente. –

+0

@Smashd: ¡Solucionado! – idbrii

1

En Windows, si desea conectar en el más rápido findstr puede utilizar

set grepprg=findstr\ /n\ /s

En su.vimrc y ahora

:vimgrep methodname **/*.py es equivalente a

:grep methodname *.py

Ambos devuelven una lista de resultados que puede navegar a través de la ventana quickfix (:copen, :cn/:cp, :cclose)

En mi experiencia findstr es aproximadamente 30 veces más rápido que vimgrep, sin embargo, puede que no importe con el tamaño de su proyecto y la expresión regular de vimgrep es mucho más fácil de usar.

0

Tenga en cuenta que: grep no es la grep interna de vim (es decir, vimgrep), sino un contenedor para el programa grep externo.

Si tiene instalado un emparejador de patrones alternativo (es decir, MinGW o Cygwin's grep), puede editar su archivo vimrc para usarlo.

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

El '$ ' es donde su expresión se irá, el '' al final significa que cada tipo de archivo. Grep es lo suficientemente rápido o mi código base es lo suficientemente pequeño como para no limitar los tipos de archivos. Usar los indicadores -n y -R hará que devuelva resultados muy parecidos a vimgrep (obviamente las expresiones de patrón serán diferentes).

0

** se ha expandido mediante la herramienta externa especificada en 'grepprg', o en el caso de Windows, no se ha expandido, ya que grepprg es solo la herramienta de descubrimiento.

Pero cualesquiera argumentos que pasa en la línea de comandos de Vim también a la herramienta, por lo que acaba de hacer una búsqueda recursiva findstr:

:grep /S pattern *.txt