为什么要使用双星号?
我在vimgrep
上阅读了Vim的帮助,在堆栈溢出和vimcast上四处查看,虽然我发现很多人说这是如何当前目录中,我还没有找到为什么的解释。
让我们使用一个示例使其更易于解释。如果我想在当前目录中查找所有出现的foo,请使用
:vim[grep][!] /{pattern}/[g][j] {file}
所以变成
:vimgrep /foo/ **/*
因此,请查看此grep的{file}
部分:
*
)是通配符。我的具体问题是为什么它采用
的格式 **/*
不是
*/*
在几种不同的情况下,我尝试使用 / 进行搜索,这似乎是在当前目录正好1深度的任何目录中搜索任何文件,我认为这就是为什么使用双星号的原因。
ie为什么会有双星号?这是否通过一些我不完全理解的聪明机制表明“我希望您进行递归搜索”,或者这仅仅是一个用来表示“递归搜索”的关键字?我完全离开了,这不是vim的内置部分,而是shell的一部分吗? (这些部分不是我的实际问题,而是有助于理解我的困惑,上面是我的实际问题)。
如果有什么办法可以改善我的问题,请告诉我,这是我第一次问。
答案 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个目录,因此您可以使用它来 搜索整个目录树
-可以通过添加数字来给出匹配的最大级别数 到“ **”。