2014-05-05 12 views
7

.tmlanguage tệp hoạt động bằng cách xác định danh sách các cặp khóa giá trị. Các biểu thức chính quy là các khóa và kiểu cú pháp là giá trị. Này được thực hiện theo cách thức XML-ish sau:Có bất kỳ tiêu chuẩn nào cho các loại từ khóa tmlanguage không?

<key>match</key> 
<string>[0-9]</string> 
<key>name</key> 
<string>constant.numeric</string> 

câu hỏi chính của tôi là: Có một danh sách các giá trị mà có thể đi thay cho constant.numeric nếu tập tin được sử dụng bởi một trình soạn thảo văn bản như Sublime?

Trả lời

15

Đối với một giới thiệu cơ bản, hãy kiểm tra phần Language Grammars của tay TextMate. Phần Naming Conventions mô tả một số phạm vi cơ sở, như comment, keyword, meta, storage, v.v ... Các lớp này sau đó có thể được phân loại để cung cấp càng nhiều chi tiết càng tốt - ví dụ: constant.numeric.integer.long.hexadecimal.python. Tuy nhiên, điều quan trọng cần lưu ý rằng đây không phải là những quy tắc cứng nhắc và nhanh chóng - chỉ là những gợi ý. Điều này sẽ trở nên rõ ràng khi bạn quét qua các định nghĩa ngôn ngữ khác nhau và xem, ví dụ, tất cả các cách khác nhau mà các chức năng được scoped - meta.function-call, support.function.name, meta.function-call punctuation.definition.parameters vv

Cách tốt nhất để tìm hiểu về phạm vi là để kiểm tra hiện .tmLanguage tệp và xem qua nguồn ngôn ngữ khác nhau và xem phạm vi được chỉ định ở đâu. Định dạng XML rất khó để duyệt qua ngẫu nhiên, vì vậy tôi sử dụng plugin PackageDev xuất sắc để dịch XML thành YAML. Đó là sau đó dễ dàng hơn nhiều để quét và xem những gì phạm vi được mô tả bởi những gì regexes:

YAML-tmLanguage

Một cách khác để tìm hiểu là để xem cách khác nhau cấu trúc ngôn ngữ được scoped, và cho rằng tôi khuyên bạn nên sử dụng ScopeAlways. Sau khi cài đặt và kích hoạt, chỉ cần đặt con trỏ của bạn và phạm vi áp dụng cho vị trí cụ thể đó được hiển thị trên thanh trạng thái. Điều này đặc biệt hữu ích khi thiết kế các lược đồ màu, vì bạn có thể dễ dàng thấy bộ chọn nào sẽ làm nổi bật một tính năng ngôn ngữ quan tâm.

ScopeAlways

Nếu bạn quan tâm, màu sắc sử dụng ở đây là Neon, mà tôi được thiết kế để làm cho nhiều ngôn ngữ càng tốt nhìn tốt như có thể, bao gồm nhiều phạm vi càng tốt. Hãy xem qua nó để xem các yếu tố ngôn ngữ khác nhau được đánh dấu như thế nào; điều này cũng có thể giúp bạn thiết kế .tmLanguage của bạn để phù hợp với các ngôn ngữ khác.

Tôi hy vọng tất cả điều này sẽ giúp, chúc bạn may mắn!

+1

Ngoài ScopeAlways, cũng có [Scope Hunter] (https://packagecontrol.io/packages/ScopeHunter). – Hibou57

+0

@ Hibou57 lý do tôi không đề cập đến Scope Hunter là bạn cần kích hoạt nó mỗi lần bạn muốn xem phạm vi, trong khi ScopeAlways liên tục hiển thị phạm vi tại vị trí con trỏ hiện tại. – MattDMo

+0

Tôi không biết với các phiên bản trước, tuy nhiên trong phiên bản hiện tại, có một "Phạm vi Hunter: Chuyển đổi ngay lập tức Scoper" từ Command Palette, và nó sẽ hiển thị phạm vi tất cả các thời gian trong một bảng điều khiển đầu ra. – Hibou57

12

Có. Định dạng .tmlanguage ban đầu được sử dụng bởi TextMate. TextMate manual cung cấp tài liệu đầy đủ cho định dạng, bao gồm các loại cấu trúc ngôn ngữ có thể có.

sao chép từ the relevant docs page, trong định dạng phân cấp:

  • comment - để lấy ý kiến.
    • line - dòng bình luận, chúng tôi chuyên hơn nữa để loại nhân vật bình luận bắt đầu (s) có thể được chiết xuất từ ​​phạm vi
      • double-slash -// bình luận
      • double-dash--- bình luận
      • number-sign -# comment
      • percentage-% bình luận
      • character- các loại ý kiến ​​dòng.
    • block - nhiều dòng bình luận như /* … */<!-- … -->.
      • documentation - tài liệu được nhúng.
  • constant - hình thức khác nhau của các hằng số.
    • numeric - những đại diện cho số, ví dụ: 42, 1.3f, 0x4AB1U.
    • character - những biểu tượng đại diện cho các ký tự, ví dụ: &lt;, \e, \031.
    • escape - chuỗi thoát như \e sẽ là constant.character.escape.
    • language- hằng (nói chung) được cung cấp bởi các ngôn ngữ đó là “đặc biệt” như true, false, nil, YES, NO vv
    • other- hằng khác, ví dụ màu sắc trong CSS.
  • entity - một thực thể đề cập đến một phần lớn của tài liệu, ví dụ như một chương, lớp, chức năng, hoặc thẻ. Chúng tôi không phạm vi toàn bộ thực thể là entity.* (chúng tôi sử dụng meta.* cho điều đó). Nhưng chúng tôi sử dụng entity.* cho "trình giữ chỗ" trong thực thể lớn hơn, ví dụ: nếu thực thể là một chương, chúng tôi sẽ sử dụng entity.name.section cho tiêu đề chương.
    • name - chúng tôi đang đặt tên cho thực thể lớn hơn.
      • function - tên của hàm.
      • type - tên của khai báo hoặc lớp loại.
      • tag - tên thẻ.
      • section - tên là tên của phần/tiêu đề.
    • other - các thực thể khác.
      • inherited-class - tên superclass/baseclass.
      • attribute-name - tên thuộc tính (chủ yếu trong thẻ). chúng tôi đang đặt tên cho thực thể lớn hơn.
  • invalid - thứ như chúng ta là “không hợp lệ”.
    • illegal - bất hợp pháp, ví dụ: ký tự dấu hoặc thấp hơn ký tự trong HTML (không phải là một phần của thực thể/thẻ).
    • deprecated - vì nội dung không dùng nữa, ví dụ: sử dụng chức năng API không được dùng nữa hoặc sử dụng kiểu dáng với HTML nghiêm ngặt.
  • keyword - từ khóa (khi những từ khóa này không rơi vào các nhóm khác).
    • control - chủ yếu liên quan đến kiểm soát dòng chảy như tiếp tục, thời gian, trở lại vv
    • operator - nhà khai thác có thể là văn bản (ví dụ hay) hoặc được ký tự.
    • other - các từ khóa khác.
  • markup - đây là ngôn ngữ đánh dấu và thường áp dụng cho các tập hợp con lớn hơn của văn bản.
    • underline - văn bản được gạch dưới.
      • link - này là dành cho các liên kết, như là một tiện nghi này có nguồn gốc từ markup.underline do đó nếu không có quy tắc chủ đề mà đặc biệt nhắm markup.underline.link sau đó nó sẽ thừa hưởng phong cách gạch dưới.
    • bold - chữ in đậm (văn bản đó là strong và tương tự tốt nhất nên được bắt nguồn từ tên này).
    • heading - tiêu đề phần. Tùy chọn cung cấp cấp tiêu đề làm phần tử tiếp theo, ví dụ: markup.heading.2.html cho <h2>…</h2> trong HTML.
    • italic - văn bản in nghiêng (văn bản là em phasized và tương tự tốt nhất nên được bắt nguồn từ tên này).
    • list - các mục danh sách.
      • numbered - mục danh sách được đánh số.
      • unnumbered - các mục danh sách không được liệt kê.
    • quote - trích dẫn (đôi khi được trích dẫn) văn bản.
    • raw - văn bản đúng nguyên văn, ví dụ: danh sách mã. Thông thường kiểm tra lỗi chính tả bị tắt cho markup.raw.
    • other - các cấu trúc đánh dấu khác.
  • meta - phạm vi meta thường được sử dụng để đánh dấu các phần lớn hơn của tài liệu. Ví dụ: toàn bộ dòng tuyên bố hàm sẽ là meta.function và các tập hợp con sẽ là storage.type, entity.name.function, variable.parameter v.v ... và chỉ dòng sau sẽ được tạo kiểu. Đôi khi phần meta của phạm vi sẽ chỉ được sử dụng để giới hạn phần tử tổng quát hơn được tạo kiểu, hầu hết các phạm vi meta thời gian được sử dụng trong bộ chọn phạm vi để kích hoạt các mục của gói. Ví dụ trong Objective-C có một phạm vi meta cho khai báo giao diện của một lớp và việc triển khai thực hiện, cho phép các trình kích hoạt tab tương tự để mở rộng khác nhau, tùy thuộc vào ngữ cảnh.
  • storage - những thứ liên quan đến "bộ nhớ".
    • type - loại gì đó, class, function, int, var vv
    • modifier- một modifier lưu trữ như static, final, abstract vv
  • string - chuỗi.
    • quoted - chuỗi được trích dẫn.
      • single - chuỗi được trích dẫn một lần: 'foo'.
      • double - chuỗi được trích dẫn kép: "foo".
      • triple - chuỗi được trích dẫn ba: """Python""".
      • other - các loại trích dẫn khác: $'shell', %s{...}.
    • unquoted - cho những thứ như tài liệu tại đây và tại đây.
    • interpolated - chuỗi được "đánh giá": `date`, $(pwd).
    • regexp - cụm từ thông dụng: /(\w+)/.
    • other - các loại chuỗi khác (hiếm khi được sử dụng).
  • support - những thứ do khung hoặc thư viện cung cấp phải được hỗ trợ bên dưới.
    • function - các chức năng do khung/thư viện cung cấp. Ví dụ: NSLog trong Mục tiêu-C là support.function.
    • class - khi khung/thư viện cung cấp các lớp học.
    • type - loại được cung cấp bởi khung/thư viện, điều này có thể chỉ được sử dụng cho các ngôn ngữ có nguồn gốc từ C, có typedef (và struct). Hầu hết các ngôn ngữ khác sẽ giới thiệu các loại mới dưới dạng các lớp.
    • constant - hằng số (giá trị ma thuật) do khung/thư viện cung cấp.
    • variable - các biến được khung/thư viện cung cấp. Ví dụ: NSApp trong AppKit.
    • other - ở trên phải đầy đủ, nhưng đối với mọi thứ khác sử dụng support.other.
  • variable - biến. Không phải tất cả các ngôn ngữ đều cho phép nhận dạng dễ dàng (và do đó đánh dấu) trong số này.
    • parameter - khi biến được khai báo làm tham số.
    • language- biến ngôn ngữ dành riêng như this, super, self vv
    • other- biến khác, như $some_variables.
+2

Thật không may, không đề cập đến không gian tên dấu chấm câu ... – w00t

+1

Có danh sách mở rộng hơn, cụ thể cho Văn bản tuyệt vời, [tại đây] (https://www.sublimetext.com/docs/3/scope_naming.html). Nó bao gồm không gian tên dấu chấm câu. – jramm

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