TL; DR:
Nó được định nghĩa trong các tệp cú pháp PHP và HTML của Vim. Để xem cách thêm quy tắc cho CSS, hãy chuyển đến phần Và làm cách nào để thêm vào chúng? dưới đây, hoặc đọc để giải thích về cách thức hoạt động của nó.
Những quy tắc cú pháp được xác định ở đâu?
JavaScript heredoc được tô sáng bằng tính năng cú pháp contains
1 của Vim , cho phép các nhóm cú pháp chứa các nhóm cú pháp khác.
Để tìm nơi được xác định, trước tiên hãy mở tệp tô sáng cú pháp cho PHP:
:e $VIMRUNTIME/syntax/php.vim
Bây giờ, có lẽ tệp cú pháp đang tìm kiếm di truyền JavaScript dựa trên kết quả khớp của chuỗi "javascript", vì vậy hãy thử tìm kiếm:
/javascript
Trận đấu thứ ba là bình luận này:
" including HTML,JavaScript,SQL even if not enabled via options
Trông đầy hứa hẹn! Hãy xem dòng cú pháp có liên quan:
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
( tiếp tục dòng được thêm vào để dễ đọc hơn )
Được rồi, do đó, khu vực cú pháp này tìm thấy di truyền JavaScript với biểu thức chính quy phức tạp và cho phép tô sáng JavaScript trong khu vực bằng cách bao gồm @htmlJavascript
cú pháp cluster
2 trong contains
đối số.
Nhưng không có định nghĩa tương ứng cho CSS heredocs! Hãy thêm một. Vì vậy, điều đầu tiên để thay đổi là start
biểu thức thông thường. Chỉ cần thay đổi javascript
thành css
:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
Điều này thật dễ dàng!
Nhưng chúng tôi không muốn làm nổi bật JavaScript trong di truyền CSS của chúng tôi. Vì vậy, chúng ta cũng cần thay đổi @htmlJavascript
tương đương với CSS. Nhưng những gì là CSS tương đương? (Bạn có thể đoán được, nhưng hãy chắc chắn chuyển động.)
Cho phép tìm kiếm htmljavascript
3 để xem nơi được xác định:
/htmljavascript
Hừm. Không có kết quả khác. Nó phải được định nghĩa ở nơi khác! Chúng ta hãy xem nhanh phần trên cùng của tệp để xem liệu chúng ta có thể tìm thấy bất kỳ bao gồm:
runtime! syntax/html.vim
Có vẻ như nó có thể là 4 .
:e $VIMRUNTIME/syntax/html.vim
Chạy lại tìm kiếm trong tệp này và chúng tôi tìm thấy dòng 5 này :
syn cluster htmlJavaScript add=@htmlPreproc
Vì vậy, htmlJavaScript là một cluster
, được định nghĩa trong html.vim
. Có một cụm tương tự cho CSS chúng ta có thể sử dụng?
/htmlcss
Vâng
syn include @htmlCss syntax/css.vim
Vì vậy, chúng ta chỉ cần thay thế @htmlJavascript
bằng @htmlCss
trong contains
đối số:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
Và làm thế nào để tôi thêm vào chúng?
Lưu toàn bộ lệnh cú pháp bên dưới trong tệp ~/after/syntax/php.vim
để nó được chạy sau khi phần còn lại của quá trình xử lý cú pháp PHP được thực hiện và bạn đã hoàn tất!
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlCss,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
1: Xem :help :syn-contains
để biết chi tiết.
2: Xem :help :syn-cluster
.
3: Tôi đã 'ignorecase'
bật. Nếu không có nó, bạn sẽ cần tìm kiếm htmlJavascript
hoặc \chtmljavascript
4: Trên thực tế, dựa trên sơ đồ đặt tên được sử dụng trong các tệp cú pháp Vim, có lẽ chúng ta có thể đã tìm ra điều này chỉ dựa trên htmlJavascript
tên.
5: Với "JavaScript" được viết hoa khác nhau, lần này. May mắn là chúng ta đã được 'ignorecase'
bật, hả?
// This should be syntax-highlighted
không phải là một nhận xét CSS hợp lệ và do đó, nên được đánh dấu cú pháp dưới dạng một cái gì đó khác với một nhận xét. CSS chỉ hỗ trợ/* */
bình luận nhiều dòng.//
Nhận xét một dòng chỉ được hỗ trợ nếu bạn sử dụng các ngôn ngữ tiền xử lý như Sass hoặc Stylus.