2014-04-17 27 views
10

Làm cách nào để lớp của tôi được đánh dấu là kiểu nguyên thủy bình thường như int hoặc double?Văn bản tuyệt vời - C++ Đánh dấu

Xem một ví dụ:

enter image description here

Tôi muốn rằng khi tôi tuyên bố Test aloha; thử nghiệm được đánh dấu của cùng một cách mà int a.

+0

Bạn có thể làm điều đó trong Văn bản tuyệt vời không? Nếu bạn có thể, tôi sẽ gỡ cài đặt mọi IDE trên máy tính của tôi ... –

Trả lời

13

Đánh dấu cú pháp được kiểm soát bởi tệp tmLanguage. Trong ST3, các tệp này được lưu trữ trong tệp .cache.

Vì vậy, hãy làm theo các bước sau.

  • mở Tools -> Command Pallet và sử dụng Package Manager cài đặt PackageResourceViewer
  • Trong lệnh Pallet chọn PackageResourceViewer: Open Resource
  • Trong bảng điều khiển được trình bày chọn C++
  • Trong bảng điều khiển được trình bày chọn C++.tmLanguage

Bây giờ bạn có tệp định nghĩa ngôn ngữ được hiển thị cho bạn.

Hãy xem biểu mẫu cách xác định các phần của ngôn ngữ. Nếu chúng ta tìm kiếm class chúng ta tìm thấy sau khi một trong những trận đấu:

<dict> 
    <key>match</key> 
    <string>\b(class|struct)\s+([_A-Za-z][_A-Za-z0-9]*\b);</string> 
    <key>name</key> 
    <string>meta.class-struct-block.c++</string> 
    <key>captures</key> 
    <dict> 
     . . . 
    . . . 
</dict> 

tôi đã chọn mà một vì nó liên quan đến một số Expresssion (regex) phù hợp thường xuyên và đó là gợi ý để làm những gì bạn muốn làm.

Vì ST có khuôn khổ mở đáng yêu, bất kỳ ai trong chúng tôi biết một chút chương trình có thể thêm định nghĩa thành phần ngôn ngữ của chúng tôi vào các tệp .tmLanguage này. Sự linh hoạt này là một phần của lý do tại sao ST là sự lựa chọn của tôi.

Vì vậy, hãy xem cách thực hiện điều đó.

Điều đầu tiên là lưu tệp C++.tmLanguage mà chúng tôi đã mở trong trình chỉnh sửa vào thư mục User của chúng tôi.

Chúng tôi làm điều này cả hai để giữ bản gốc như một rollback nếu gặp rắc rối vì nó có nghĩa rằng phiên bản của chúng tôi trong User sẽ không bị ghi đè mỗi lần ST cập nhật. Cách ST tải tệp có nghĩa là các bản sao trong thư mục User ghi đè các giá trị ở vị trí mặc định để các phiên bản User của chúng tôi được ưu tiên trong những gì đang chạy khi chúng tôi sử dụng ST. Cool hey?

Vì vậy, bây giờ chúng tôi có phiên bản riêng của chúng tôi về các tập tin C++.tmLanguage chúng ta hãy chơi với nó.

Tìm định nghĩa giống như những gì chúng tôi muốn thực hiện và sao chép nó.

tôi sẽ sao chép này:

<dict> 
    <key>match</key> 
    <string>\b(class|wchar_t|nullptr_t)\b</string> 
    <key>name</key> 
    <string>storage.type.c++</string> 
</dict> 

Điều đầu tiên tôi sẽ làm là quyết định những gì tôi sẽ đặt tên cho thành phần ngôn ngữ mới của tôi.

Tôi có thể chỉ cần đặt tên cho thành phần ngôn ngữ hiện có có màu mà tôi muốn có. Điều này có lợi thế là nếu tên đó đã có sẵn trong các sơ đồ màu hiện có, tôi sẽ nhận được phần đánh dấu miễn phí. Vui lòng thực hiện lựa chọn này.

Nhưng để khám phá thêm về hệ thống, tôi sẽ phát minh ra tên của chính mình và phạm vi cho chính bản thân mình. Vì vậy, tôi sẽ gọi nó là duncan.name.class. Bạn có thể sử dụng bất kỳ tên nào bạn thích mà không đụng độ với tên hiện có.

Vì vậy, tôi sẽ làm cho rằng sự thay đổi trong trùng lặp:

<dict> 
    <key>match</key> 
    <string>\b(class|wchar_t|nullptr_t)\b</string> 
    <key>name</key> 
    <string>duncan.name.class</string> 
</dict> 

Bây giờ tôi cần phải viết regex để xác định thành phần ngôn ngữ mới của tôi. Điều này là khá dễ dàng vì tôi sẽ giả định rằng chúng ta đều tuân theo cách thực hành khá chuẩn của việc đặt tên các lớp với Caps hàng đầu và không sử dụng nó cho các thành phần ngôn ngữ khác nên regex của tôi chỉ cần tìm bất kỳ chuỗi nào bắt đầu bằng alpha UPPERCASE, có thể dễ dàng được định nghĩa là [A-Z] theo sau bởi bất kỳ ký tự chữ và số nào. Lưu ý rằng điều này ngăn cản dấu câu (như dấu gạch dưới _) vì vậy nếu bạn sử dụng dấu chấm câu trong tên lớp, bạn sẽ cần phải mở rộng regex để bao gồm các ký tự đó.

Vì vậy, hãy thay đổi điều kiện phù hợp để sử dụng regex rằng:

<dict> 
    <key>match</key> 
    <string>\b([A-Z][a-zA-Z0-9]+)\b</string>   
    <key>name</key> 
    <string>duncan.name.class</string> 
</dict> 

Bây giờ tôi có một thành phần ngôn ngữ mới, tôi cần phải nói với chủ đề của tôi làm thế nào để xử lý nó. Tôi sẽ làm việc với chủ đề Amy cho ví dụ này.

Vì vậy, trở lại bao giờ hữu ích PackageResourceViewer như thế này:

  • Trong lệnh Pallet chọn PackageResourceViewer: Open Resource
  • Trong bảng điều khiển được trình bày chọn Color Scheme - Default
  • Trong bảng điều khiển được trình bày chọn Amy.tmTheme

Bây giờ bạn có tập tin chủ đề được hiển thị cho bạn.

Một lần nữa tôi muốn lưu bản sao của mình vào thư mục User và sau đó sao chép ví dụ hiện tại. Tôi sẽ sao chép String nhưng bất cứ điều gì mà lấy ưa thích của bạn là tốt.

<dict> 
    <key>name</key> 
    <string>String</string> 
    <key>scope</key> 
    <string>string</string> 
    <key>settings</key> 
    <dict> 
     <key>foreground</key> 
     <string>#999999</string> 
    </dict> 
</dict> 

Bây giờ tôi sẽ thay đổi trùng lặp của String để làm màu cho thành phần ngôn ngữ mới của tôi.

<dict> 
    <key>name</key> 
    <string>Class Names :: Duncan</string> 
    <key>scope</key> 
    <string>duncan.name.class</string> 
    <key>settings</key> 
    <dict> 
     <key>foreground</key> 
     <string>#999999</string> 
     <key>background</key> 
     <string>#FFFFFF</string> 
     <key>fontStyle</key> 
     <string>bold</string> 
    </dict> 
</dict> 

Tôi hy vọng bạn nhận ra tên tôi đang sử dụng từ công việc chúng tôi đã làm ở trên?

Tôi đã chọn một tập hợp các tùy chọn làm nổi bật cú pháp hơi điên chỉ để hiển thị một số tùy chọn bạn có sẵn.Tự mình chơi với những ý tưởng ở đây.

Tất cả điều này có hợp lý không?

Với những ý tưởng này, bạn có thể sửa bất kỳ cú pháp tô sáng nào mà bạn có trong ST3 để hoạt động chính xác như bạn muốn. Có lẽ regex của tôi ở trên không phải là quá lớn? Tôi đã không nghĩ về nó rất nhiều, do đó bạn có thể tìm thấy bạn cần phải làm nhiều công việc ở đó để có được những gì bạn muốn.

Hãy cho tôi biết nếu một số điều này không có ý nghĩa và tôi sẽ cố gắng và làm tốt hơn.

+0

Tuyệt vời! Rất hữu ích. – user3286105

+0

@jwpfox. Cảm ơn bạn đã hướng dẫn chi tiết và giáo dục. Thật không may, tôi không thể tìm thấy tệp C++. TmLanguage khi làm theo hướng dẫn của bạn ở trên. ST3 có chuyển các cài đặt tô sáng cú pháp sang một tệp khác không? – herteladrian

+0

Hiện tại, có định dạng tệp mới xem https://www.sublimetext.com/docs/3/syntax.html – jwpfox

4

Tôi cũng khuyên bạn nên cài đặt gói Scope Hunter và sau đó bật Toggle Instant Scoper qua Ctrl+Shift+P. Điều này sẽ cho bạn thấy phạm vi của phần tử bên dưới con trỏ.

Với điều này, bạn có thể xem cách ST đã phân tích cú pháp tệp và sử dụng tên của từng phạm vi trong định nghĩa chủ đề cho các phần tử màu của phạm vi khác nhau.

+1

Vì vậy, dễ dàng hơn nhiều để nhanh chóng hiểu những gì đang xảy ra và khám phá phân tích cú pháp ngay bây giờ. Tôi chỉ nhận ra phân tích cú pháp mặc định của C++ trong Sublime Text 3 có ít phạm vi hơn tôi tưởng tượng ban đầu. Ngoài ra, 'Ctrl + Alt + Shift + P' sẽ hiển thị các phạm vi trên thanh trạng thái mà không cần cài đặt gói. – arthropod

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