У меня проблема с подсветкой синтаксиса в 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")))
Я только что попробовал то же самое с моими собственными 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].
Других решений пока нет …