problem automatycznego wcięcia python

11

Używam Emacsa 24.4. Podczas pisania kodu w Pythonie Emacs zachowuje się dziwnie w odniesieniu do wcięć.

Na przykład:

for i in range(10):
    print(i)
for i in range(10)

Kiedy wprowadzam :, Emacs dodaje niepotrzebne wcięcie na początku trzeciego wiersza. To dość dziwne, czy to błąd?

Głód
źródło
Czy możesz dodać plik inicjujący .emacs
Vivian Maya
2
@VivianMaya To nie ma nic wspólnego z plikami konfiguracyjnymi, emacs -Qnadal ma ten problem
Hunger
mój przyjaciel czasami Wcięcie może coś przekroczyć, miałem taki problem i chodziło o przekroczenie definicji. Jeśli jesteś pewien, że to nie ma nic wspólnego, to wyraźnie nie wiem, co się dzieje.
Vivian Maya

Odpowiedzi:

16

Jest to spowodowane przez electric-indent-mode, który jest domyślnie włączony w Emacs 24.4. Możesz to wyłączyć za pomocą

(electric-indent-mode -1)

Jeśli nie chcesz całkowicie wyłączać trybu wcięcia elektrycznego, ale chcesz powstrzymać dwukropek przed aktywowaniem trybu wcięcia elektrycznego w trybie Python, możesz usunąć znak dwukropka, z electric-indent-charsktórego tryb Python nadaje wartość lokalną.

(add-hook 'python-mode-hook
          (lambda ()
            (setq electric-indent-chars (delq ?: electric-indent-chars))))
Kyle Meyer
źródło
To, co naprawdę chciałbym zobaczyć, to: kiedy wcięcie, które wstawiłem, jest zgodne z prawnym Pythonem, POZOSTAJ SAM. tryb wcięcia elektrycznego bezmyślnie zgaduje, czego chcę, gdy już to powiedziałem ...
AdamC
A oto wiele lat później wciąż jest zepsuty.
AdamC