Vim命令模式配置ag搜索C文件映射的引号与转义问题
问题原因&修复方案
首先确认你已在vimrc中配置ag作为grep程序的默认后端:
set grepprg=ag\ --nogroup\ --nocolor\ --skip-vcs-ignores
你原配置失效的核心问题有两个:
:grep命令后的参数是直接传递给ag的,不需要加Vim脚本的字符串拼接符.,加了会被识别为搜索参数的一部分导致报错- 引号内的特殊字符转义规则错误:Vim命令行中单引号包裹的内容会原样透传给下游程序,不需要额外转义
|为<Bar>,且你写的正则冗余多了不必要的+量词
可用的正确配置
nnoremap ,k :grep! "\b<C-R><C-W>\b" -G '\.(h|c)$'<CR>:cw<CR>
配置说明
- 搜索关键词部分用双引号包裹,确保
<C-R><C-W>取到的当前光标下单词可以正常插入,\b是正则词边界匹配,避免命中包含关键词的长单词 -G后的文件过滤规则用单引号包裹,直接传给ag做正则匹配:\.(h|c)$表示匹配所有后缀为.h或.c的C语言相关文件- 末尾的
<CR>:cw<CR>表示执行搜索后自动打开quickfix窗口展示结果
内容的提问来源于stack exchange,提问作者Gregory Kuhn
相关产品推荐
相关产品推荐

