Список быстрых исправлений / местоположений заполняется на :grep
в соответствии с разделенными запятыми форматами, указанными в 'grepformat'
.
'grepformat'
, по умолчанию %f:%l:%m,%f:%l%m,%f %l%m
.Здесь %f
- это имя файла, %l
- строка, а %m
- фактически совпадающая строка.Каждая строка вывода grep сопоставляется с каждым форматом до тех пор, пока один из них не будет успешным.
Если ни один из форматов не соответствует, строка будет добавлена в список быстрых исправлений как есть, как в вашем случае.Это будет просто текст, и Vim не знает, как обрабатывать эту строку.
По умолчанию моя версия grep BSD возвращает строки, подобные 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'
.:)