У меня есть настройка с 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» с использованием этой техники .