การตั้งค่าการกำหนดค่าตามความชอบช่องว่าง Vim ตามชนิดไฟล์


155

ที่ทำงานของฉันฉันต้องทำตามสไตล์ของบ้านสำหรับการเยื้องซึ่งจะเป็นดังนี้:

  • 2 ช่องว่างเมื่อเขียนโค้ด html และ ruby
  • แท็บเมื่อเข้ารหัสจาวาสคริปต์โดยมี tabwidth = 4 แนะนำ

วิธีที่ดีที่สุดในการระบุการตั้งค่าช่องว่างต่าง ๆ ต่อประเภทไฟล์คืออะไร



คำตอบทั้งหมดเหล่านี้ทำให้ฉันสับสนมากขึ้น ปัญหาคือตัวเลือกนั้นขึ้นอยู่กับความชอบ คำตอบที่ยอมรับมีไวยากรณ์ที่ดีแม้ว่า นี่เป็นแนวทางที่ยอดเยี่ยม: vimcasts.org/transcripts/2/en
Mikael Lindlöf

คำตอบ:


245

มีหลายวิธี แต่นี่เป็นวิธีที่ง่ายและเข้าใจง่าย เพิ่มบรรทัดเหล่านี้ใน~/.vimrc:

autocmd FileType html setlocal ts=2 sts=2 sw=2
autocmd FileType ruby setlocal ts=2 sts=2 sw=2
autocmd FileType javascript setlocal ts=4 sts=4 sw=4

27
ts = 'จำนวนช่องว่างที่ <Tab> ในไฟล์ใช้' sts = 'จำนวนช่องว่างที่ <Tab> ใช้ขณะแก้ไข' sw = 'จำนวนช่องว่างที่จะใช้สำหรับขั้นตอนการเยื้อง (อัตโนมัติ)' สำหรับรายละเอียดดู: vimdoc.sourceforge .net / htmldoc / quickref.html # option-list
zdsbs

ฉันจำเป็นต้องผนวกแท็บ expand อย่างน้อยสำหรับ ruby ​​ดูคำตอบโดย 'มากเกินไป php' ที่นี่
Michael Durrant

87

คำตอบของปีเตอร์ตรงไปตรงมามากพอ แต่น่าเสียดายที่ตัวเลือกไม่ถูกต้อง คุณต้องใช้ตัวเลือกต่อไปนี้แทน:

autocmd Filetype html setlocal ts=2 sw=2 expandtab
autocmd Filetype ruby setlocal ts=2 sw=2 expandtab
autocmd Filetype javascript setlocal ts=4 sw=4 sts=0 noexpandtab

ทราบด้วย:

  • :set listคุณสามารถทำให้ตัวละครที่เป็นกลุ่มการแสดงโดยใช้แท็บ
  • เมื่อคุณตั้งค่าตัวเลือกแท็บ / ช่องว่างอย่างถูกต้องแล้วคุณสามารถทำการซ่อมแซมเป็นกลุ่ม (แทนที่ช่องว่างด้วยแท็บหรือกลับกัน) โดยใช้:retab!คำสั่ง

2
ประโยชน์ที่ได้รับexpandtabมากเกินไปคืออะไรsts=2
James McMahon

12
@JamesMcMahon expandtab ขยายแท็บทั้งหมดไปยังช่องว่าง sts (softtabstop) แทรกการเว้นวรรคและแท็บสำหรับการเยื้อง: แท็บให้มากที่สุดเท่าที่จะพอดีกับการเยื้องตามขนาดของ tabstop แล้วเว้นวรรคหลังจากนั้น แน่นอนถ้าเปิดแท็บขยายแท็บทั้งหมดที่แทรกจะถูกแปลงเป็นช่องว่าง stackoverflow.com/questions/1562336/…อาจช่วยเพิ่มเติมได้ หากไม่มีแท็บขยายคำตอบของปีเตอร์จะแทรกแท็บที่มีความกว้าง 2 ตัวอักษรไม่ใช่ช่องว่าง
ajmccluskey

35

+1 ถึงคำตอบของ Peter แต่ Vim ยังให้วิธีการอื่นเช่นกัน หากคุณต้องการทำสิ่งที่ซับซ้อนกว่าตัวเลือกเดียวsetlocalเช่นการตั้งค่าตัวเลือกคำสั่งและการแม็พทั้งหมดในคราวเดียวคุณสมบัติของปลั๊กอินประเภทไฟล์ของ vim จะเข้ามาช่วย

คุณจำเป็นต้องมีfiletype plugin onหรือfiletype plugin indent onในของคุณและจากนั้นจะสร้างปลั๊กอินสำหรับเช่นทับทิมคุณสามารถสร้าง.vimrc ~/.vim/ftplugin/ruby.vimในทางเทคนิคคุณสามารถใช้คำสั่งใด ๆ ที่คุณชอบในที่นี่จะทำงานเมื่อไฟล์ทับทิมจะโหลด แต่คนที่แนะนำ ได้แก่setlocal, map <buffer>, command -bufferและกำหนดฟังก์ชั่น ข้อมูลเพิ่มเติมมากมายอยู่ในคู่มือผู้ใช้; ถ้าคุณกำลังสวยคุ้นเคยกับเสียงเรียกสคริปต์แล้วโดดไป:help 41.11มิฉะนั้นอ่านและ:help usr_40:help usr_41


10

นอกจากนี้ยังมีสคริปต์เป็นกลุ่มที่ดี: DetectIndentซึ่งพยายามตรวจจับการเยื้องของไฟล์ที่คุณเปิด มันมีประโยชน์มากถ้าคุณทำงานกับไฟล์จำนวนมากที่มีรูปแบบการเข้ารหัสที่แตกต่างกัน

ฉันใช้ข้อความอัตโนมัติใน. vimrcของฉัน:

:autocmd BufReadPost * :DetectIndent 

0

หากต้องการแทรกอักขระช่องว่างเมื่อใดก็ตามที่กดปุ่มแท็บให้ตั้งค่าตัวเลือก 'expandtab':

:set expandtab

ขั้นตอนต่อไปคือการควบคุมจำนวนตัวอักษรเว้นวรรคที่จะถูกแทรกเมื่อกดปุ่มแท็บตั้งค่าตัวเลือก 'tabstop' ตัวอย่างเช่นในการแทรก 2 ช่องว่างสำหรับแท็บให้ใช้:

:set tabstop=2

ref: http://vim.wikia.com/wiki/Converting_tabs_to_spaces

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