弾性タブストップの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.
}
SchemeのようなLisp方言には、弾力性のあるタブストップが「ugい」コードを表示させる独自の規約があると言います。2つの列の規則に一致するようにタブストップ設定を変更し、異常な場所(関数とその引数の間)にタブストップを挿入した場合:
(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のようなホワイトスペースが機能的および/または視覚的に役立つ言語でコーディングするときの機能は嫌いです。弾性タブストップは、個別のインデントユーティリティを必要とせずに役立つように特別に作成されましたが、明らかにすべてのプログラミング言語を対象としているわけではありません。