如何在Emacs 24中修复Javascript模式的更改?

6
我最近将emacs从23升级到了24。在使用默认的js-mode处理JavaScript时,我注意到了一个微小但令人烦恼的问题:与emacs23相比,emacs24中js-mode有所不同。为了确保这不是我的设置之一,我使用--no-init-file选项启动了emacs23和emacs24,并发现了同样的问题:
在emacs23中的js-mode中,当您键入一个闭合大括号}时,它会暂时跳回到匹配的开放大括号位置,然后将闭合大括号缩进到适当的缩进级别。
当我在emacs24中执行此操作时,临时光标跳转到匹配的开放大括号位置,但它不会缩进闭合大括号,因此我需要按Tab键完成此操作。
是否还有其他人看到了这种差异?如果是,有什么解决方法?在我的init.el中是否有任何漂亮的“indent-on-closing-curly”类型的变量可以设置?
我正在Xubuntu Linux上使用emacs(并从源代码安装)。我还没有比较其他平台上的23和24版本。
注:有人可能想建议使用Yegge的js2-mode,但我通常不喜欢使用它,而是希望js-mode能正常工作。
2个回答

11

既然我已经找到了令人满意的答案,也没有听到其他人的声音,为了帮助其他人,我将发布我的答案并接受它。

我没能找到js-mode在emacs 23和emacs 24中行为不同的确切原因,但是在你的 .emacs 或 init.el 中设置 electric-indent-mode 可以给出我想要的行为。使用这个设置,它实际上会在你键入结束大括号之前缩进,但对我来说这很有效。这是emacs 24中的新设置。你的.emacs输入应该是:

(electric-indent-mode t)

我遇到的一个问题是,org-mode 不喜欢 electric-indent-mode。所以你可以为 javascript/java/c 等模式特别设置 electric-indent-mode,或者为 org-mode 特别取消设置它。我选择了后者,使用以下代码:

(defun my-org-mode-hooks ()
  (electric-indent-mode -1))

(add-hook 'org-mode-hook 'my-org-mode-hooks)

0
谢谢你,midpeter444。(electric-indent-mode t)非常好用。 我曾经搜索过,并有人建议将js-auto-indent-flag设置为非nil值,但在我的Emacs 24.3上无效,即使有一个可以通过“customize-group js”自定义的js-auto-indent-flag变量,它也没有任何作用。我发现java.el并没有使用它,尽管它在源代码中被声明了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接