Как поместить вывод cscope в окно быстрого исправления Vim? - PullRequest
7 голосов
/ 13 июля 2011

Я хочу перенаправить вывод из cscope в окно быстрого исправления Vim.Клеевая часть достаточно проста, но в настоящее время я застрял в формате ошибки.Вот пример из вывода cscope (cscope -L -1 bar):

Format: "filename scope linenumber sourceline"
Example: "abc.cpp foo 25 bar()"

Это означает, что внутри foo (), в строке 25 в abc.cpp есть вызов bar ().

efm = %f\ %*[^\ ]\ %l\ %m работает, но информация о области действия теряется.Например:

Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar()"

Я хочу включить область в окне быстрого исправления, например:

Input: "abc.cpp foo 25 bar()" becomes
Output: "abc.cpp |25| bar() inside foo()"

Можно ли сделать это только с помощью errorformat, или мне нужнонаписать скрипт для управления выводом перед передачей его в Vim?

1 Ответ

8 голосов
/ 13 июля 2011

Вместо того, чтобы возиться с errorformat, просто установите cscopequickfix и используйте обычные команды :cscope.например.(из справки vim)

:set cscopequickfix=s-,c-,d-,i-,t-,e-

Редактировать

Вы также можете использовать фильтр, подобный следующему, чтобы изменить порядок полей

sed -e 's/^\([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \(.*\)$/\1 \3 \4 inside \2/'

установить его для фильтрации вашего сообщения,затем используйте efm

errorformat=%f\ %l\ %m
...