O código de indentação para shell scripts foi completamente reescrito na época do Emacs-24 para usar o SMIE, e o próprio SMIE evoluiu durante a vida do Emacs-24, então a melhor solução pode depender da versão exata do Emacs, mas com o Emacs-24.5 você deve ser capaz de fazer:
- Ir para a linha com recuo incorreto.
-
digite
M-x smie-config-show-indent
, que deve mostrar as regras que foram usados para recuar essa linha. Pode dizer algo como:Rules used: :before "&&" -> (column . 19), :before "[" -> nil, :elem basic -> 4, :after "&&" -> nil
Infelizmente, o (column . 19)
em sua maioria implica que você não poderá alterar esse comportamento de maneira "simples" (ou seja, não é possível alterá-lo com smie-config-set-indent
).
Mas acho que o seguinte deve ser feito:
(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)
Você pode gostar de M-x report-emacs-bug
e solicitar que essa configuração seja mais fácil, já que é provavelmente um estilo bastante comum de recuo.