Właśnie wypróbowałem implementację elastycznych tabstopsów w jEdit, która działa niesamowicie dobrze z językami programowania, w których jestem zaznajomiony (głównie HTML / XML i języki podobne do C). Jednak w przypadku kodu Python oto sposób, w jaki jest renderowany (spacje używane zamiast tabulatorów do zilustrowania, jak rzeczy się wyrównują):
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
W przypadku języka takiego jak Python, który opiera się na odstępach, jest to przełom, chyba że wyłączysz funkcjonalność zapewnianą przez elastyczne tabstopsy. Edytory takie jak Vim i Emacs sprawiają, że wyłączanie większości funkcji jest proste, jeśli znasz nazwę opcji i sposób jej wyłączenia, ale w przypadku kodu podobnego do powyższego funkcja ta byłaby wymagana.
To powiedziawszy, jest świetny dla x86 ASM, C, C ++, Go, XML, HTML i innych, które nie polegają na białych znakach:
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.
}
Powiem, że dialekty Lisp, takie jak Scheme, mają własne konwencje, które sprawiłyby, że elastyczne tabstopsy renderowałyby „brzydki” kod. Jeśli zmienię ustawienia tabstop, aby pasowały do konwencji 2 kolumn i wstawię tabstops w nietypowych miejscach (między funkcją a jej argumentami):
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
vs. bardziej czytelny:
(let loop ((n 1))
(if (> n 10)
'()
(cons n
(loop (+ n 1)))))
To prawda, że ten nie jest tak zły, jak przykład w Pythonie, ale zdecydowanie zmniejsza czytelność kodu. Chociaż bardzo podoba mi się funkcjonalność podczas kodowania w języku C # lub C ++, nie znoszę tej funkcji podczas pisania w języku takim jak Python lub Scheme, w którym białe znaki są funkcjonalne i / lub pomocne wizualnie. Elastyczne tabstopsy zostały stworzone specjalnie po to, aby były pomocne bez potrzeby oddzielnego narzędzia wcięcia, ale najwyraźniej nie jest to przeznaczone dla wszystkich języków programowania.