Cách đánh dấu cú pháp hoạt động ngắn gọn:
Trong syntax/<filetype>.vimcác quy tắc cú pháp được xác định với :syntaxlệnh. Lệnh này xác định, tốt, cú pháp. Nó nói "nếu văn bản khớp với biểu thức chính quy này, thì đó là một chuỗi", v.v. Để làm như vậy, nó chỉ định một nhóm nổi bật . Nó không nói bất cứ điều gì về màu sắc như vậy.
:highlightnói "làm nổi bật nhóm này với những màu này". Điều này được thực hiện trong bảng màu , không phải tệp cú pháp. Có một loạt các nhóm Highlight mặc định ( String, Function, Special, và vv) mà tất cả các tông màu cần xác định.
Tuy nhiên, bạn không bị giới hạn trong các nhóm mặc định này và bạn có thể tạo bao nhiêu nhóm tùy thích (nhưng các tệp cú pháp mặc định thường không có).
Các indent/<filetype>.vimtập tin điều khiển thụt tự động. Ví dụ, đối với Ruby, nó nói "dòng sau defnên tăng mức thụt dòng" và "dòng sau endnên giảm mức thụt một cấp". Nó không làm gì với màu sắc hoặc cú pháp tô sáng.
Tại sao các ngôn ngữ lập trình khác nhau được làm nổi bật khác nhau? Một phần vì thẩm mỹ cá nhân và ý kiến của bất cứ ai đã viết nó. Ví dụ, trong Ruby, Typenhóm tô sáng được sử dụng cho tên lớp. Nhưng nó cũng có thể là Functionmột cái gì đó khác. Tại sao vậy Type? Có lẽ bởi vì tác giả nghĩ rằng nó trông đẹp hơn trong cách phối màu của mình.
Nhưng quan trọng hơn, các ngôn ngữ có ngữ nghĩa và độ nhạy cảm khác nhau. Trong Ruby, selflà một từ khóa đặc biệt. Bạn không thể làm self = "foo"hoặc def self(). Đây là những lỗi. Nhưng đây không phải là trường hợp của Python. Nó chỉ là một biến khác mà không có thuộc tính đặc biệt. Đang làm:
x = Object()
x.foo()
thực sự được "dịch" bởi Python sang:
Object.foo(x)
Tên selfchỉ là quy ước (gần như được áp dụng phổ biến) nhưng bạn có thể đặt tên cho bất cứ điều gì bạn thích; def x(this):hoặc def x(xxx):có giá trị như nhau. Bạn cũng có thể sử dụng tên selfbất cứ nơi nào bạn thích; self = 'foo'và def self():hoàn toàn tốt
Tôi sẽ lập luận rằng selfkhông nên làm nổi bật, vì đó không phải là một từ khóa đặc biệt, cũng không phải là một biến được xác định trước (như str). Không có dấu vết của từ selftrong tệp cú pháp, vì vậy có vẻ như tác giả của từ này có cùng lý do :-)
Nếu bạn muốn selftô sáng, bạn phải tạo quy tắc cú pháp cho nó:
:syn keyword pythonBuiltin self
Tên pythonBuiltinnhóm đã được xác định trong tệp cú pháp mặc định và được liên kết với Functionnhóm tô sáng. Để sử dụng nhóm đánh dấu mới, hãy sử dụng một cái gì đó như:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
Để thực hiện những thay đổi này, bạn không thể chỉ dán chúng vào tệp vimrc của mình. Các tập tin cú pháp sẽ ghi đè lên nó. Thay vào đó, bạn sẽ cần chạy nó sau khi tải tệp cú pháp, bạn có thể thực hiện theo hai cách:
Sử dụng một FileTypeautocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
Sử dụng after-directory, ~/.vim/after/syntax/python.vim:
syn keyword pythonSelf self
highlight def link pythonSelf Special
Cả hai phương pháp đều có hiệu quả như nhau. Sử dụng bất cứ điều gì bạn thích.