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 ).

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.

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.