Emacs:在 shell-script-mode 中取消 && 后的缩进

Emacs:在 shell-script-mode 中取消 && 后的缩进

在 shell-script-mode 中,当一行以 结尾时&&,Emacs 将缩进下一行。有没有办法关闭它?(我用 连接了大部分语句&&。这比 更能控制错误处理set -e。)

答案1

在 Emacs-24 左右,shell 脚本的缩进代码已被完全重写以使用 SMIE,并且 SMIE 本身也在 Emacs-24 的生命周期中不断发展,因此最佳解决方案可能取决于您的确切 Emacs 版本,但使用 Emacs-24.5 您应该能够执行以下操作:

  • 转到缩进不正确的行。
  • typeM-x smie-config-show-indent应该会显示用于缩进此行的规则。它可能会显示类似以下内容:

    使用规则::before "&&" -> (column . 19), :before "[" -> nil, :elem basic -> 4, :after "&&" -> nil

遗憾的是,其中的(column . 19)“in”主要暗示您将无法以“简单”的方式改变这种行为(即您无法用来改变它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并要求使这样的配置更容易,因为它可能是相当常见的缩进样式。

相关内容