Bỏ qua URL và địa chỉ email trong tệp chính tả


11

Có cách nào để vim không gắn cờ URL và địa chỉ email là lỗi chính tả không? Hoặc, nói chung hơn, một cách để liệt kê các biểu thức chính tả hợp lệ?

Câu trả lời:


14

Bạn có thể thêm quy tắc cú pháp tùy chỉnh và cung cấp cho họ @nospelltừ khóa, điều này sẽ cho Vim không áp dụng kiểm tra chính tả cho cú pháp khớp này. Ví dụ:

:syn match UrlNoSpell "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell

Ở trên sẽ làm việc cho các tệp văn bản và một số kiểu tệp (chẳng hạn như đánh dấu), nhưng không phải cho tất cả các kiểu tệp.

Lưu ý rằng tôi đã sử dụng một regex khá đơn giản ở đây; xem Làm cách nào để phân tích URL từ văn bản cho một số lựa chọn thay thế.


Đối với các kiểu tệp khác, bạn cần thực hiện thêm một chút công việc. Ví dụ: đối với pythoncác tệp, các nhận xét được chứa trong một pythonComment nhóm, từ /usr/share/vim/vim74/syntax/python.vim:

syn match   pythonComment   "#.*$" contains=pythonTodo,@Spell

Để ghi đè lên điều này, chúng ta cần làm:

:syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
:highlight def link UrlNoSpellComment Comment

Bí quyết là để thêm một danh sách kết quả cú pháp xuất hiện trước đây, trong đó tùy chỉnh phù hợp với cú pháp của chúng tôi có thể được kiềm chế bằng containedin=này cho Vim để nhìn cho UrlNoSpellregex trong các pythonCommenttrận đấu.

Chúng ta cũng cần sử dụng highlightđể đặt màu chính xác, vì những màu này không được kế thừa.

Bạn cần thực hiện việc này ở một số nơi, ví dụ như chuỗi Python:

:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String

Chúng tôi cần 2 nhóm kết hợp cú pháp khác nhau để có thể áp dụng tô sáng cú pháp chính xác.

Tất nhiên, đối với các filestypes khác, bạn cần sử dụng các containedin=kết hợp cú pháp khác ... Có, AFAIK, không có giải pháp "phổ quát", nhưng tìm kiếm những cái chính xác trong /usr/share/vim/vim74/syntax/*.vimkhông nên quá khó.


Lưu ý rằng tất cả các lệnh trên phải được thực hiện sau các tệp cú pháp; Có 2 cách để làm điều này:

  • Từ một lệnh hoặc ánh xạ khóa, điều này phải được gọi thủ công mỗi lần. ví dụ

    fun! NoUrlSpell()
        if &filetype == 'python'
            :syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
            :highlight def link UrlNoSpellComment Comment
            :syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
            :highlight def link UrlNoSpellString String
        elseif &filetype == 'ruby'
            " ...
        else
            syn match   pythonComment   "#.*$" contains=pythonTodo,@Spell
        endif
    endfun
    command NoUrlSpell :call NoUrlSpell()
    
  • Đặt các lệnh trong ~/.vim/after/syntax/[filetype].vim. Vim sẽ chọn các tệp này và thực hiện chúng sau các tệp cú pháp mặc định (xem :help after-directory:).

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.