2010-03-03 56 views
12

我使用js2模式在emacs中使用javascript,而且大部分它非常有用。然而,使用jQuery,封锁和JSON工作时,缩进方法是非常令人沮丧的......比如,我希望像这样缩进代码:Emacs + js2-mode:完全禁用缩进?

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?我知道手动缩进是一个倒退,但是具有可读代码的是,恕我直言,比不按预期工作的工具更有用。

+0

这曾经是旧的js2模式的问题。现在问题已经消失,最新的GNU ELPA版本的js2模式可以通过'M-x list-packages'安装。使用该版本时,区域上的C-M- \或TAB应以您期望的常规方式缩进线条,而不是以类似Lisp的方式缩进线条。 – 2013-03-18 13:35:09

回答

5

我想我会让这一个完整的答案,而不是评论; Emacs包含espresso-mode,并且设计为Emacs的Javascript模式(而不是Emacs内部运行的Javascript模式)。它像普通的编程模式一样工作,也可以按照你喜欢的方式缩进事物。

+0

我使用emacs 22,但最近添加了特浓咖啡模式,并且发现它比*默认更好。谢谢! – 2010-08-27 09:00:40

+2

我不认为这是值得扔掉js2模式的所有漂亮的功能,当你可以使用链接@AntonJ提供(http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode )获得两全其美。我一直在使用它,并没有任何遗憾。 – 2011-06-04 00:48:05

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)) 

(但较好的解决办法,当然是要找出原因模式认为它需要这么多的缩进匿名函数,并修复它)

2

js2-mode支持“反弹”缩进;您可以多次按Tab键来选择不同的可能缩进的水平,所以你可能能够得到的效果你想要的方式:

(setq js2-bounce-indent-p t) 
+0

已经尝试过这种方式,但它使用的算法从来没有获得缩进权。虽然谢谢! – 2010-03-04 12:02:24

6

不是您的问题的直接答案,但here is a forkjs2-mode已改善缩进。

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

+0

现在叉子的许多改进都已导入原始js2模式,而ELPA版本也具有所有这些改进。 – 2013-03-18 13:24:18

+0

为了更加准确,“fork”和ELPA版本相同,官方页面也相对滞后。 – Dmitry 2013-03-18 15:01:50

1

另一种选择是js3-mode。它默认这样缩进,但似乎有一些选项可以让你调整它以满足你的喜好。

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