13

我正在使用 js2-mode 在 emacs 中使用 javascript,并且在大多数情况下它非常有用。但是,在使用 jQuery、闭包和 JSON 时,缩进方法非常令人沮丧……例如,我希望像这样缩进的代码:

var foo = jQuery('#mycontainer ul li').each(function(el){
    var bar = el.html();
});

结果是:

var foo = jQuery('#mycontainer ul li').each(function(el){
                                          var bar = el.html();
                                       });

有没有一种方法可以关闭所有缩进的“助手”,并在我按下制表键时让 emacs 插入N个空格?我知道手动缩进是一个倒退,但是拥有可读的代码,恕我直言,比一个不能按预期工作的工具更有用。

4

7 回答 7

7

不是您问题的直接答案,但这里有一个js2-mode改进了缩进的分支。

其中一项改进是您的示例代码按照您在此处询问的方式缩进。

于 2011-02-13T17:39:52.810 回答
6

我想我会把它作为一个完整的答案而不是评论;espresso-mode包含在 Emacs 中,并被设计为 Emacs 的 Javascript 模式(而不是恰好在 Emacs 内部运行的 Javascript 模式)。它的工作方式与常规编程模式类似,并且还可以按您喜欢的方式缩进。

于 2010-03-04T23:12:57.143 回答
5

查看此解决方案,将 js2-mode 中的缩进功能映射为部分使用 esresso-mode 的缩进(现在称为 emacs 23.2 和更高版本中包含的 js-mode):

http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode

完全按照我对 emacs 中缩进的预期工作,并且您仍然可以从 js2-mode 中获得解析效果。

于 2010-10-02T08:40:02.827 回答
4

你试过新版本的 js2-mode 吗?看起来有一个修复:http ://code.google.com/p/js2-mode/issues/detail?id=94

于 2010-03-05T10:08:26.800 回答
3

js2-mode 支持“反弹”缩进;您可以多次按 Tab 以选择不同的可能缩进级别,因此您可以通过这种方式获得所需的效果:

(setq js2-bounce-indent-p t)
于 2010-03-03T16:53:34.120 回答
1

您可以简单地绑定 TAB 以插入自身:

(add-hook 'js2-mode-hook 'my-js2-mode-hook)
(defun my-js2-mode-hook ()
  (define-key js2-mode-map [tab] 'self-insert-command))

(但更好的解决方案当然是找出为什么该模式认为它需要对匿名函数进行如此多的缩进,然后修复它。)

于 2010-03-03T11:55:04.713 回答
1

另一种选择是js3-mode。默认情况下它会像这样缩进,但似乎有一些选项可以让您根据自己的喜好对其进行调整。

var foo = jQuery('#mycontainer ul li').each(function(el){
            var bar = el.html();
          });
于 2012-06-21T08:30:22.463 回答