Подсветка синтаксиса в emacs для c ++ с использованием & quot; const & quot; ключевое слово

У меня проблема с подсветкой синтаксиса в emacs при написании c ++ с использованием const ключевое слово. MWE является следующим

#include <iostream>

class MyClass{
pulbic:
void helloWorld();
};

void MyClass::helloWorld(){
std::cout << "Hello, World!\n";
}

int main(){
MyClass const * myClass0; // "MyClass" is not highlighted correctly
MyClass * const myClass1; // "myclass1" is not highlighted correctly
MyClass const * const myClass2; // both not highlighted correctly
return 0;
}

Ссылаясь на приведенный выше код, проблема заключается в выделении для типа Class и для экземпляра экземпляра объекта. Он не выделяет их как другой определенный тип ключевого слова, он просто оставляет им нейтральный цвет текста.
(обратите внимание, что выделение в приведенном выше коде НЕ является тем, что я вижу в emacs …)

Я попытался закомментировать мой файл `.emacs ‘, чтобы увидеть, не испортил ли его какой-либо код, но это ничего не изменило.

Моя версия emacs — 23.3.1, и я использую ее в Ubuntu 12.04. Мой файл `.emacs ‘

(setq backup-by-copying t
backup-directory-alist '(("." . "~/.emacsBkups"))
delete-old-versions t
kept-new-versions 5
kept-old-versions 2
version-control t)(auto-fill-mode 1)

(setq-default fill-column 80)

(setq LaTeX-item-indent 0)

(setq LaTeX-break-at-separators '(\\\( \\\) \\\[ \\\] \\\{ \\\} "$"))

(setq LaTeX-command-style '(("" "%(PDF)%(latex) -file-line-error %S%(PDFout)")))

(add-to-list 'auto-mode-alist '("\\.Rnw\\'" . Rnw-mode))
(add-to-list 'auto-mode-alist '("\\.Snw\\'" . Rnw-mode))
(setq reftex-file-extensions
'(("Snw" "Rnw" "nw" "tex" ".tex" ".ltx") ("bib" ".bib")))
(setq TeX-file-extensions
'("Snw" "Rnw" "nw" "tex" "sty" "cls" "ltx" "texi" "texinfo"))

(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq TeX-PDF-mode t)

(require 'ess-site)
(ess-toggle-underscore nil)
(require 'whitespace)
(setq whitespace-style '(lines face))
(setq whitespace-line-column 80)(add-hook 'c-mode-hook 'whitespace-mode)
(add-hook 'c++-mode-hook 'whitespace-mode)
(add-hook 'python-mode-hook 'whitespace-mode)

(c-set-offset (quote cpp-macro) 0 nil)
(c-set-offset 'access-label '/)

;; SyncTeX
(setq TeX-source-correlate-mode t)
(setq TeX-source-correlate-method 'synctex)
;;(setq TeX-source-correlate-start-server t)
(load "server")
(unless (server-running-p) (server-start))
'(LaTeX-command "latex -synctex=1");; evince viewer
;;(setq TeX-view-program-list '(("Evince" "evince --page-index=%(outpage) %o")))
;;(setq TeX-view-program-selection '((output-pdf "Evince")))

;; okular viewer
(setq TeX-view-program-list '(("Okular" "okular --unique %o#src:%n%b")))
(setq TeX-view-program-selection '((output-pdf "Okular")));; okular viewer
;;(setq TeX-view-program-list '(("Okular" "okular --unique %u")))

;;(add-hook 'LaTeX-mode-hook '(lambda ()
;;                  (add-to-list 'TeX-expand-list
;;                       '("%u" Okular-make-url))))

;;(defun Okular-make-url () (concat
;;               "file://";;               (expand-file-name (funcall file (TeX-output-extension) t)
;;                         (file-name-directory (TeX-master-file)))
;;               "#src:";;'(100)
;;               (expand-file-name (TeX-master-directory))
;;               "./";;               (TeX-current-file-name-master-relative)))

;;(setq TeX-view-program-selection '((output-pdf "Okular")))

1

Решение

Я только что попробовал то же самое с моими собственными emacs (v 24.2.1 в Windows). Я вижу, что идентификаторы переменных окрашены правильно, но не MyClass на первой и третьей декларации. Так что это улучшение.

В качестве эксперимента я попытался переместить «const» в начало строки в строках 1 и 3. Это раскрасило это правильно. Это более нормальный порядок для «const», хотя я не фанат этого. Тем не менее, если вы делаете вещи иначе, чем большинство людей, вы должны ожидать таких вещей. 🙁

Я бы предложил обновить ваш emacs до 24 или более поздней версии для лучшей окраски синтаксиса C ++. Если вам все еще не нравится это, код elisp для режима C ++ находится в lisp / cc-mode.el, так что вы можете исправить это самостоятельно.

Если вы не знакомы с emacs Lisp-кодированием, вы можете попробовать загрузить и установить последнюю версию cc-mode.el прямо из Сайт проекта. Согласно имеющейся информации, текущий режим должен работать без изменений в вашей версии emacs (я верю, что когда я его увижу). Если последняя версия все еще не работает прямо там, их строка ошибки находится в [email protected].

1

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

Других решений пока нет …

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