วิธีบังคับให้ vim เน้นไวยากรณ์ - ไฟล์เป็น html


120

ฉันจะตั้งค่าการเน้นไวยากรณ์ของ vim เพื่อจัดการนามสกุลไฟล์เป็นไฟล์ html ได้อย่างไร

ฉันใช้เทมเพลต ez ดังนั้นนามสกุลของไฟล์คือ.ezt. แต่ส่วนมากเป็นโค้ด html ปกติ

คำตอบ:


109

คุณยังสามารถใส่ลงใน. vimrc ของคุณ:

au BufReadPost *.ezt set syntax=html

E216: ไม่มีกลุ่มหรือเหตุการณ์ดังกล่าว: BufLoad * .ezt set syntax = html ... ฉันทำอะไรผิด?
Karthick

2
จากประสบการณ์ของผมวิธีนี้จะล้มเหลวถ้าคุณให้แน่นอน.myspecialdotfileเช่นชื่อไฟล์ มันต้องการดาวอยู่ที่ไหนสักแห่งเพื่อทำงานแม้ว่าในทางทฤษฎีจะไม่จำเป็นก็ตาม
SeldomNeedy

ฉันมีสิ่งนี้ใน.vimrcไฟล์สำหรับ Dockerfiles ที่มีนามสกุลสำหรับวัตถุประสงค์ที่แตกต่างกัน autocmd BufNewFile, BufRead Dockerfile * set filetype = docker เพียงแค่ใช้Dockerfile*ป้องกันการเน้นไวยากรณ์ไม่ให้ทำงานเมื่อใช้งานvi Dockerfile- การเพิ่มแบ็กสแลชช่วยให้สามารถทำงานสำหรับDockerfile/ Dockerfile.somethingและDockerfilesomething
Android Control

204
:set syntax=html

10
@pbr: ซึ่งตอบตรงกับชื่อคำถาม
Skippy le Grand Gourou

2
> "ถือว่านามสกุลไฟล์เป็นไฟล์ html"
0atman

นี่คือสิ่งที่ฉันกำลังมองหา :)
niken

อาจช่วยให้ทราบว่าการรัน:set syntaxจะส่งคืนการไฮไลต์ไฟล์ที่ใช้ในปัจจุบัน
Ari

26

ลองดูที่นี้หัวข้อ Wikia เป็นกลุ่ม เคล็ดลับที่เป็นประโยชน์:

  • ดังที่ได้กล่าวถึงคำตอบอื่น ๆ คุณสามารถใช้คำสั่ง vim set เพื่อตั้งค่าไวยากรณ์ :set syntax=<type>ซึ่ง<type>เป็นสิ่งที่ต้องการperl, html, phpฯลฯ

  • มีกลไกอื่นที่สามารถใช้เพื่อควบคุมการเน้นไวยากรณ์ที่เรียกว่าfiletypeหรือเรียกftสั้น ๆ คล้ายกับไวยากรณ์คุณกำหนดประเภทดังนี้: :set filetype=html. ประเภทไฟล์อื่น ๆ ที่มีperl, phpฯลฯ

  • บางครั้งกลุ่ม "ลืม" ว่าจะใช้ไวยากรณ์อะไรโดยเฉพาะอย่างยิ่งถ้าคุณผสมสิ่งต่างๆเช่น php และ html เข้าด้วยกัน ใช้แป้นพิมพ์ลัดCtrl+ L( <C-L>) เพื่อรับกลุ่มเพื่อรีเฟรชการไฮไลต์


ตอบดีที่สุด! +!
J. Allan

17

โปรดทราบว่า:set syntax=xmlไฮไลต์อย่างถูกต้อง แต่ดูเหมือนจะล้มเหลวเมื่อมีการพยายามระบุไฟล์โดยอัตโนมัติ (เช่นกำลังทำงานgg=G)

เมื่อฉันเปลี่ยนไป:set filetype=xmlใช้การไฮไลต์ทำงานได้อย่างถูกต้องและไฟล์ที่เยื้องอย่างถูกต้อง


14

ในไฟล์. php (หรือไฟล์ html) คุณสามารถใช้Vim Modelineเพื่อบังคับคำสั่งหรือการตั้งค่าบางอย่าง:

 1 /* vim: syntax=javascript
 2  *
 3  * .submit_norefresh()
 ~
 ~

2
คุณหมายถึง Modeline
Shammel Lee

บางครั้งการau ...ตั้งค่าที่เกี่ยวข้องกับไวยากรณ์ในการ~/.vimrcถูกละเว้นของฉันสำหรับไฟล์บางไฟล์ (น่าจะเป็นเพราะข้อมูลเมตาที่แก้ไข?) นอกเหนือจากการคัดลอกเนื้อหาไฟล์นั้นไปยังไฟล์ใหม่แล้วการตั้งค่า modeline ที่ด้านบนของไฟล์นั้นจะใช้งานได้ เช่นสำหรับสคริปต์ BASH การเพิ่มบรรทัดที่สอง# vim: syntax=shหลังจาก Shebang (บรรทัดแรก:) #!/bin/bashดูเหมือนจะทำงานได้อย่างน่าเชื่อถือ เนื่องจากโดยพื้นฐานแล้วเป็น "ความคิดเห็น" ฉันจึงใส่ทั้งสองบรรทัดไว้ในsbbข้อมูลโค้ด ("shebang bash") ของฉัน
Victoria Stuart

13

หากต้องการทำให้เป็นอัตโนมัติให้เพิ่มบรรทัดนี้ใน~/.vimrc:

autocmd BufNewFile,BufRead *.ezt set filetype=html

หากคุณต้องการทำสำหรับไฟล์ปัจจุบันให้พิมพ์:

:set filetype=html

คุณยังสามารถแทนที่syntaxแทนfiletypeแต่filetypeส่งผลกระทบต่อสิ่งต่างๆมากกว่าsyntax (รวมถึงการเน้นไวยากรณ์กฎการเยื้องและปลั๊กอิน) ดังนั้นโดยทั่วไปคุณควรใช้filetypeเว้นแต่คุณต้องการให้มีผลsyntaxเท่านั้น

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