`softtabstop` ใช้ทำอะไร?


21

ฉันรับทราบถึงการตั้งค่าที่เกี่ยวข้องกับแท็บเหล่านี้ใน Vim:

  • ts
  • sw
  • expandtab
  • smarttab
  • sts

set ts=4 sw=4 expandtab smarttabตั้งค่าปกติของฉันคือ

แต่ตามstsเอกสารถ้าexpandtabไม่ได้ตั้งค่ามันจะพยายามใช้การรวมกันของช่องว่างและแท็บเพื่อชดเชยจำนวนช่องว่างที่ต้องการสำหรับขนาดแท็บ

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

คำตอบ:


20

ตามที่softtabstopระบุไว้ในเอกสารจะมีประโยชน์ถ้าคุณต้องการให้ขนาดแท็บเริ่มต้นหยุดอยู่ที่ 8 แต่แก้ไขไฟล์ราวกับว่าขนาดแท็บหยุดเป็นค่าอื่น ตัวอย่างเช่นถ้าคุณต้องการระดับเยื้อง 4 ขณะที่การแก้ไขรหัส แต่ความคิดเห็นบางส่วนมีข้อความแท็บเยื้องเช่นตารางที่ขึ้นอยู่กับแท็บหยุดของ 8, คุณสามารถตั้งค่าการsts4

สิ่งหนึ่งที่ฉันสังเกตเห็นได้ระหว่างการตั้งค่าแท็บของคุณ ( set ts=4 sw=4 expandtab smarttab) และการใช้sts(เช่นset ts=8 sts=4) คือเมื่อ backspacing ทับช่องว่างที่อยู่ตรงกลางบรรทัดข้อความ ตัวอย่างเช่นพิจารณาบรรทัดข้อความต่อไปนี้โดย·ระบุช่องว่าง:

some·text·······more·text

ในโหมดแทรกย้ายเคอร์เซอร์ก่อนของm more textด้วยการตั้งค่าของคุณการกด Backspace จะลบพื้นที่เดียว แต่ในขณะที่ใช้sts=4Backspace จะลบแท็บก่อนหน้าไปจนสุดซึ่งจะทำงานถ้าช่องว่างเป็นอักขระแท็บแทน

คุณสามารถตั้งค่าsts=4นอกเหนือจากการตั้งค่าของคุณและรับพฤติกรรม Backspace กลางบรรทัดในขณะที่ไม่ได้ผสมแท็บและช่องว่าง แท็บจะถูกขยายเป็นสี่ช่องว่าง แต่คุณสามารถถอยกลับในช่วงของช่องว่างที่อยู่ตรงกลางบรรทัด


3

ดูตัวอย่างด้านล่าง

// Start vim without loading your vimrc. set only tabstop=8 softtabstop=4.
// This makes <Tab> in insert mode equals to 4 <Space> length at max.

// In insert mode, type 12, one <Tab>, 5. We get insertion below,
12··5
// Quit insert mode. Move cursor back, we find 2 <Space> inserted.

// In insert mode, type 12, two <Tab>, 9. We get insertion below,
12······9
// Quit insert mode. Move cursor back, you find a <Tab> inserted.

// In insert mode, type 12, three <Tab>, 3. We get insertion below,
12··········3
// Move the cursor back, you find a <Tab> and 4 <Space> inserted.

// We can even set sotftabstop=12, but this time we only need type one <Tab>, then 3.
12··········3
// Move the cursor back, you find a <Tab> and 4 <Sapce> inserted.

ดังนั้นtabstopเป็นเรื่องเกี่ยวกับวิธีการที่กว้างTabถูกกำหนดไว้ในขณะที่softtabstopเป็นเรื่องเกี่ยวกับวิธีการห่างไกลเคอร์เซอร์จะย้ายในขณะที่พิมพ์ Tabเมื่อพวกเขาไม่ได้ตั้งค่าเป็นค่าเดียวกันนั่นหมายความว่าถ้าคุณกดปุ่มการTabกดแป้นก็ไม่ได้หมายความถึงTabตัวละครเล็กน้อย ไม่ว่าในกรณีใดมันจะเป็นกลุ่มที่ตัดสินเมื่อคุณออกจากโหมดแทรก Vim จะพยายามจับคู่การแทรกครั้งแรกให้มากtabstopที่สุดเท่าที่จะทำได้ ถ้าที่ผ่านมาก็ไม่สามารถทำให้เต็มtabstop, Spaceเสียงเรียกเข้าเพียงแค่ชดเชยโดย

หากต้องการพูดเพิ่มอีกนิดถ้าคุณตั้งไว้expandtabมันก็เท่ากับพูดกับเสียงเรียกเข้า:

โปรดอย่ากังวลในการคำนวณจำนวนTabและSapceจำเป็น Spaceเพียงแค่ใส่


คำตอบของคุณดูเหมือนจะพูดจาโผงผางและดูเหมือนจะไม่ตอบคำถาม
สมุนไพร Wolfe

วูล์ฟ @Herb ฉันหวังว่าคำตอบที่สามารถช่วย PO :set st=7 sts=13ร่างของฉันออกจากสิ่งที่เกิดขึ้นเมื่อการตั้งค่าที่ผิดปกติจะทำเช่น ในฐานะที่เป็นเสียงเรียกเข้าไม่ได้ออกแบบมาเพื่อการเข้ารหัสเท่านั้น
เฉินจิน

1

คำตอบง่ายๆ:

ตัวอย่างเช่นมันมีประโยชน์อย่างมากสำหรับการเขียนโปรแกรมโดยเฉพาะอย่างยิ่งใน Python ซึ่งการกำหนดตารางเป็นสิ่งสำคัญ เมื่อคุณกด backspace ด้วย sts = 4 มันจะทำการ untab บรรทัดไม่ใช่ลบอักขระเว้นวรรคเดียว

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