Emacs + js2-mode:完全禁用缩进?

时间:2010-03-03 09:31:20

标签: javascript emacs js2-mode

我正在使用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();
                                       });

有没有办法可以关闭所有缩进的“帮助器”,只有当我按Tab键时,emacs会插入 N 空格?我知道手动缩进是一个倒退,但有可读代码,恕我直言,比一个不能按预期工作的工具更有用。

7 个答案:

答案 0 :(得分:6)

不能直接回答您的问题,但是js2-mode {{1}}已经改进了缩进。

其中一项改进是你的示例代码按照你在这里要求的方式缩进。

答案 1 :(得分:5)

我想我会将此作为完整答案而不是评论; espresso-mode包含在Emacs中,旨在成为Emacs的Javascript模式(而不是恰好在Emacs中运行的Javascript模式)。它像常规编程模式一样工作,也可以按照你喜欢的方式缩进。

答案 2 :(得分:4)

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

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

正如我期望emacs中的缩进工作一样,你仍然可以从js2-mode获得解析的精彩。

答案 3 :(得分:3)

您是否尝试过新版本的js2-mode?看起来有一个问题:http://code.google.com/p/js2-mode/issues/detail?id=94

答案 4 :(得分:2)

js2-mode支持“弹跳”缩进;您可以多次按Tab键选择不同的可能缩进级别,这样您就可以获得想要的效果:

(setq js2-bounce-indent-p t)

答案 5 :(得分: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))

(但更好的解决方案当然是找出为什么模式认为匿名函数需要这么多缩进并修复它。)

答案 6 :(得分:1)

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

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