在 shell-script-mode 中,当一行以 结尾时&&
,Emacs 将缩进下一行。有没有办法关闭它?(我用 连接了大部分语句&&
。这比 更能控制错误处理set -e
。)
答案1
在 Emacs-24 左右,shell 脚本的缩进代码已被完全重写以使用 SMIE,并且 SMIE 本身也在 Emacs-24 的生命周期中不断发展,因此最佳解决方案可能取决于您的确切 Emacs 版本,但使用 Emacs-24.5 您应该能够执行以下操作:
- 转到缩进不正确的行。
type
M-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
并要求使这样的配置更容易,因为它可能是相当常见的缩进样式。