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 и попросить облегчить такую ​​конфигурацию, поскольку это, вероятно, довольно распространенный стиль отступов.

Другие вопросы по тегам