如何使用findstr,在gvim中排除svn目录

时间:2013-07-29 07:12:17

标签: svn vim cmd findstr

我想查找目录中包含关键字的所有文件以及所有子目录,并且有一些.svn目录,我应该将这些目录放入其中。

在Linux系统中,我可以通过以下方式轻松完成:

  grep -r keyword ./ --exclude-dir ".svn"

但是当我转向窗口时,findstr代替了Windows中的grep,我尝试这样做:

  findstr /s keyword ./*

结果将返回.svn目录,这不是我想要的。

我读了TN Findstr, on microsoft website

  /v   : Prints only lines that do not contain a match.

但是,当我尝试下面的内容时,它仍然不起作用。

 findstr /s keyword /v ".svn" ./*

我认为使用findstr可能存在一些问题。任何帮助都会很棒,提前谢谢。

        ***************************** update1 *****************************

事实上,我想在grep中使用GVim,它会调用'findstr`。

4 个答案:

答案 0 :(得分:2)

AFAIK您无法排除findstr中的特定(子)文件夹。在PowerShell中,您可以执行以下操作:

$root = '.'
$keyword = 'keyword'

Get-ChildItem $root -Recurse -Force | ? {
  -not $_.PSIsContainer -and $_.FullName -notlike "*\.svn*"
} | Select-String $keyword -AllMatches

或者您可以利用.svn子文件夹被隐藏的事实并执行此操作:

$root = '.'
$keyword = "keyword"

Get-ChildItem $root -Recurse | ? { -not $_.PSIsContainer } |
    Select-String $keyword -AllMatches

但是,如果要搜索的某些文件设置了hidden属性,则无法工作。

答案 1 :(得分:1)

这应该有效,假设您的文件未在内容中返回.svn\

 findstr /s "keyword" * |findstr /v /i /L ".svn\"

答案 2 :(得分:0)

感谢@ Christian.K的帮助,我解决了这个问题:

我将grepprg设置如下:

 :set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\"

上述选项仅与.svn匹配。如果您想与.svn\中的gvim匹配,您应该:

 :set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\\\\\"

答案 3 :(得分:0)

尝试创建包含此文件的bat文件find.bat并键入find . keyword。如果您愿意,可以使用doskey隐藏必须输入.

@echo off
SETLOCAL
set curDir=%1
if "%curDir%"=="." set curDir=%cd%
for /f %%i in ('dir /b/a-h-d %curDir% 2^>nul') do findstr /ilmp %2 %curDir%\%%i
for /f %%i in ('dir /b/ad-h %curDir%') do call %0 %curDir%\%%i %2
ENDLOCAL
相关问题