ฉันต้องการมีการเยื้องที่แตกต่างกันตามประเภทของไฟล์ที่ฉันกำลังทำงาน ตัวอย่างเช่นทำงานกับ.c
ไฟล์ที่ฉันต้องการเยื้องของฉันเป็น 4 ช่องว่าง ใน.html
ไฟล์ที่ฉันต้องการ (ต้อง) ทำงานกับแท็บ
ฉันจะบรรลุสิ่งนั้นได้อย่างไร
ฉันต้องการมีการเยื้องที่แตกต่างกันตามประเภทของไฟล์ที่ฉันกำลังทำงาน ตัวอย่างเช่นทำงานกับ.c
ไฟล์ที่ฉันต้องการเยื้องของฉันเป็น 4 ช่องว่าง ใน.html
ไฟล์ที่ฉันต้องการ (ต้อง) ทำงานกับแท็บ
ฉันจะบรรลุสิ่งนั้นได้อย่างไร
คำตอบ:
~/.vim/after/ftplugin/<filetype>.vim
วิธีที่ดีที่สุดคือการใส่การตั้งค่าผู้ที่อยู่ใน
สำหรับ HTML (สมมติว่าคุณต้องการแท็บกว้าง 4 ตัวอักษร):
~/.vim/after/ftplugin/html.vim
setlocal shiftwidth=4
setlocal softtabstop=4
setlocal noexpandtab
การใช้ ftplugin นั้นต้องการที่จะใช้ autocommands เพราะ Vim ทำการตรวจสอบไฟล์ด้วยตัวเองแล้วและพยายามที่จะหา ftplugin ที่เพียงพอแล้วดังนั้นจึงไม่มีเหตุผลที่จะบังคับให้ใช้การตรวจสอบเพิ่มเติมและปรับใช้ล้ออีกครั้ง
- แก้ไข -
สมมติว่าคุณมีfiletype plugin on
ของคุณvimrc
- ซึ่งคุณควร - Vim จะพยายามตรวจสอบประเภทไฟล์ของไฟล์ที่คุณแก้ไขและเมื่อพบประเภทไฟล์ที่ถูกต้องและตั้งค่าสำหรับบัฟเฟอร์แล้วให้ลองหา ftplugin ที่สอดคล้องกันในตำแหน่งมาตรฐานเหล่านี้:
$VIMRUNTIME/ftplugin/html.vim
~/.vim/ftplugin/html.vim
~/.vim/ftplugin/after/html.vim
สิ่งเหล่านี้จะเกิดขึ้นโดยอัตโนมัติดังนั้นหาก Filetype ของคุณเป็นที่รู้จักโดย Vim ไม่มีเหตุผลใดที่จะเพิ่มตรรกะการตรวจจับชนิดไฟล์ใด ๆ : เพียงแค่เพิ่มการตั้งค่าของคุณไปยัง ftplugin ที่ถูกต้องและคุณเป็นคนดี
filetype plugin indent on
vimrc
filetype plugin on
มีการตั้งค่าเส้นทางของกลุ่มรวมถึงftplugin/<filetype>.vim
และafter/ftplugin/<filetype>/vim
ไฟล์ในเส้นทางของมัน
คุณสามารถทำเช่นนี้กับ autocommands .vimrc
ในของคุณ
ตัวอย่างเช่นฉันมีฟังก์ชันhtml_like_mode
ที่ตั้งค่าสิ่งต่าง ๆ สำหรับการแก้ไขไฟล์ HTML ในตัวฉัน.vimrc
ฉันมี:
au BufNewFile,BufRead *.html call s:html_like_mode()
กุญแจนั้นปิดอยู่ที่นามสกุลไฟล์ คุณสามารถปิดไฟล์ประเภทนี้ได้หากคุณเปิดใช้งาน:
au FileType perl setlocal equalprg=perltidy
อย่างที่คุณเห็นคุณสามารถให้มันทำคำสั่งใด ๆ ดังนั้นคุณสามารถทำsetlocal shiftwidth 4
ไฟล์ * .c ของคุณได้อย่างง่ายดาย
augroup
ช่วยให้คุณสามารถจัดกลุ่มข้อความอัตโนมัติที่เกี่ยวข้องลงในกลุ่มที่มีชื่อ (ดูที่นี่เพื่อเรียนรู้เกี่ยวกับ Autocommand Groups) เราใช้augroup
s เพื่อเพิ่ม autocommands ไป~/.vimrc
ในทางที่จะไม่เพิ่มที่ซ้ำกันทุกครั้งที่เรามามัน
augroup vimrc
autocmd!
augroup END
autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4
ใช้autocmdและFileType
autocmd FileType html setlocal shiftwidth=4 tabstop=4