Cách đánh dấu cú pháp hoạt động ngắn gọn:
Trong syntax/<filetype>.vim
các quy tắc cú pháp được xác định với :syntax
lệ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.
:highlight
nó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>.vim
tập tin điều khiển thụt tự động. Ví dụ, đối với Ruby, nó nói "dòng sau def
nên tăng mức thụt dòng" và "dòng sau end
nê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, Type
nhóm tô sáng được sử dụng cho tên lớp. Nhưng nó cũng có thể là Function
mộ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, self
là 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 self
chỉ 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 self
bấ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 self
khô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ừ self
trong 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 self
tô sáng, bạn phải tạo quy tắc cú pháp cho nó:
:syn keyword pythonBuiltin self
Tên pythonBuiltin
nhóm đã được xác định trong tệp cú pháp mặc định và được liên kết với Function
nhó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 FileType
autocmd:
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.