为什么在:vimgrep vim命令中使用** / *递归搜索当前目录?

时间:2018-07-12 13:12:23

标签: regex vim glob vimgrep

为什么要使用双星号?

我在vimgrep上阅读了Vim的帮助,在堆栈溢出和vimcast上四处查看,虽然我发现很多人说这是如何当前目录中,我还没有找到为什么的解释。

让我们使用一个示例使其更易于解释。如果我想在当前目录中查找所有出现的foo,请使用

:vim[grep][!] /{pattern}/[g][j] {file}

所以变成

:vimgrep /foo/ **/*

因此,请查看此grep的{file}部分:

  • 我知道这是一个文件路径。
  • 我知道星号(*)是通配符。
  • 我知道正斜杠充当 目录分隔符。

我的具体问题是为什么它采用

的格式

**/*

不是

*/*

在几种不同的情况下,我尝试使用 / 进行搜索,这似乎是在当前目录正好1深度的任何目录中搜索任何文件,我认为这就是为什么使用双星号的原因。

ie为什么会有双星号?这是否通过一些我不完全理解的聪明机制表明“我希望您进行递归搜索”,或者这仅仅是一个用来表示“递归搜索”的关键字?我完全离开了,这不是vim的内置部分,而是shell的一部分吗? (这些部分不是我的实际问题,而是有助于理解我的困惑,上面是我的实际问题)。

如果有什么办法可以改善我的问题,请告诉我,这是我第一次问。

1 个答案:

答案 0 :(得分:1)

简短答案:

双星号是vim的内置关键字,仅表示“递归搜索”。 之所以使用它,是因为vim的创建者选择在这种情况下使用它。

更长的答案:

在两种情况下,使用**:文件搜索和其他情况。

Vim帮助很好地解释了这一点。

有关“其余”的信息,请参见:help wildcard:help starstar-wildcard

来自:help wildcard

  

**匹配所有内容,包括任何内容,都递归到目录中

:help starstar-wildcard指定:

  

在Unix,Win32,Mac OS / X和其他一些版本上可以扩展“ **”   系统。这允许搜索目录树。这取决于   100个目录。


有关文件搜索,请参见:help **:help starstar

引用相关部分(重点是我的话):

  

文件搜索当前用于'path','cdpath'和   finddir()和findfile()的“标签”选项。其他命令使用   通配符稍有不同。

[...]

  

向下搜索使用通配符'*','**'以及其他通配符
  操作系统支持。 '*'和'**'在内部 Vim中处理,
     因此它们可以在所有操作系统上使用。

[...]

  

'**'更复杂:
        -仅与目录匹配。
   -默认情况下,它最多可匹配30个目录,因此您可以使用它来           搜索整个目录树
        -可以通过添加数字来给出匹配的最大级别数           到“ **”。