Tôi đang chạy Emacs 23.3.1 (Ubuntu, gói Oneiric) và emacs không xuất hiện để hiểu bất kỳ của mới C++ 11 từ khóa, constexpr, thread_local, vv Ngoài ra nó không hiểu rằng '>> 'hiện được phép trong các tham số mẫu hoặc cú pháp' lớp enum 'mới. Có mô-đun cập nhật hoặc thay thế ở đâu đó không? Hoặc thất bại đó, một số cài đặt để làm cho emacs C + + thân thiện hơn trong thời gian có nghĩa là?Chế độ C++ 11 hoặc cài đặt cho emacs?
Trả lời
Tôi đã kiểm tra phiên bản thân cây, cc-mode
chưa được cập nhật và AFAIK không có thay thế. Nếu bạn thực sự muốn nó, nhưng không muốn để có được bàn tay của bạn bẩn, bạn nên trả một ai đó để thực hiện nó cho bạn ...
thực hiện dự án kickstarter: p –
Vâng, tôi đang sử dụng 24.1. Một số từ khóa C++ 98 bị thiếu và tất cả các từ khóa C++ 11 mới. Nó thậm chí không tạo ra các hằng số. Có vẻ như là C++ - chế độ chưa được cập nhật trong một thập kỷ.
Tôi đang sử dụng mã sau trong một thời gian dài và gần đây đã thêm từ khóa C++ 11. Hãy thử đặt nó trong .emacs; nó sẽ lấp đầy một số lỗ.
(require 'font-lock)
(defun --copy-face (new-face face)
"Define NEW-FACE from existing FACE."
(copy-face face new-face)
(eval `(defvar ,new-face nil))
(set new-face new-face))
(--copy-face 'font-lock-label-face ; labels, case, public, private, proteced, namespace-tags
'font-lock-keyword-face)
(--copy-face 'font-lock-doc-markup-face ; comment markups such as Javadoc-tags
'font-lock-doc-face)
(--copy-face 'font-lock-doc-string-face ; comment markups
'font-lock-comment-face)
(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)
(add-hook 'c++-mode-hook
'(lambda()
(font-lock-add-keywords
nil '(;; complete some fundamental keywords
("\\<\\(void\\|unsigned\\|signed\\|char\\|short\\|bool\\|int\\|long\\|float\\|double\\)\\>" . font-lock-keyword-face)
;; add the new C++11 keywords
("\\<\\(alignof\\|alignas\\|constexpr\\|decltype\\|noexcept\\|nullptr\\|static_assert\\|thread_local\\|override\\|final\\)\\>" . font-lock-keyword-face)
("\\<\\(char[0-9]+_t\\)\\>" . font-lock-keyword-face)
;; PREPROCESSOR_CONSTANT
("\\<[A-Z]+[A-Z_]+\\>" . font-lock-constant-face)
;; hexadecimal numbers
("\\<0[xX][0-9A-Fa-f]+\\>" . font-lock-constant-face)
;; integer/float/scientific numbers
("\\<[\\-+]*[0-9]*\\.?[0-9]+\\([ulUL]+\\|[eE][\\-+]?[0-9]+\\)?\\>" . font-lock-constant-face)
;; user-types (customize!)
("\\<[A-Za-z_]+[A-Za-z_0-9]*_\\(t\\|type\\|ptr\\)\\>" . font-lock-type-face)
("\\<\\(xstring\\|xchar\\)\\>" . font-lock-type-face)
))
) t)
Hy vọng điều này sẽ hữu ích.
Điều này thật tuyệt vời! Cảm ơn vì điều này. Tôi sẽ sử dụng điều này từ bây giờ. Bạn có nghĩ đến việc đóng góp cho dự án này không? –
Có lẽ ... tuy nhiên, ai duy trì chế độ cc? Tác giả đầu tiên là RMS (1985), Alan Mackenzie (2003). Tôi sẽ gửi thư đến gnu.org; chúng ta hãy xem những gì họ nói. –
@AndreasSpindler: Bản chỉnh sửa cuối cùng chắc chắn không phải trong năm 2003 - lần kiểm tra gần đây nhất nguồn được cách đây 2 tuần bởi Alan Mackenzie, xem [the changelog] (http://cc-mode.hg.sourceforge.net/hgweb/ cc-mode/cc-mode/log). –
Theo yêu cầu của Mike Weller ở đây, một phiên bản cập nhật cho các chuỗi ký tự C++ 11 (bao gồm các chữ cái do người dùng xác định).
(add-hook
'c++-mode-hook
'(lambda()
;; We could place some regexes into `c-mode-common-hook', but note that their evaluation order
;; matters.
(font-lock-add-keywords
nil '(;; complete some fundamental keywords
("\\<\\(void\\|unsigned\\|signed\\|char\\|short\\|bool\\|int\\|long\\|float\\|double\\)\\>" . font-lock-keyword-face)
;; namespace names and tags - these are rendered as constants by cc-mode
("\\<\\(\\w+::\\)" . font-lock-function-name-face)
;; new C++11 keywords
("\\<\\(alignof\\|alignas\\|constexpr\\|decltype\\|noexcept\\|nullptr\\|static_assert\\|thread_local\\|override\\|final\\)\\>" . font-lock-keyword-face)
("\\<\\(char16_t\\|char32_t\\)\\>" . font-lock-keyword-face)
;; PREPROCESSOR_CONSTANT, PREPROCESSORCONSTANT
("\\<[A-Z]*_[A-Z_]+\\>" . font-lock-constant-face)
("\\<[A-Z]\\{3,\\}\\>" . font-lock-constant-face)
;; hexadecimal numbers
("\\<0[xX][0-9A-Fa-f]+\\>" . font-lock-constant-face)
;; integer/float/scientific numbers
("\\<[\\-+]*[0-9]*\\.?[0-9]+\\([ulUL]+\\|[eE][\\-+]?[0-9]+\\)?\\>" . font-lock-constant-face)
;; c++11 string literals
;; L"wide string"
;; L"wide string with UNICODE codepoint: \u2018"
;; u8"UTF-8 string", u"UTF-16 string", U"UTF-32 string"
("\\<\\([LuU8]+\\)\".*?\"" 1 font-lock-keyword-face)
;; R"(user-defined literal)"
;; R"(a "quot'd" string)"
;; R"delimiter(The String Data")delimiter"
;; R"delimiter((a-z))delimiter" is equivalent to "(a-z)"
("\\(\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(\\)" 1 font-lock-keyword-face t) ; start delimiter
( "\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(\\(.*?\\))[^\\s-\\\\()]\\{0,16\\}\"" 1 font-lock-string-face t) ; actual string
( "\\<[uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(.*?\\()[^\\s-\\\\()]\\{0,16\\}\"\\)" 1 font-lock-keyword-face t) ; end delimiter
;; user-defined types (rather project-specific)
("\\<[A-Za-z_]+[A-Za-z_0-9]*_\\(type\\|ptr\\)\\>" . font-lock-type-face)
("\\<\\(xstring\\|xchar\\)\\>" . font-lock-type-face)
))
) t)
Trong việc thực hiện trên của người dùng xác định chuỗi literals, các thẻ delimiter được đánh dấu lên riêng biệt như font-lock-keyword-face
; một tùy chọn khác là font-lock-constant-face
. Việc triển khai này không hiệu quả như nó có thể; nhưng nó hoạt động và không làm chậm Emacs. Lưu ý rằng các regexps cho các chuỗi ký tự do người dùng định nghĩa không bị "đánh cắp" từ đâu đó; vì vậy tôi hy vọng họ làm việc. Mọi bình luận đều được chào đón.
Nếu bạn muốn phông chữ toàn bộ chuỗi ký tự là font-lock-string-face
- bao gồm dấu phân tách - thay thế ba regex theo chỉ một. Như thế này:
.
.
("\\<\\([uU8]*R\"[^\\s-\\\\()]\\{0,16\\}(.*?)[^\\s-\\\\()]\\{0,16\\}\"\\)\\>" 1 font-lock-string-face t)
Hãy vui vẻ.
Tôi thích điều này.Tuy nhiên, nó không làm nổi bật chính xác các chuỗi ký tự nhiều dòng. ! [Xem này] (http://i39.tinypic.com/2z6v5o6.jpg). –
Được rồi, đó là vì '.' không khớp với dòng mới. Sửa lỗi bằng cách thay thế tất cả '. *' Bằng '[[: ascii:] [: nonascii:]] *' –
Tuy nhiên, tôi không hiểu tại sao nó làm nổi bật một số ký tự trích dẫn chuỗi có màu đỏ. [Xem này] (http://i41.tinypic.com/16ld3iw.jpg). –
Thay thế regexp của dấu phẩy động '' bằng cách này sẽ cải thiện sự chập chờn của phao.
integer/float/scientific literals
("\\<[-+]?[0-9]*\\.?[0-9]+\\([uUlL]+\\|[eE][-+]?[0-9]+\\)?[fFlL]?\\>" . font-lock-constant-face)
Hy vọng sẽ giúp ai đó.
Hãy xem gói: "Modern C++" font-lock for Emacs. Nó cũng có sẵn trên Melpa.
Hỗ trợ đánh dấu cú pháp cho "Modern C++" - cho đến khi C++ 17 và Đặc điểm kỹ thuật. Gói này nhằm mục đích cung cấp một điểm nhấn đơn giản của ngôn ngữ C++ mà không phụ thuộc.
Bạn nên sử dụng nó cùng với chế độ chính chế độ C++ - chế độ để làm nổi bật thêm (loại người dùng xác định, chức năng, v.v.) và thụt đầu dòng.
Tôi là người duy trì chế độ nhỏ này. Mọi phản hồi đều được đánh giá cao.
Đối với tôi, hai điểm đau cấp bách nhất với font-khóa của C hiện đại ++ mã đã được
- thực tế là
auto
được đánh dấu như một từ khóa (và không phải là một loại) và do đó nhận dạng sau đây sẽ thông thường không phải là một báo cáo biến, và - làm nổi bật đơn giản khi hiển thị một số mã (ví dụ: hãy thử rtags '
src/ClangIndexer.cpp
) và sau đó không làm nổi bật các cấu trúc cấp cao như định nghĩa chức năng.
Sau một chút thử nghiệm, tôi đã đến một giải pháp hoạt động tốt cho tôi và xử lý cả hai điểm.
Người đầu tiên được thực hiện bằng cách sửa đổi lisp/progmodes/cc-langs.el
(sao chép một của load-path
và sau đó sửa đổi cũng làm việc) để loại bỏ"auto"
từ
(c-lang-defconst c-modifier-kwds
"Keywords that can prefix normal declarations of identifiers
và thêm nó để c++-font-lock-extra-types
(ví dụ qua Customize).
Đối với mục thứ hai, làm trống c++-font-lock-extra-types
(ngoại trừ việc giữ "auto"
) sẽ giúp.
- 1. tài liệu chế độ python cho Emacs
- 2. Chế độ Emacs cho R?
- 3. làm cách nào để cài đặt chế độ ruby cho emacs
- 4. Chế độ Emacs cho ngôn ngữ giống như c
- 5. cách tốt nhất để cài đặt chế độ tự động hoàn thành emacs
- 6. Có chế độ Emacs cho Rscript không?
- 7. Có chế độ BNF cho Emacs không?
- 8. Cài đặt chế độ/mô phỏng trình duyệt cho Firefox
- 9. Cài đặt chế độ im lặng MSIEXEC
- 10. ngày chế độ org ở các chế độ Emacs khác
- 11. Cài đặt/SECURITYMODE sang chế độ hỗn hợp cho SQL Server 2012 Cài đặt
- 12. Chế độ Emacs cho flex và bison, hoặc loại bỏ thụt lề tự động cho các chế độ này?
- 13. kết hợp chế độ python với chế độ org cho emacs
- 14. Chế độ JavaScript ưa thích cho emacs? Có chế độ js2 từ Yegge không?
- 15. Chế độ Emacs nhiều dòng chú thích
- 16. Emacs C++ - chế độ thụt lề không chính xác?
- 17. emacs tùy chọn chế độ python
- 18. emacs bản đồ chế độ ác chế độ độc
- 19. Emacs: nhập CSV vào chế độ org
- 20. Tab ở chế độ HTML trong Emacs
- 21. Emacs bình luận vùng trong chế độ C
- 22. chế độ đường dây dài trong Emacs
- 23. Cửa sổ chuyên dụng cho chế độ dired trong Emacs?
- 24. Cách tạo chế độ xem giống như Cài đặt iPhone
- 25. Làm cách nào để chuyển các cài đặt chế độ php từ .emac sang .dir-locals.el?
- 26. Chế độ ESS Emacs - Tabbing cho Vùng Nhận xét
- 27. Emacs Style "chế độ nghệ sĩ" cho Eclipse?
- 28. Có chế độ Intercal cho GNU Emacs không?
- 29. emacs tự động lưu cho chế độ org chỉ
- 30. Chế độ tự động hoàn thành Emacs cho Groovy?
Lưu ý rằng 'thread_local' chưa được G ++ hỗ trợ: http://gcc.gnu.org/projects/cxx0x.html Phần mở rộng gcc' __thread' tương tự nhưng không gọi hàm tạo hoặc hàm hủy IIRC. – bdonlan
Tôi đã có cùng một vấn đề với vim, trong đó có một số tập tin cú pháp tôi điều chỉnh. Phải giống nhau cho emacs tôi nghĩ :) – Geoffroy