3

В режиме shell-script-mode, когда строка заканчивается на && , Emacs будет делать отступ для следующей строки. Есть ли способ выключить это? (Я объединяю большинство своих утверждений с && . Это дает более точный контроль над обработкой ошибок, чем set -e .)

1 ответ1

1

Код отступа для сценариев оболочки был полностью переписан во времена Emacs-24 для использования SMIE, а сам SMIE развивался в течение жизни Emacs-24, поэтому лучшее решение может зависеть от вашей точной версии Emacs, но с Emacs- 24.5 Вы должны быть в состоянии сделать:

  • Перейти на строку с неправильным отступом.
  • введите M-x smie-config-show-indent который должен показать вам правила, которые использовались для отступа этой строки. Это может сказать что-то вроде:

    Используемые правила::before "&&" -> (колонка 19),:before "[" -> nil,:elem basic -> 4,:after "&&" -> nil

К сожалению, (column . 19) там в основном подразумевает, что вы не сможете изменить это поведение "простым" способом (то есть вы не можете изменить его с помощью smie-config-set-indent).

Но я думаю, что следующее должно сделать это:

(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)

Возможно, вы M-x report-emacs-bug и попросить упростить такую конфигурацию, поскольку это, вероятно, довольно распространенный стиль отступов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .