2014-12-13 5 views
3

У меня есть проблема с дефолтом compilation-error-regexp-* сопрягая любую линию с двумя отдельными колоннами, как код ошибкиEmacs компиляция режим разметки неправильных линий как ошибки

примера: file:15: будет ссылка на линию 15 в пути file

Но, к сожалению, # file:15: теперь ссылается на путь # file, которого нет.

Пожалуйста, попробуйте скомпилировать следующий либо в Perl или режиме питона (она действует на обоих языках), и вы поймете мою проблему:

print "# file:15:"; 

Я не могу игнорировать это, потому что я активировал compilation-auto-jump-to-first-error который очень удобно, но теперь он всплывает в файловом браузере, пытаясь открыть этот не существующий файл # file:15:.

Я уже проверил compilation-error-regexp-alist и compilation-error-regexp-alist-alist, но мои настройки perl не включают такое регулярное выражение, и у меня даже нет настроек для python.

Я проверил с помощью «emacs -Q», чтобы убедиться, что это не мои настройки.

M-x compile RET python /tmp/py.py RET 

с выше код будет Highlite # файл: 15: в строке ошибки

Вопрос: как я могу переопределить это регулярное выражение или избавиться от него?

веселит LanX

+0

Лучшее звено ** crosspost ** на гну-Emacs-помощь https: // группы .google.com/д/тзд/gnu.emacs.help/FHwkCeThDzQ/CYtN8j8A9VQJ – LanX

ответ

2

UPDATE: Нету настройки grep-regexp-alist пустой список не решить.

OK Я думаю, что нашел проблему.

Глядя в compile.el показал, что grep-regexp-alist также оценивается»(почему ???).

И кто-то изменил первую запись в

(("^\\(.+?\\)\\(:[  ]*\\)\\([0-9]+\\)\\2" 1 3) 
    ... 

. + Означает, что что-нибудь между стартом и первым двоеточие берется как имя файла, включая пробелы и хэши.

пока не знаю, как отключить регулярное выражение, предназначенные для вывода Grep при компиляции сценария, будет обновляться, как только я знаю.

1

OK

Я выкопал в источники компиляции, но я не смог идентифицировать происхождение этого жадного стандартного регулярного выражения.

Но я нашел обходное решение!

Нужно определить собственное регулярное выражение, которое соответствует тем же строкам, что и регулярное выражение по умолчанию, и может корректировать соответствующие группы, чтобы избежать странных символов.

Это доказательство концепции

(add-to-list 'compilation-error-regexp-alist-alist '(perl "^.*?\\([a-zA-Z/][^ \n#]+\\):\\([0-9]+\\):" 1 2)) 

Теперь только пути, начиная с символа или косой чертой и без пробелов или # между совпадают. Любые другие ведущие символы игнорируются.

Конечно, вам нужно будет добавить старое регулярное выражение для типичных сообщений об ошибках Perl, я оставил это для удобства чтения.

И вы должны сделать это для каждого режима программирования ...

НТН LanX

 Смежные вопросы

  • Нет связанных вопросов^_^