Emacs: pomija wcięcia po && w trybie skryptowym powłoki

3

W trybie skryptowym powłoki, gdy linia kończy się &&, Emacs wcina następną linię. Czy istnieje sposób, aby to wyłączyć? (Łączę większość moich instrukcji z &&. To daje lepszą kontrolę nad obsługą błędów niż set -e.)

Lasse Kliemann
źródło

Odpowiedzi:

1

Kod wcięcia dla skryptów powłoki został całkowicie przepisany mniej więcej w czasie Emacsa-24, aby używać SMIE, a sam SMIE ewoluował w trakcie życia Emacsa-24, więc najlepsze rozwiązanie może zależeć od twojej dokładnej wersji Emacsa, ale z Emacsem- 24.5 powinieneś być w stanie:

  • Przejdź do wiersza z niepoprawnym wcięciem.
  • wpisz, M-x smie-config-show-indentktóry powinien pokazać reguły, które zostały użyte do wcięcia tego wiersza. Może powiedzieć coś takiego:

    Zastosowane reguły:: przed „&&” -> (kolumna 19),: przed „[” -> zero,: elem podstawowy -> 4,: po „&&” -> zero

Niestety, (column . 19)tam jest głównie, że nie będziesz w stanie zmienić tego zachowania w „prosty” sposób (tzn. Nie możesz go zmienić smie-config-set-indent).

Ale myślę, że powinny to zrobić:

(defun my-sh-smie-sh-rules (origfun kind token)
  (pcase (cons kind token)
    (`(:before . "&&") nil)
    (_ (funcall origfun kind token))))
(advice-add 'sh-smie-sh-rules :around #'my-sh-smie-sh-rules)

Możesz chcieć M-x report-emacs-bugi poprosić o ułatwienie takiej konfiguracji, ponieważ prawdopodobnie jest to dość powszechny styl wcięcia.

Stefan
źródło