Emacs imenu и speedbar + семантический сбой из-за отступа в режиме c ++

Моя проблема заключается в том, что imenu или speedbar / семантический сбой из-за отступа Для этого простого файла это нормально:

#include <iostream>
void bar() {
std::cout << "bar" << std::endl;
}

Но если я хочу поместить панель функций в пространство имен и сделать отступ для ее кода:

  • со спидбаром (require 'semantic/sb) в init.el) у меня нет меток файла в рамке спидбара, и я получил «Ошибка спецификации режима файла: (void-function c-subword-mode)» в минибуфере

  • с именем M-X в минибуфере я получил сообщение «Нет элементов, подходящих для индекса, найденного в этом буфере»

Пример кода, который не работает:

#include <iostream>

namespace foo {
void bar() {
std::cout << "bar" << std::endl;
}
}

Это не пространство имен, которое делает его неудачным, а идентификация. Следующие ошибки тоже:

#include <iostream>
void bar() {
std::cout << "bar" << std::endl;
}

Есть идеи почему и как заставить это работать?

Спасибо!!

РЕДАКТИРОВАТЬ: Хорошо, решение действительно спидбар + семантика. Это на самом деле работает (у меня что-то не так в моем init.el …)

1

Решение

Может быть, пример регулярного выражения из imenu.el используется вместе с imenu-example--create-c-index:

(defvar imenu-example--function-name-regexp-c
(concat
"^[a-zA-Z0-9]+[ \t]?"        ; type specs; there can be no
"\\([a-zA-Z0-9_*]+[ \t]+\\)?"    ; more than 3 tokens, right?
"\\([a-zA-Z0-9_*]+[ \t]+\\)?""\\([*&]+[ \t]*\\)?"         ; pointer
"\\([a-zA-Z0-9_*]+\\)[ \t]*("    ; name
))

Карета ^ в начале означает начало строки. Если вы вставите [[:blank:]]* за этим также индексируются определения функций с ведущими пробелами.

Я не знаю, как что-то вроде

else if(...) {
...
}

дает ложные срабатывания в этом случае. (Ты должен попробовать.)

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

Обратите внимание, я не пробовал это. Я только что посмотрел на imenu.el, (В настоящее время у меня мало свободного времени. Извините.)

1

Другие решения


По вопросам рекламы [email protected]