ฉันจะบอกเป็นกลุ่มได้อย่างไรว่านามสกุลไฟล์บางส่วนมีความหมายเหมือนกัน


21

ฉันแก้ไขรหัส C ++ ใน.cppไฟล์ในขณะที่รหัสแม่แบบเข้าไปใน.tccไฟล์ เมื่อฉันเปิดไฟล์ดังกล่าวจะไม่มีการเน้นไวยากรณ์ ฉันลองใช้ไฟล์set syntax=cppaa แต่ไม่ได้ทำอะไรเลยในขณะที่มันใช้งานได้ มีวิธีที่จะเป็นกลุ่มปฏิบัติต่อส่วนขยายที่เฉพาะเจาะจงเหมือนกันกับคนอื่น ๆ ?tpp.vim~/.vim/ftplugin/

คำตอบ:


19

แนวทางที่ต้องการคือการสร้าง a ~/.vim/filetype.vimตามที่กล่าวไว้ใน:help 43.2และอธิบายไว้ในVim FAQ 26.8 :

ทางเลือกที่ดีกว่าสำหรับวิธีการข้างต้นคือการสร้างไฟล์ filetype.vim ในไดเรกทอรี ~ / .vim (หรือในหนึ่งในไดเรกทอรีที่ระบุในตัวเลือก 'runtimepath') และเพิ่มบรรทัดต่อไปนี้:

" my filetype file
if exists("did_load_filetypes")
    finish
endif
augroup filetypedetect
    au! BufRead,BufNewFile *.x       setfiletype c
augroup END

แก้ไข:

did_load_filetypesไม่ควรทำให้เกิดปัญหาใด ๆ มันจะต้องเริ่มเป็นกลุ่มหลังจากที่มีการเปลี่ยนแปลง

มีความจำเป็นเพื่อหลีกเลี่ยงการโหลดไฟล์นี้หลายไฟล์โดยไม่จำเป็นและได้รับมาจากไฟล์ฐาน ($ VIMRUNTIME / filetype.vim):

" Vim support file to detect file types
"
" Maintainer:   Bram Moolenaar <Bram@vim.org>
" Last Change:  2014 Jun 12

" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
  finish
endif
let did_load_filetypes = 1

:help new-filetypeสำหรับการตรวจสอบข้อมูลเพิ่มเติม


ทำไมต้องมีifคำสั่ง ถ้าฉันทิ้งไว้ autocmds จะไม่ถูกดำเนินการสำหรับฉัน
oarfish

@oarfish แม้ว่าคุณจะเริ่มต้นเป็นกลุ่ม?
mMontu

ตกลงนี่แปลก ฉันต้องau!งบในกลุ่มคือในบรรทัดด้านล่างau! BufRead,BufNewFile *.py setfiletype python au! BufRead,BufNewFile *.tpp setfiletype cppแต่มีเพียงอันที่สองเท่านั้นที่ใช้งานได้จริง การแก้ไขไฟล์ไม่ได้กำหนดประเภทของไฟล์ที่จะ.py pythonฉันไม่ได้เป็น vim-guru ดังนั้นฉันอาจจะพลาดอะไรบางอย่างไป
oarfish

@oarfish หากคุณตรวจสอบไฟล์ที่ฉันกล่าวถึงในการแก้ไขคุณจะพบว่ามันมีบรรทัดอยู่แล้วau BufNewFile,BufRead *.py,*.pyw setf pythonดังนั้นบรรทัดแรกของคุณไม่เกี่ยวข้อง ปัญหาของคุณอาจเป็นที่อื่น
mMontu

"Editing .py files does not set the file type to python"- ผลลัพธ์ของ:set ftในกรณีนั้นคืออะไร? ถ้าไม่ใช่ไพ ธ อนให้ลองทำตามขั้นตอนในVim-FAQ 2.5 - ฉันมีปัญหา "xyz" (พอใช้) กับ Vim
mMontu

14

คุณสามารถทำได้ (ในโลกของคุณ.vimrc):

autocmd BufEnter *.tpp :setlocal filetype=cpp

autocmd BufEnter *.cuf :setlocal filetype=fortranเพื่อรักษาไฟล์ CUDA Fortran เป็น Fortran
khaverim

1

หนึ่งอาจมี: au BufRead,BufNewFile *.tpp setlocal filetype=cppใน.vimrcเช่นนั้นเมื่อเปิดไฟล์ที่มี.tppนามสกุล filetype ถูกตั้งค่าสำหรับC ++


1
สิ่งนี้ดูเหมือนจะเหมือนกับคำตอบของ @ edi9999 คุณสามารถอธิบายอย่างละเอียดเกี่ยวกับสาเหตุที่ใช้BufRead,BufNewFileแทนได้BufEnterหรือไม่?
oarfish

@oarfish มันไม่สำคัญหรอกที่ฉันคิดว่า แต่ฉันชอบBufRead,BufNewFileมากกว่าBufEnterเพราะในเอกสาร ( :help BufEnter) มันระบุ: "BufEnter: .... นอกจากนี้ยังดำเนินการเมื่อเริ่มแก้ไขบัฟเฟอร์หลังจาก autocommands BufReadPost" ที่BufReadPostตรงกันกับBufRead นอกจากนี้ฉันไม่เชื่อว่า:จำเป็นต้องมีมาก่อนsetlocalดังนั้นฉันจึงละเว้นในคำตอบของฉัน (ผมอาจจะตีความว่านี่ต้องสมบูรณ์มีความสุขที่จะได้ยินการสนทนาต่อไป)
tallamjr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.