Vim:自定义grep会找到文件,但不会打开它们

时间:2019-03-20 17:50:34

标签: vim grep

我在vimrc中将grep程序定义如下:

set grepprg=grep\ -R\ --exclude=*~\ --exclude=*.swp\ --exclude-dir=vendor\ --exclude-dir=node_modules\ --exclude=tags\ --exclude=tags.vendor

搜索时,它会显示一个结果列表,但是,当我执行:copen时,尽管它将列出文件,但无法打开它们。

1 个答案:

答案 0 :(得分:2)

根据:grep中指定的逗号分隔格式,'grepformat'填充了快速修复/位置列表。

'grepformat'默认为%f:%l:%m,%f:%l%m,%f %l%m。这里,%f是文件名,%l是该行,%m是实际匹配的行。 grep输出的每一行都与每种格式匹配,直到成功为止。

如果没有格式匹配,则该行将按您的情况按原样添加到快速修复列表中。这只是文本,Vim不知道如何处理该行。

默认情况下,我的BSD grep版本会为file: message返回类似grep -R的行。因此,采用%f:%l:%m的第一种格式,行号丢失。查看联机帮助页,这就是-n标志的作用。

因此,请尝试以下操作:

set grepprg=grep\ -nR\ --exclude=*~\ --exclude=*.swp\ --exclude-dir=vendor\ --exclude-dir=node_modules\ --exclude=tags\ --exclude=tags.vendor

然后,:silent grep foo . | copen应该可以正常工作!

(Psssh,-n中也提到了:h 'grepprg'标志::)