1

在 Mac 上的 vanilla vim 中,当我键入 时:set grepprg?,它返回以下内容:

grepprg=grep -n $* /dev/null.

多亏了这里的一个老问题,我明白什么-n和意思。我也理解单独的含义和含义。但是,我不知道该怎么做。我试图在 vim 文档中查找它,但我能找到的只是/dev/null$*$*

占位符“$*”允许指定参数将被包含在哪里。

我觉得我在这里错过了一些重要的联系。如果有人可以向我解释$*作为占位符的工作原理,我将不胜感激。

更新:感谢@romainl 的详细解释,我意识到我被误解$*为正则表达式,而它们是 shell 脚本约定的一部分。事实上, 关于这个特定约定的旧帖子已经存在。傻我!

4

1 回答 1

3

除了您已经引用的内容之外,我不确定需要什么样的解释:

占位符“$*”允许指定参数将被包含在哪里。

$*只是一个占位符,它像所有占位符一样工作:在实际发送到 shell 之前,命令由&grepprg和构建$*如果存在,则被用户提供的任何模式、文件名、标志等替换。

假设您要foo\ bar在当前目录下的所有 JavaScript 文件中进行搜索。命令将是:

:grep 'foo\ bar' *.js

在你按下 之后<CR>,Vim 会抓取你给 的任何参数:grep,在这种情况下:

'foo\ bar' *.js

然后,如果有$*in &grepprg,则将其替换为给定的参数:

grep -n 'foo\ bar' *.js /dev/null

或者,如果没有$*in &grepprg,则将给定的参数附加到它,然后才将整个命令发送到 shell。

$*意思是“在这个命令中,我特别希望用户提供的参数出现在这里”。

至于$*……的含义,$*没有内在含义,$*可能是$$$PLACEHOLDER$$$或任何东西。$*可能已经选择了它,因为它在 shell 脚本中用于表示给函数或脚本的所有参数,这在含义上有点接近&grepprgwith中发生的事情$*

于 2021-04-22T16:12:01.297 回答