Использование Vim: make с quickfix заканчивает тем, что создает новый файл, когда ошибка находится в заголовке - PullRequest
8 голосов
/ 19 июля 2011

У меня есть настройка с Vim, где я могу скомпилировать свой код C / C ++, используя :make, и ошибки компиляции автоматически отображаются в окне быстрого исправления, используя следующие строки (из вики Vim) по моему ./vimrc:

" Automatically open, but do not go to (if there are errors) the quickfix /
" location list window, or close it when is has become empty. 
"
" Note: Must allow nesting of autocmds to enable any customizations for quickfix
" buffers. 
" Note: Normally, :cwindow jumps to the quickfix window if the command opens it
" (but not if it's already open). However, as part of the autocmd, this doesn't
" seem to happen. 
autocmd QuickFixCmdPost [^l]* nested cwindow
autocmd QuickFixCmdPost    l* nested lwindow

Теперь эта настройка работает хорошо, если в файле .cpp есть ошибка , так как выходные данные из make правильно проанализированы:

$ make
g++    -c -o IsingMain.o IsingMain.cpp
g++    -c -o LatticeModel.o LatticeModel.cpp
LatticeModel.cpp: In member function ‘void LatticeModel::initialiseSystem()’:
LatticeModel.cpp:18:25: error: ‘sirand’ was not declared in this scope

т.е. vim правильно переключается на LatticeModel.cpp.


Однако, если ошибка находится в заголовочном файле , вывод make неверно интерпретируется, и vim переключает / создает новый буфер (для следующего примера make output) с именем "In file included from IsingMain.cpp" , явно ошибочно полагая, что это файл с ошибкой (на самом деле ошибка в LatticeModel.h):

$ make
g++    -c -o IsingMain.o IsingMain.cpp
In file included from IsingMain.cpp:2:0:
LatticeModel.h:31:5: error: ‘Zvoid’ does not name a type

Запуск make из командной строки работает отлично, это просто проблема, связанная с неправильным чтением исправлений в выводе. Любая помощь с благодарностью, дайте мне знать, если какая-то часть этого сбивает с толку. Спасибо

РЕДАКТИРОВАТЬ : Кажется, что-то связано с неправильным форматом ошибки (как описано в этой теме .)

РЕДАКТИРОВАТЬ 2 : Временное исправление найдено путем игнорирования строки make output, которая начинается с «In file from from» с использованием этой техники .

1 Ответ

5 голосов
/ 25 октября 2011

Хотя я до сих пор не нашел правильного решения, предложенное здесь решение: http://groups.google.com/group/vim_dev/msg/ed4f258f5b4b9749 кажется, работает на данный момент.

set errorformat^=%-GIn\ file\ included\ %.%# 

РЕДАКТИРОВАТЬ : см. Также Vim пытается перейти к несуществующему файлу после: make

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...