2010-03-03 57 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(); 
      });