Я только что испробовал реализацию эластичных табов-стопов в 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, имеют свои собственные соглашения, которые также заставляют упругие табуляции отображать «некрасивый» код. Если я изменю настройки табуляции в соответствии с соглашением из 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, где пробелы являются функциональными и / или визуально полезными. Эластичные табуляции были созданы специально для того, чтобы быть полезными, не требуя отдельной утилиты отступов, но очевидно, что она предназначена не для всех языков программирования.