Persistent: ตั้งค่าไวยากรณ์สำหรับประเภทไฟล์ที่กำหนด?


107

ผมทำงานในโครงการ Symfony2 myfile.html.twigซึ่งใช้ทวิกและประเภทไฟล์ที่มี กลุ่มไม่ตรวจจับการเน้นไวยากรณ์โดยอัตโนมัติและไม่ใช้เลย ฉันสามารถใช้ได้:set syntax=HTMLหลังจากเปิดไฟล์แล้ว แต่นี่เป็นความเจ็บปวดเมื่อกระโดดไปมาระหว่างไฟล์

มีวิธีตั้งค่าการเน้นไวยากรณ์อย่างต่อเนื่องสำหรับประเภทไฟล์เฉพาะในกลุ่มหรือไม่?

คำตอบ:


119

คุณสามารถใช้autocmdเพื่อบรรลุสิ่งนั้นได้เช่น:

augroup twig_ft
  au!
  autocmd BufNewFile,BufRead *.html.twig   set syntax=html
augroup END

ควรทำงาน.


4
เพื่อนก็ชี้เรื่องนี้ให้ฉันฟังเช่นกัน ตั้งค่าประเภทไฟล์: au BufRead,BufNewFile *.html.twig set filetype=twigตั้งค่าไวยากรณ์:au BufRead,BufNewFile *.html.twig set syntax=HTML
Bendihossan

31
ฉันขอแนะนำให้ใส่บรรทัดนี้ลงใน~/.vim/ftdetect/html.twig.vimไฟล์ (คุณควรสร้าง) ซึ่งเป็นสถานที่ที่เหมาะสมสำหรับคำสั่งอัตโนมัติดังกล่าว
xaizek

@xaizek ฉันเข้าใจว่าสิ่งนี้แนะนำ แต่คุณมีความคิดว่าทำไมมันไม่ได้ผลสำหรับฉันถ้าฉันใส่~/.vimrcแทน~/.vim/ftdetect/?
Haralan Dobrev

2
@HaralanDobrev อาจถูกเขียนทับโดยคำสั่งอัตโนมัติอื่นที่กำหนดไว้หลังจากบรรทัดนี้ เรียกใช้:autocmd BufNewFile,BufRead *.html.twigภายใน Vim เพื่อดูคำสั่งอัตโนมัติที่ลงทะเบียนไว้ทั้งหมด (ลองใช้กับเหตุการณ์ที่แยกจากกันเท่านั้นBufNewFileและเท่านั้นBufRead) ตรวจสอบผลลัพธ์ของ:verbose set syntax?.
xaizek

1
มันง่ายแค่ไหนที่จะหาวิธีแก้ปัญหานี้ทำให้ฉันหวังว่า vim wiki จะไม่มีอยู่จริง
Jared Beach

65

เพิ่มข้อความต่อไปนี้ให้กับคุณ.vimrc:

" Set the filetype based on the file's extension, overriding any
" 'filetype' that has already been set
au BufRead,BufNewFile *.html.twig set filetype=html

หรือ

" Set the filetype based on the file's extension, but only if
" 'filetype' has not already been set
au BufRead,BufNewFile *.html.twig setfiletype html

7
นี่เป็นคำตอบทั่วไปที่ดีกว่าคำตอบที่ยอมรับ หากกลุ่มไม่สามารถตรวจจับประเภทของไฟล์ได้ (และจัดเตรียมการเน้นไวยากรณ์โดยอัตโนมัติ) จะเป็นการดีกว่าที่จะตั้งค่าประเภทไฟล์แทนที่จะเป็นเพียงไวยากรณ์ของไฟล์
mrfred

1
setfiletypeควรจะเป็นset filetypeอย่างน้อยนั่นคือวิธีที่ฉันจะทำให้มันทำงานได้
dau_sama

1
@dau_sama setfiletype=htmlไม่ใช่ไวยากรณ์ที่ถูกต้อง ฉันได้แก้ไขคำตอบแล้ว สังเกตว่าsetfiletype htmlและset filetype=htmlทำสิ่งต่าง ๆ ดังที่กล่าวไว้ในคำตอบ
bdesham


3

ฉันรู้ว่าสิ่งนี้ไม่ได้ตอบคำถามโดยตรง แต่สิ่งนี้ตอบจุดประสงค์ของคำถามซึ่งก็คือการเน้นไวยากรณ์ที่ทำงานกับ Twig / Symfony 2

ฉันขอแนะนำให้คุณตรวจสอบhttps://github.com/beyondwords/vim-twig (ไม่ใช่ของฉัน) ซึ่งให้:

  • ไฟล์เน้นไวยากรณ์สำหรับ * .html.twig,
  • การตรวจหาไฟล์ประเภทเดียวกันและ
  • ปลั๊กอินประเภทไฟล์ช่วยให้คุณสามารถแก้ไขการตั้งค่าต่างๆได้ตามต้องการเมื่อแก้ไขไฟล์ * .html.twig

ฉันหวังว่านี่จะช่วยได้

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