Jak mogę sprawdzić pisownię w atrybutach HTML?

9

Funkcja sprawdzania pisowni Vim działa świetnie w większości przypadków - jest nawet wystarczająco inteligentna, aby odróżnić kod od literałów i komentarzy w większości języków. Mam jednak problemy z sprawdzaniem pisowni HTML:

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

W powyższym przykładzie divpodświetlony jest tylko błąd wewnątrz (# 3). Byłoby wspaniale mieć wszystkie istotne atrybuty sprawdzone - przynajmniej, titlea data-*idealnie - konfigurowalną listę atrybutów.

Czy można to osiągnąć poprzez konfigurację lub VimScript? Wtyczka również się sprawdzi, ale idealnie powinna być konfigurowalna dla różnych HTMLplików (na przykład cshtmlplików ASP .NET MVC ).

Jarlax
źródło

Odpowiedzi:

5

Elementy składni, w których Vim będzie podkreślał błędy ortograficzne, są definiowane za pomocą klastrów @Spelli @NoSpell. Zobacz :help spell-syntax(i resztę plików :help spelli :help syntax), aby uzyskać szczegółowe informacje.

Szybką i brudną poprawką do uzyskania pożądanego rezultatu jest utworzenie nowego pliku w katalogu konfiguracyjnym Vima: .vim/after/syntax/html.vimz zawartością:

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

Te linie definiują podświetlanie składni atrybutów HTML i zostały skopiowane z pliku html.vim, który jest zawarty w standardowych plikach składniowych Vima. Następnie dodałem @Spellklaster do containspola, aby umożliwić sprawdzanie pisowni w każdym elemencie składni.

Aby zastosować to tylko do atrybutów „tytuł” ​​i „dane- *”, konieczne jest dostrajanie wyrażenia regularnego używanego do dopasowywania elementów oraz nieco szersza edycja sposobu działania podświetlania HTML. Oto rozwiązanie, które działa tylko w przypadku atrybutów „tytuł”:

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

NB

  1. Wyrażenie regularne zawiera teraz nazwę titleatrybutu i przesunięcie, dzięki czemu ta część elementu składni nie jest uwzględniona w wyróżnieniu. (Patrz :help syn-pattern-offset)
  2. Element składni ma teraz swoją własną nazwę, dlatego musi (i) być containedinwszystkimi elementami składni, w których zawarte są htmlString poprzez odpowiednie containsustawienia. (ii) zastosować własne wyróżnienie.
Bogaty
źródło
1
Dzięki! Zaktualizowałem moją odpowiedź, aby dodać wiersze pojedynczego cudzysłowu. (Praca nad pełną poprawką)
Rich
3

Od /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

Aby dodać obsługę pisowni, musimy dodać @Spellsłowo kluczowe (patrz :help spell-syntax) w następujący sposób:

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

Musisz to wstawić, ~/.vim/after/syntax/html.vimaby zastąpić domyślne reguły składni.

Dodatkowa wskazówka:
Pierwszy wiersz dotyczy atrybutów w ciągach podwójnych ( attr="value"), a drugi - w przypadku ciągów podwójnych ( attr='value'). Możesz również zastąpić tylko jeden z nich, abyś mógł wybrać, czy masz sprawdzanie pisowni.

Martin Tournoij
źródło