Mac原生Vim默认grepprg配置中$*占位符的含义与作用
Vim原生
grepprg配置中$*的工作机制 基础认知澄清
配置里出现的$*是 Vim为grepprg自定义的专属占位符,和shell脚本语法里同名字符串只是写法巧合,二者没有功能上的绑定关系。
具体工作流程
Vim在触发grep相关命令时,会按照内置的占位符规则解析grepprg的配置内容:
- 当你在Vim中执行
:grep命令输入任意参数(包括搜索关键词、自定义筛选范围、额外指定的命令行规则)时,这一整串输入内容会被Vim提取出来,替换掉grepprg配置中$*所在的位置,拼接成最终需要交给系统shell执行的完整grep命令。 - 以Mac原生默认配置
grepprg=grep -n $* /dev/null为例,如果你在Vim里执行:grep "需要搜索的内容" ./src,Vim会把$*替换成"需要搜索的内容" ./src,最终实际在shell中执行的命令为:grep -n "需要搜索的内容" ./src /dev/null。 - 这个占位符没有固定位置要求,如果你手动修改
grepprg配置,把$*移到命令的任意位置,Vim都会把你输入的grep参数插入到你指定的位置,不会强制将参数拼接到命令末尾。
常见混淆来源
很多开发者第一次看到这个配置时,会对$*的含义产生误判:
- 有人会把它当成正则表达式的组成部分,实际上它既不属于正则规则,也不是直接写给shell的语法片段,完全是Vim配置层面的约定占位符
- Shell语法中的
$*是内置特殊变量,作用是指代当前脚本/命令接收到的所有位置参数的拼接字符串 - Vim在解析这个配置时,会优先识别自身定义的占位符规则,完成参数替换、拼出完整可执行命令后,才会把整条命令传递给shell执行,因此shell根本不会看到配置中原始的
$*字符串,自然也不会触发shell层面$*的特殊解析逻辑。
内容的提问来源于stack exchange,提问作者chunyun
相关产品推荐
相关产品推荐

