我在vimrc中将grep程序定义如下:
set grepprg=grep\ -R\ --exclude=*~\ --exclude=*.swp\ --exclude-dir=vendor\ --exclude-dir=node_modules\ --exclude=tags\ --exclude=tags.vendor
搜索时,它会显示一个结果列表,但是,当我执行:copen
时,尽管它将列出文件,但无法打开它们。
答案 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'
标志::)