ฉันจะเปลี่ยนขนาดแท็บเป็นกลุ่มได้อย่างไร


172

ทุกครั้งที่ฉันเพิ่มตัวเลือกใน CSS และฉันกดEnterเพื่อกำหนดคุณสมบัติที่มันจะเป็นดังนี้:

#selector {
        property: value;
}

(แท็บ 8 ช่องว่าง)

ฉันจะกำหนดค่า Vim ให้เป็นแบบนี้ได้อย่างไร:

#selector {
    property: value;
}

(แท็บ 4 ช่องว่าง)


4
คุณต้องการหนึ่งแท็บความกว้าง 4 ช่องว่างหรือไม่ สี่ช่องว่าง? หรือสี่แท็บกว้าง 1 ช่องว่าง? พวกมันต่างกันและคุณไม่ชัดเจน ในกรณีใด ๆ เริ่มต้นด้วยการอ่าน: เขา ts,: เขา sw และ: เขาขยาย
abeyer

คำตอบ:


103

ขยายคำตอบของ zoul:

หากคุณต้องการตั้งค่า Vim ให้ใช้การตั้งค่าเฉพาะเมื่อทำการแก้ไขไฟล์ชนิดใดประเภทหนึ่งคุณจะต้องใช้งานเอกสารอัตโนมัติ:

autocmd Filetype css setlocal tabstop=4

สิ่งนี้จะทำให้แท็บนั้นปรากฏเป็น 4 ช่องว่าง การตั้งค่าexpandtabจะทำให้ Vim แทรกช่องว่างจริง ๆ (จำนวนที่ควบคุมโดยtabstop) เมื่อคุณกดแท็บ คุณอาจต้องการใช้softtabstopเพื่อทำให้แบ็คสเปซทำงานอย่างถูกต้อง (นั่นคือลดการเยื้องเมื่อเป็นสิ่งที่จะเกิดขึ้นหากใช้แท็บแทนที่จะลบครั้งละหนึ่งอักขระในเวลาเดียวกัน

ที่จะทำให้การตัดสินใจการศึกษาอย่างเต็มที่เป็นวิธีการกำหนดสิ่งขึ้นคุณจะต้องอ่านเอกสารที่เป็นกลุ่มบนtabstop, shiftwidth, และsofttabstop expandtabบิตที่น่าสนใจที่สุดอยู่ใต้expandtab( :help 'expandtab):

มีสี่วิธีหลักในการใช้แท็บใน Vim:

  1. เก็บ 'tabstop' ไว้ที่ 8 เสมอตั้ง 'softtabstop' และ 'shiftwidth' เป็น 4 (หรือ 3 หรืออะไรก็ได้ที่คุณต้องการ) และใช้ 'noexpandtab' จากนั้นกลุ่มจะใช้แท็บและช่องว่างผสมกัน แต่การพิมพ์และจะทำงานเหมือนแท็บจะปรากฏขึ้นทุก ๆ 4 (หรือ 3) ตัวอักษร

  2. ตั้งค่า 'tabstop' และ 'shiftwidth' เป็นสิ่งที่คุณต้องการและใช้ 'expandtab' วิธีนี้คุณจะแทรกช่องว่างเสมอ การจัดรูปแบบจะไม่สับสนเมื่อมีการเปลี่ยนแปลง 'tabstop'

  3. ตั้งค่า 'tabstop' และ 'shiftwidth' เป็นสิ่งที่คุณต้องการและใช้ | modeline | เพื่อตั้งค่าเหล่านี้เมื่อแก้ไขไฟล์อีกครั้ง ใช้งานได้เฉพาะเมื่อใช้ Vim เพื่อแก้ไขไฟล์

  4. ตั้งค่า 'tabstop' และ 'shiftwidth' เป็นค่าเดียวกันเสมอและ 'noexpandtab' สิ่งนี้จะใช้งานได้ (สำหรับการเยื้องเริ่มต้นเท่านั้น) สำหรับการตั้งค่า tabstop ใด ๆ ที่ผู้คนใช้ มันอาจจะดีถ้ามีแท็บหลังจากแทรกช่องว่างแรกเป็นช่องว่างถ้าคุณทำเช่นนี้ ความคิดเห็นที่จัดแนวมิฉะนั้นจะผิดเมื่อ 'tabstop' เปลี่ยน


นอกจากนี้อย่ากังวลมากเกินไปเกี่ยวกับการเปลี่ยนใจในภายหลัง ... ดู:help retab(ตรวจสอบ! ตัวแปร)
Michał Marczyk

การใช้ autocmd ประกอบกับการใช้. vimrc หรือเป็นทางเลือกหรือไม่?
Josh Desmond

225
:set tabstop=4
:set shiftwidth=4
:set expandtab

สิ่งนี้จะแทรกช่องว่างสี่ช่องแทนที่จะเป็นอักขระแท็บ ช่องว่างนั้นค่อนข้าง“ เสถียร” มากกว่าซึ่งหมายความว่าข้อความที่เยื้องกับช่องว่างจะปรากฏในเบราว์เซอร์และแอปพลิเคชันอื่น ๆ


83
ใช่ แต่แท็บนั้นมีความหมาย (แต่ละแท็บหมายถึง 1 ชั้นของการเยื้อง) ขณะที่ช่องว่างเป็นการนำเสนออย่างหมดจด หรือกล่าวอีกนัยหนึ่งการใช้แท็บจะช่วยให้คนอื่นดูโค้ดของคุณเพื่อแสดงผลได้อย่างกว้าง ๆ แต่พวกเขาก็สบายใจในขณะที่ช่องว่างไม่อนุญาตสิ่งนี้
K Prime

11
โปรดทราบว่าถ้าคุณต้องการ'>'และ'<'จะย้ายข้อความของคุณในระยะทางเช่นเดียวกับแท็บ -key คุณสามารถเพียงแค่:set shiftwidth=0ใน vimrc tabstopของคุณและลืมเกี่ยวกับมันตลอดไปเพราะนี้เป็นกลุ่มบอกว่าคุณต้องการให้การแข่งขัน
SeldomNeedy

133

ในการเปลี่ยนแปลงหนึ่งเซสชันให้ใช้คำสั่งนี้:

:set tabstop=4

หากต้องการทำการเปลี่ยนแปลงแบบถาวรให้เพิ่มลงใน~/.vimrcหรือ~/.vim/vimrc:

set tabstop=4

สิ่งนี้จะมีผลกับไฟล์ทั้งหมดไม่ใช่แค่ css หากต้องการส่งผลต่อไฟล์ css เท่านั้น:

autocmd Filetype css setlocal tabstop=4

ตามที่ระบุไว้ในคำตอบที่คาล


2
หากคุณต้องการให้แท็บทำหน้าที่เป็นช่องว่างสี่ช่องคุณจำเป็นต้องเพิ่มบรรทัดอื่นใน @Zoul answer to the vimrc ด้วยเช่นกัน; นั่นคือเพิ่ม 'set shiftwidth = 4' และ 'set expandtab' ให้กับ. vimrc ด้วย
qartal

7
คำถามคือ "ฉันจะเปลี่ยนขนาดแท็บเป็นกลุ่มได้อย่างไร"
Keith

นี่คือวิธีที่ฉันจะทำมัน และเพื่อให้แน่ใจว่า ~/.vimrcมีการสำรองข้อมูลอยู่เสมอฉันมักจะบันทึกไฟล์ไว้ในโฟลเดอร์ Dropbox ของฉันจากนั้นสร้างลิงค์ sym ไปยังเดสก์ท็อป:ln -s /home/myfolder/Dropbox/.vimrc ~
enchance

41

คำตอบหลายข้อในหน้านี้เป็นการแก้ไขแบบ 'ใช้ครั้งเดียว' สำหรับปัญหาที่อธิบายไว้ หมายความว่าในครั้งต่อไปที่คุณเปิดเอกสารที่มี vim การตั้งค่าแท็บก่อนหน้าจะกลับมา

หากใครสนใจเปลี่ยนการตั้งค่าแท็บอย่างถาวร:


11
ส่วนแทรกนี้จะเว้นวรรคไม่ใช่แท็บ
Supernovah

5
@Supernovah คุณสามารถลบ "expandtab" เพื่อรับแท็บได้
kommradHomer

28

ในฐานะที่เป็นหนึ่งซับเข้าไปในกลุ่ม :

:set tabstop=4 shiftwidth=4 expandtab

สำหรับการตั้งค่าถาวรเพิ่มบรรทัดเหล่านี้ใน~ / .vimrc :

set tabstop=4
set shiftwidth=4
set expandtab

6

UPDATE

ถ้าคุณกำลังทำงานในโครงการโดยเฉพาะอย่างยิ่งผมขอแนะนำให้ใช้editorconfig

มันช่วยให้คุณกำหนด.editorconfigไฟล์ที่รูทของที่เก็บของคุณกำหนดการเยื้องที่คุณต้องการใช้สำหรับไฟล์แต่ละประเภทข้ามที่เก็บของคุณ

ตัวอย่างเช่น:

root = true

[*.css]
charset = utf-8
indent_style = space
indent_size = 4

[*.js]
charset = utf-8
indent_style = space
indent_size = 2

มีvim pluginที่กำหนดค่า vim โดยอัตโนมัติตามไฟล์ config สำหรับไฟล์ที่คุณเปิด

ยิ่งไปกว่านั้น.editorconfigไฟล์ดังกล่าวได้รับการสนับสนุนโดยอัตโนมัติบน IDE และบรรณาธิการอื่น ๆ อีกมากมายดังนั้นจึงเป็นตัวเลือกที่ดีที่สุดสำหรับการทำงานร่วมกันระหว่างผู้ใช้ที่มีสภาพแวดล้อมที่แตกต่างกัน

คำตอบเดิม

หากคุณต้องการเปลี่ยนขนาดบ่อยครั้งและคุณไม่ต้องการผูกไฟล์นี้กับไฟล์เฉพาะคุณสามารถมีคำสั่งที่กำหนดไว้ล่วงหน้าในไฟล์. vimrc ของคุณเพื่อสลับการตั้งค่าได้อย่างรวดเร็ว:

nmap <leader>t :set expandtab tabstop=4 shiftwidth=4 softtabstop=4<CR>
nmap <leader>m :set expandtab tabstop=2 shiftwidth=2 softtabstop=2<CR>

นี่แมปขนาดที่แตกต่างกันสองชุดกับคีย์ \ t และ \ m คุณสามารถเชื่อมโยงสิ่งนี้กับกุญแจที่คุณต้องการ

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