2009-12-08 16 views
5

Tôi đang sử dụng chế độ Emacs C++ tiêu chuẩn (được vận chuyển) nhưng tôi có một chút ngứa mà tôi đang tìm kiếm để bị trầy xước. Làm cách nào để tôi đánh dấu đúng các loại bên trong một kích thước của và các phôi bằng C++?Chế độ Emacs C++: Làm Nổi bật Vỏ và Kích cỡ

Ví dụ:

  1. Một Cast

    Type * pointer = reinterpret_cast <Type *> (original);

  2. sizeof

    std::cout << sizeof (Type) << "\n";

+0

ý của bạn là "đánh dấu đúng"? Bạn có muốn tên tập tin được đánh dấu giống như kiểu tên khi khai báo một biến, hay điều này có một số cách "thích hợp" khác mà bạn muốn nó được đánh dấu? – Andrew

+0

Tôi muốn tên được đánh dấu là khi khai báo một biến, có. –

+0

Cho rằng, trong 'sizeof (X)', nó hoàn toàn phụ thuộc vào ngữ cảnh cho dù X là một kiểu hay một biến, bạn muốn nó chính xác như thế nào? –

Trả lời

4

Thêm các biểu thức này vào số .emacs hoặc đánh giá chúng bằng M-:.

sizeof (đó là dễ dàng hơn trong hai trường hợp)

Các regex nhấn mạnh bất kỳ sự kết hợp (thể hiện bằng các biểu hiện khung [...]; về cú pháp, xin vui lòng xem lưu ý dưới đây) của chữ và số, khoảng trắng và dấu hoa thị trong ngoặc và trước bởi sizeof.

(font-lock-add-keywords 'c++-mode 
    '(("\\<sizeof[[:space:]]*(\\([[:alnum:][:space:]*]+\\))" 
    1 font-lock-type-face t))) 

Số 1 nói với emacs chỉ làm nổi bật subexpression đầu tiên (đánh dấu bằng \\(...\\)) bằng cách sử dụng mặt font-lock-type-face; t có nghĩa là ghi đè bất kỳ đánh dấu nào trước đó.

Bạn có thể xem và thay đổi các khuôn mặt hiện có với M-x customize group [RET] font-lock-faces [RET].

C++ phong cách phôi

Tôi không chắc chắn mà typename bạn muốn được đánh dấu – các “ gốc ” hoặc một đến đúc thành. Điểm đánh dấu này đánh dấu cả hai:

(font-lock-add-keywords 'c++-mode 
    '(("\\<[[:alnum:]]+_cast[[:space:]]*<\\([[:alnum:][:space:]*]+\\)>[[:space:]]*(\\([[:alnum:][:space:]*]+\\))" 
    (1 font-lock-type-face t) 
    (2 font-lock-type-face t)))) 

Một lần nữa, '1 and 2` chọn các biểu thức con tương ứng.

Xin lưu ý: Các regexes cho các tên tệp không hoàn toàn phù hợp với cú pháp C++. Ví dụ, emacs sẽ vui vẻ làm nổi bật những điều vô nghĩa như sizeof(int * 32).

Ngoài ra, giải pháp của tôi không tính đến vấn đề mà Pavel đã đề cập trong nhận xét về câu hỏi của bạn; bạn cũng có thể sử dụng sizeof trên các biến số cần phải làm nổi bật khác nhau. Tôi không nghĩ rằng điều này có thể, thiếu triển khai một trình phân tích cú pháp C hoàn chỉnh trong mã khóa phông chữ.

Các vấn đề liên quan