ฉันจะเปลี่ยนการเยื้องเริ่มต้นตามประเภทไฟล์ได้อย่างไร


34

ฉันต้องการมีการเยื้องที่แตกต่างกันตามประเภทของไฟล์ที่ฉันกำลังทำงาน ตัวอย่างเช่นทำงานกับ.cไฟล์ที่ฉันต้องการเยื้องของฉันเป็น 4 ช่องว่าง ใน.htmlไฟล์ที่ฉันต้องการ (ต้อง) ทำงานกับแท็บ

ฉันจะบรรลุสิ่งนั้นได้อย่างไร

คำตอบ:


25

~/.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 ที่ถูกต้องและคุณเป็นคนดี


ฉันต้องเปิดใช้งาน ftplugin อย่างใดหรือจะสร้างไฟล์ที่เปิดใช้งานโดยอัตโนมัติหรือไม่?
DeltaLima

ตรวจสอบให้แน่ใจว่าคุณมีในของคุณfiletype plugin indent on vimrc
romainl

1
@DeltaLima เป็นกลุ่มมีเส้นทางที่ผ่านการตรวจสอบการตั้งค่า ตราบใดที่filetype plugin onมีการตั้งค่าเส้นทางของกลุ่มรวมถึงftplugin/<filetype>.vimและafter/ftplugin/<filetype>/vimไฟล์ในเส้นทางของมัน
davidlowryduda

@DeltaLima โปรดดูการแก้ไขของฉัน
romainl

14

คุณสามารถทำเช่นนี้กับ 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 ของคุณได้อย่างง่ายดาย


9

augroupช่วยให้คุณสามารถจัดกลุ่มข้อความอัตโนมัติที่เกี่ยวข้องลงในกลุ่มที่มีชื่อ (ดูที่นี่เพื่อเรียนรู้เกี่ยวกับ Autocommand Groups) เราใช้augroups เพื่อเพิ่ม autocommands ไป~/.vimrcในทางที่จะไม่เพิ่มที่ซ้ำกันทุกครั้งที่เรามามัน

augroup vimrc
  autocmd!
augroup END

autocmd vimrc FileType html setlocal shiftwidth=4 tabstop=4

2
มันจะมีประโยชน์ถ้าคุณจะอธิบายสิ่งนี้ไม่และวิธีการที่จะตั้งขึ้นทุกคนจะไม่ทราบ)
เซท

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