他们为什么使用双星号?
我已经阅读了Vim对vimgrep的帮助,我已经查看了堆栈溢出和vimcasts,虽然我发现很多人说这是你在当前目录中递归搜索的方式,但我没有找到解释为什么.
让我们用一个例子来解释.如果我想在当前目录中查找所有出现的foo并向下,我可以使用
:vim[grep][!] /{pattern}/[g][j] {file}
这样就变成了
:vimgrep /foo/ **/*
所以看看这个grep的{file}部分:
>我明白这是一个文件路径.
>我知道星号(*)是一个通配符.
>我明白前锋斜线就是一个
目录分隔符.
我的具体问题是为什么它的格式为
** / *
并不是
* / *
我尝试使用/在几个不同的情况下搜索,这似乎搜索任何目录中的任何文件正好距我当前目录1深,我假设这是为什么使用双星号.
即为什么它是一个双星号?这是否表明“我希望你通过一些我不完全理解的聪明机制来递归搜索”,或者这仅仅是一个用于说“递归搜索”的关键字?我是完全关闭的,这不是vim的内置部分,而是shell的一部分吗? (这些部分不是我的实际问题,而是用来理解我所困惑的,我的实际问题在上面).
如果我有任何方法可以改进我的问题,请告诉我,这是我第一次提问.
最佳答案 简短回答:
双星号是一个vim内置关键字,简单地说是“递归搜索”.
它被使用,因为vim的创建者选择在这种情况下使用它.
更长的回答:
有两种不同的情况,使用**:文件搜索和其余的.
Vim帮助很好地解释了这一点.
对于’休息’,请参阅:help wildcard和:help starstar-wildcard:
来自:help wildcard:
** matches anything, including nothing, recurses into directories
和:help starstar-wildcard指定:
Expanding “**” is possible on Unix, Win32, Mac OS/X and a few other
systems. This allows searching a directory tree. This goes up to
100 directories deep.
有关文件搜索,请参阅:help **或:help starstar.
引用相关部分(强调我的):
The file searching is currently used for the ‘path’, ‘cdpath’ and
‘tags’ options, for finddir() and findfile(). Other commands use
wildcards which is slightly different.
[…]
Downward search uses the wildcards ‘*’, ‘**’ and possibly others
supported by your operating system. ‘*’ and ‘**’ are handled inside Vim,
so they work on all operating systems.
[…]
‘**’ is more sophisticated:
– It ONLY matches directories.
– It matches up to 30 directories deep by default, so you can use it to
search an entire directory tree
– The maximum number of levels matched can be given by appending a number
to ‘**’.