ฉันเพิ่งลองใช้การแท็บแบบยืดหยุ่นของ jEdit ซึ่งทำงานได้ดีกับภาษาการเขียนโปรแกรมที่ฉันคุ้นเคย (ภาษา HTML / XML และ C-like เป็นหลัก) ด้วยรหัส Python นี่คือวิธีการแสดงผล (ช่องว่างที่ใช้แทนแท็บเพื่อแสดงให้เห็นว่าสิ่งต่าง ๆ เรียงกัน):
def foo(x):
'''<1 tab before the docstring.
No tab <tab
No tab <tab
<tab <another tab
<tab <another tab
<tab'''
if 1 or 2: #<Tab before this comment
yield True
สำหรับภาษาอย่าง Python ที่ต้องพึ่งพาการเว้นวรรคนี่เป็นดีลเลอร์เบรกเกอร์จนกว่าคุณจะปิดการใช้งานฟังก์ชั่นที่มีให้โดยแท็บยืดหยุ่น บรรณาธิการอย่าง Vim และ Emacs จะทำการปิดการใช้งานฟังก์ชั่นส่วนใหญ่อย่างง่าย ๆ หากคุณรู้ชื่อของตัวเลือกและวิธีการปิดการใช้งาน แต่ฟังก์ชั่นนี้จะต้องถูกปิดใช้งานสำหรับรหัสเช่นด้านบน
ที่ถูกกล่าวว่ามันยอดเยี่ยมสำหรับ x86 ASM, C, C ++, Go, XML, HTML และอื่น ๆ ที่ไม่พึ่งพาช่องว่างมาก:
import (
"fmt" // We love formatting functions.
"io" // Because I/O is useful.
"os" // Can't open a file without os.Open!
)
type Foo struct {
Field1 int // This is properly aligned
ReallyLongField2 string // with this.
privateField io.Reader // Elastic tabstops are great for Go.
}
ฉันจะบอกว่าภาษา Lisp เช่น Scheme มีแบบแผนของตัวเองที่จะทำให้แท็บที่ยืดหยุ่นแสดงโค้ด "น่าเกลียด" ถ้าฉันเปลี่ยนการตั้งค่า tabstop ของฉันให้ตรงกับแบบแผนของ 2 คอลัมน์และแทรก tabstops ในตำแหน่งที่ผิดปกติ (ระหว่างฟังก์ชันและอาร์กิวเมนต์):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
เทียบกับที่อ่านได้มากขึ้น:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
ได้รับสิ่งนี้ไม่ได้เลวร้ายอย่างกับตัวอย่างของ Python แต่มันลดความสามารถในการอ่านรหัสได้อย่างแน่นอน ในขณะที่ฉันชอบฟังก์ชั่นเป็นอย่างมากเมื่อเขียนโค้ดในบางสิ่งเช่น C # หรือ C ++ แต่ฉันเกลียดการทำงานเมื่อเขียนโค้ดในภาษาเช่น Python หรือ Scheme ที่ช่องว่างทำงานได้และ / หรือมีประโยชน์ทางสายตา แท็บยืดหยุ่นถูกสร้างขึ้นโดยเฉพาะเพื่อเป็นประโยชน์โดยไม่ต้องใช้ยูทิลิตีการเยื้องแยกต่างหาก แต่ชัดเจนว่ามันไม่ได้มีไว้สำหรับภาษาการเขียนโปรแกรมทั้งหมด