Emacs: suprime o recuo após && no modo shell-script

3

No modo shell-script, quando uma linha termina em && , o Emacs recua a seguinte linha. Existe uma maneira de desligar isso? (Estou concatenando a maioria das minhas declarações com && . Isso fornece um controle mais preciso sobre o tratamento de erros do que set -e .)

    
por Lasse Kliemann 08.02.2016 / 11:53

1 resposta

1

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.

    
por 11.02.2016 / 15:58