Bagaimana cara memeriksa ejaan dalam atribut HTML?

9

Fitur pemeriksa ejaan Vim bekerja sangat baik dalam banyak kasus - bahkan cukup pintar untuk membedakan kode dari literal dan komentar dalam sebagian besar bahasa. Namun saya memiliki masalah dengan pemeriksaan ejaan HTML:

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

Dalam contoh di atas hanya kesalahan di dalam divyang disorot (# 3). Akan lebih baik untuk memeriksa semua atribut yang relevan - setidaknya titledan data-*, secara ideal - daftar atribut yang dapat dikonfigurasi.

Apakah dapat dicapai melalui konfigurasi atau VimScript? Plugin juga akan melakukannya, tetapi idealnya harus dapat dikonfigurasi untuk HTMLfile yang berbeda- seperti (misalnya, cshtmlfile ASP .NET MVC ).

Jarlax
sumber

Jawaban:

5

Item sintaks di mana Vim akan menyoroti kesalahan ejaan didefinisikan menggunakan @Spelldan @NoSpellcluster. Lihat :help spell-syntax(dan sisanya :help spelldan :help syntaxfile) untuk detail lengkap.

Perbaikan cepat dan kotor untuk mendapatkan hasil yang Anda inginkan adalah membuat file baru di direktori konfigurasi Vim Anda: .vim/after/syntax/html.vimdengan konten:

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

Baris-baris ini menentukan penyorotan sintaksis untuk atribut HTML, dan disalin dari file html.vim yang disertakan dalam file sintaksis standar Vim. Saya kemudian menambahkan @Spellcluster ke containsbidang untuk mengaktifkan pemeriksa ejaan dalam setiap item sintaks.

Untuk menerapkan ini hanya pada atribut "title" dan "data- *" memerlukan fine-tuning ekspresi reguler yang digunakan untuk mencocokkan item, dan pengeditan sedikit lebih luas dari cara kerja penyorotan HTML bekerja. Berikut ini solusi yang hanya berfungsi untuk atribut "title":

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. Ekspresi reguler sekarang termasuk nama titleatribut, dan offset sehingga bagian dari item sintaks ini tidak termasuk dalam penyorotan. (Lihat :help syn-pattern-offset)
  2. Item sintaks sekarang memiliki namanya sendiri, dan karena itu perlu (i) menjadi containedinsemua item sintaksis yang htmlStrings terkandung melalui containspengaturan masing-masing . (ii) menerapkan penyorotan sendiri.
Kaya
sumber
1
Terima kasih! Memperbarui jawaban saya untuk menambahkan baris kutipan tunggal. (Bekerja pada perbaikan penuh)
Rich
3

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

Untuk menambahkan dukungan ejaan, kita perlu menambahkan @Spellkata kunci (lihat :help spell-syntax) seperti:

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

Anda harus memasukkan ini ke dalam ~/.vim/after/syntax/html.vimsehingga akan menimpa aturan sintaksis default.

Kiat bonus:
Baris pertama untuk atribut dalam string yang dikutip ganda ( attr="value"), dan yang kedua jika untuk string yang dikutip tunggal ( attr='value'). Anda juga dapat mengesampingkan salah satunya saja, sehingga Anda dapat memilih apakah Anda telah memeriksa ejaan.

Martin Tournoij
sumber