Làm thế nào tôi có thể thay đổi tô sáng tên lớp python?


7

Làm thế nào tôi có thể định nghĩa một cú pháp để làm nổi bật tên lớp python MyClasstrong vim?

class MyClass(object):
    ......

Vim đã đánh dấu tên lớp. Tuy nhiên, nó dường như làm nổi bật nó với tên hàm theo cùng một cách. Tôi có thể có một cách tốt hơn để làm nổi bật hai loại?

Đó có phải là một cách thông qua syn match ...? Trong mặc định syntax/python.vim, tôi tìm thấy điều này:

syn match   pythonFunction  "\h\w*" display contained

Tôi đã thử, nhưng synđịnh nghĩa của tôi phải sai, nó không hoạt động.

syn match pythonClassName "^class \(*\):" display contained
call HI('pythonClassName',         124, '', 'bold', 'bold')

HI()là một chức năng tự xác định, tôi đã sử dụng nó để sửa đổi pythonStatementthành công.

Thực tế, tôi không biết nó thực sự làm gì. Nó chỉ là một thử. Ai đó có thể cho tôi một số lời khuyên? Cảm ơn!


1
Chào mừng bạn trên trang web của chúng tôi! Bạn đang cố gắng để làm chính xác? Vim nên làm nổi bật lớp (ít nhất là trên hệ thống của tôi). Nếu không, có lẽ bạn nên thử sử dụng syntax ontrong vimrc của mình. Nếu nó được tô sáng nhưng bạn muốn thay đổi phần tô sáng, hãy xem :h mysyntaxfile-addđể biết cách ghi đè tệp tô sáng cú pháp hiện tại. Trong mọi trường hợp, bạn nên cụ thể hơn với những gì bạn đã thử (lệnh nào, trong tệp nào, v.v.).
statox

Cũng lưu ý rằng wikia có một mẹo hữu ích để hiển thị nhóm cú pháp được sử dụng dưới con trỏ.
statox

@statox Cảm ơn bình luận của bạn! Vim thực sự đã làm nổi bật tên lớp. Tuy nhiên, nó dường như làm nổi bật tên lớp và tên hàm theo cùng một cách. Tôi có thể có một cách tốt hơn để phân biệt tên lớp và tên hàm không? Nhân tiện, tôi đã sửa đổi câu hỏi để cụ thể hơn, cảm ơn!
Jimmy

Câu trả lời:


2

Tuy nhiên, nó dường như làm nổi bật nó với tên hàm theo cùng một cách.

Với :echo synIDattr(synID(line('.'), col('.'), 1), 'name')chúng ta có thể nhận được tên của nhóm cú pháp, đó thực sự là pythonFunction.

Nhìn vào /usr/share/vim/vim80/syntax/python.vimchúng ta có thể thấy điều này được làm nổi bật với:

syn keyword pythonStatement     class def nextgroup=pythonFunction skipwhite
syn match   pythonFunction  "\h\w*" display contained
hi def link pythonFunction      Function

Không có cơ sở để làm nổi bật các lớp riêng biệt. Nếu bạn muốn thêm cái này, bạn có thể sử dụng cái gì đó như:

" Clear default
syn clear pythonStatement

" Set it to what's in the Python file, minus the class.
syn keyword pythonStatement    False None True
syn keyword pythonStatement    as assert break continue del exec global
syn keyword pythonStatement    lambda nonlocal pass print return with yield
syn keyword pythonStatement    def nextgroup=pythonFunction skipwhite

" Now make seperate syntax groups for the class.
syn keyword pythonClassStmt class nextgroup=pythonClass skipwhite
syn match   pythonClass "\h\w*" display contained

" Avoid highlighting attributes as builtins – just added "pythonClass" here.
syn clear pythonAttribute
syn match   pythonAttribute /\.\h\w*/hs=s+1
    \ contains=ALLBUT,pythonBuiltin,pythonFunction,pythonClass,pythonAsync
    \ transparent

" Highlight the class statement and the class name.
hi def link pythonClassStmt Statement
hi pythonClass ctermfg=darkgreen guifg=darkgreen

Tôi đã sử dụng màu xanh đậm vì đây là những gì Ruby sử dụng, nhưng hãy thoải mái sử dụng bất kỳ màu nào bạn thích. Bạn có thể đánh dấu classtừ khóa theo bất kỳ cách nào bạn muốn.

Để thực hiện tải này sau khi tệp cú pháp Python tích hợp, hãy thêm tệp này vào ~/.vim/after/syntax/python.vim.

Ngoài ra, hãy xem: Sửa lỗi tô sáng cú pháp bị thiếu của mật mã cho python cho một đoạn mồi chung về tô sáng cú pháp và một số chi tiết khác.


Cảm ơn bạn vì câu trả lời! Tuy nhiên, tôi đã cố gắng giải pháp của bạn chỉ để thấy không chỉ tên lớp trăn đã được nhấn mạnh nhưng một số thứ khác đã được thay đổi cùng một lúc, ví dụ, X_traintrong self.X_trainđã được nhấn mạnh trong một cách tương tự, mà không được mong đợi. Có thể chỉ thay đổi phần tô sáng của tên lớp?
Jimmy

@Jimmy Oops, có vẻ như tôi đã không kiểm tra điều này đủ. Cảm ơn đã chỉ ra rằng. Tôi nghĩ rằng tôi biết những gì sai, nhưng không có thời gian để cập nhật câu trả lời của tôi ngay bây giờ . Tôi sẽ cập nhật nó sau.
Martin Tournoij

@Jimmy Trả lời cập nhật. Vấn đề là tôi đã quên ghi đè pythonAttributenhóm cú pháp.
Martin Tournoij

Cảm ơn nhiều! Nó hoạt động. Nhưng vẫn còn một lỗi nhỏ được đưa ra khi tệp python được mở E28: No such highlight group name: pythonAttribute. Bạn có thể kiểm tra lại không?
Jimmy

@Jimmy Tôi không có lỗi đó. Tôi cũng bối rối, vì lỗi đó xuất phát từ highlightlệnh chứ không phải syntaxlệnh. Bạn có chắc chắn mã này đang đưa ra lỗi đó? Hay là một số kịch bản khác?
Martin Tournoij
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.