Làm cách nào để kiểm tra chính tả trong các thuộc tính HTML?


9

Tính năng kiểm tra chính tả Vim hoạt động tuyệt vời trong hầu hết các trường hợp - thậm chí còn đủ thông minh để phân biệt mã với nghĩa đen và nhận xét trong hầu hết các ngôn ngữ. Tuy nhiên tôi có vấn đề với kiểm tra chính tả HTML:

  <div title="text with mistaek #1" data-text="text with mistaek #2">text with mistaek #3</div>

Trong ví dụ trên chỉ có lỗi bên trong divđược tô sáng (# 3). Sẽ thật tuyệt khi kiểm tra tất cả các thuộc tính có liên quan - ít nhất titledata-*, lý tưởng nhất là danh sách các thuộc tính có thể định cấu hình.

Có thể đạt được thông qua cấu hình hoặc VimScript? Plugin cũng sẽ làm được, nhưng lý tưởng nhất là nó có thể được cấu hình cho các HTMLtệp giống như khác nhau (ví dụ: cshtmltệp .NET .NET MVC ).

Câu trả lời:


5

Các mục cú pháp trong đó Vim sẽ làm nổi bật các lỗi chính tả được xác định bằng cách sử dụng @Spell@NoSpellcụm. Xem :help spell-syntax(và phần còn lại của tệp :help spell:help syntax) để biết chi tiết đầy đủ.

Cách khắc phục nhanh và bẩn để có kết quả mong muốn là tạo một tệp mới trong thư mục Vim config: .vim/after/syntax/html.vimvới nội dung:

syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell
syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell

Các dòng này xác định tô sáng cú pháp cho các thuộc tính HTML và được sao chép từ tệp html.vim có trong các tệp cú pháp chuẩn của Vim. Sau đó tôi đã thêm @Spellcụm vào containstrường để cho phép kiểm tra chính tả trong từng mục cú pháp.

Để chỉ áp dụng điều này cho các thuộc tính "title" và "data- *", cần phải tinh chỉnh biểu thức chính quy được sử dụng để khớp với các mục và chỉnh sửa rộng hơn một chút về cách hoạt động của tô sáng HTML. Đây là một giải pháp chỉ hoạt động cho các thuộc tính "tiêu đề":

syn region htmlStringSpell contained start=+title=["']+hs=s+6 end=+["']+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell containedin=htmlTag,ScriptTag
hi def link htmlStringSpell String

Lưu ý

  1. Biểu thức chính quy hiện bao gồm tên của titlethuộc tính và phần bù để phần này của mục cú pháp không được đưa vào phần tô sáng. (Xem :help syn-pattern-offset)
  2. Mục cú pháp hiện có tên riêng và do đó cần phải (i) là containedintất cả các mục cú pháp mà htmlStrings được chứa trong thông qua các containscài đặt tương ứng của chúng . (ii) có điểm nhấn riêng được áp dụng.

1
Cảm ơn! Cập nhật câu trả lời của tôi để thêm các dòng trích dẫn. (Làm việc trên bản sửa lỗi đầy đủ)
Giàu

3

Từ /usr/share/vim/vim74/syntax/html.vim:

syn region  htmlString   contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc

Để thêm hỗ trợ chính tả, chúng ta cần thêm @Spelltừ khóa (xem :help spell-syntax) như vậy:

syn region  htmlString   contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell
syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc,@Spell

Bạn cần đặt cái này vào ~/.vim/after/syntax/html.vimđể nó sẽ ghi đè các quy tắc cú pháp mặc định.

Tiền thưởng:
Dòng đầu tiên dành cho các thuộc tính trong chuỗi được trích dẫn kép ( attr="value") và dòng thứ hai nếu dành cho chuỗi được trích dẫn đơn ( attr='value'). Bạn cũng có thể ghi đè chỉ một trong số này, vì vậy bạn có thể chọn xem mình có kiểm tra chính tả hay không.

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.