我刚刚尝试了jEdit的弹性制表符实现,它与我所熟悉的编程语言(主要是HTML / XML和类似C的语言)惊人地兼容。但是,使用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列的约定,并在不寻常的位置(在函数及其参数之间)插入Tabstop:
(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这样的语言(其中空格在功能上和/或视觉上有帮助)进行编码的功能。弹性制表符专门创建是为了帮助您而无需单独的缩进实用程序,但是显然,它并不适用于所有编程语言。