ฉันจะตรวจสอบการสะกดคำในแอตทริบิวต์ HTML ได้อย่างไร


9

คุณลักษณะการตรวจสอบการสะกดคำเป็นกลุ่มนั้นใช้งานได้ดีในกรณีส่วนใหญ่ - มันฉลาดพอที่จะแยกรหัสจากตัวอักษรและความคิดเห็นในภาษาส่วนใหญ่ อย่างไรก็ตามฉันมีปัญหากับการตรวจสอบการสะกด HTML:

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

ในตัวอย่างข้างต้นdivจะมีการเน้นเฉพาะความผิดพลาดภายใน(# 3) มันจะเป็นการดีถ้ามีการตรวจสอบคุณลักษณะที่เกี่ยวข้องทั้งหมด - อย่างน้อยtitleและdata-*ในอุดมคติ - รายการของคุณลักษณะที่กำหนดค่าได้

มันสามารถทำได้ผ่านการกำหนดค่าหรือ VimScript? ปลั๊กอินจะทำเช่นนั้น แต่ควรจะกำหนดค่าสำหรับHTMLไฟล์ที่เหมือนกัน ( เช่นไฟล์ ASP. NET MVC cshtml)

คำตอบ:


5

รายการไวยากรณ์ที่ Vim จะเน้นการสะกดคำผิดถูกกำหนดโดยใช้@Spellและ@NoSpellกลุ่ม ดู:help spell-syntax(และส่วนที่เหลือของ:help spellและ:help syntaxไฟล์) สำหรับรายละเอียดแบบเต็ม

การแก้ไขที่รวดเร็วและสกปรกเพื่อให้ได้ผลลัพธ์ตามที่คุณต้องการคือการสร้างไฟล์ใหม่ในไดเรกทอรี Vim config ของคุณ: .vim/after/syntax/html.vimพร้อมเนื้อหา:

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

บรรทัดเหล่านี้กำหนดเน้นไวยากรณ์สำหรับแอตทริบิวต์ HTML และคัดลอกจากไฟล์ html.vim ที่รวมอยู่ในไฟล์ไวยากรณ์มาตรฐานของ Vim ฉันเพิ่ม@Spellคลัสเตอร์ในcontainsฟิลด์เพื่อเปิดใช้งานการตรวจการสะกดภายในรายการไวยากรณ์แต่ละรายการ

เพื่อที่จะใช้สิ่งนี้กับแอตทริบิวต์ "ชื่อเรื่อง" และ "data- *" ต้องมีการปรับการแสดงออกปกติที่ใช้สำหรับการจับคู่รายการและการแก้ไขเพิ่มเติมเล็กน้อยเกี่ยวกับวิธีการทำงานของการเน้น HTML ต่อไปนี้เป็นโซลูชันที่ใช้งานได้กับแอตทริบิวต์ "ชื่อ" เท่านั้น:

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. ตอนนี้นิพจน์ปกติจะรวมชื่อของแอtitleททริบิวต์และออฟเซ็ตเพื่อให้ส่วนนี้ของรายการไวยากรณ์ไม่รวมอยู่ในการไฮไลต์ (ดู:help syn-pattern-offset)
  2. ตอนนี้ไอเท็มไวยากรณ์มีชื่อของตัวเองและดังนั้นจึงจำเป็นต้อง (i) เป็นcontainedinไอเท็มไวยากรณ์ทั้งหมดที่ htmlStrings มีอยู่ผ่านcontainsการตั้งค่าที่เกี่ยวข้อง (ii) ใช้การไฮไลต์ของตนเอง

1
ขอบคุณ! อัปเดตคำตอบของฉันเพื่อเพิ่มบรรทัดคำพูดเดียว (ทำงานกับการแก้ไขทั้งหมด)
Rich

3

จาก/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

หากต้องการเพิ่มการสนับสนุนการสะกดคำเราจำเป็นต้องเพิ่ม@Spellคำหลัก (ดู:help spell-syntax) ดังนี้:

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

คุณต้องใส่สิ่งนี้ลงไป~/.vim/after/syntax/html.vimเพื่อที่จะแทนที่กฎไวยากรณ์เริ่มต้น

เคล็ดลับโบนัส:
บรรทัดแรกใช้สำหรับแอตทริบิวต์ในสตริงที่attr="value"มีเครื่องหมายคำพูดคู่ ( ) และบรรทัดที่สองถ้าเป็นสตริงที่มีเครื่องหมายคำพูดเดี่ยว ( attr='value') นอกจากนี้คุณยังสามารถแทนที่หนึ่งในนั้นเพื่อให้คุณสามารถเลือกได้ว่าคุณมีการตรวจสอบการสะกด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.