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