Đố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:
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.
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!
Ngoài ScopeAlways, cũng có [Scope Hunter] (https://packagecontrol.io/packages/ScopeHunter). – Hibou57
@ 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
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