Emacs: подавить отступ после && в shell-script-mode
В режиме 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
и попросить облегчить такую конфигурацию, поскольку это, вероятно, довольно распространенный стиль отступов.