2015-01-01 54 views
1

我的emacs設置爲使用2位爲全球縮進:設置每個項目在Emacs縮進變量

(setq-default indent-tabs-mode nil) 
(setq tab-width 2) 
(setq js-indent-level 2) 
(setq css-indent-offset 2) 

但我想有助於它使用一個Web項目(HTML,CSS和JS居多) 4個空格用於縮進。所以我試圖在項目目錄中設置一個.dir-locals.el文件。該文件具有以下設置(與add-dir-local-variable命令添加的):

((nil . ((tab-width . 4) 
     (js-indent-level . 4))) 

;;; Directory Local Variables 
;;; See Info node `(emacs) Directory Variables' for more information. 

((js-mode 
    (tab-width . 4))) 
;;; Directory Local Variables 
;;; See Info node `(emacs) Directory Variables' for more information. 

((js-mode 
    (js-indent-level . 4))) 
;;; Directory Local Variables 
;;; See Info node `(emacs) Directory Variables' for more information. 

((html-mode 
    (tab-width . 4))) 

但這些設置不生效。當我在項目子目錄中打開.js或.html文件時,按Tab鍵會產生一個2格縮進。

我在做什麼錯?

+0

是本地文件到您的計算機,或者是你遠程編輯他們使用像流浪漢? – Chris

+0

他們是我的機器本地。 – azangru

+0

如果您在打開適當的文件後檢查變量(例如'C-h v js-indent-level RET'),你會得到4或2嗎? – Chris

回答

5

對於初學者,您的.dir-locals.el數據不平衡(M-x check-parens)。

我不確定那會怎麼樣,但如果你可以讓Emacs做到這一點,那麼你應該M-x report-emacs-bug。我假設它來自手動編輯。

我不確定是否多個js-mode項目是一個有效的事情。也許這很好,但似乎不尋常。 (可能的Emacs是不平衡的括號混淆,雖然)。

這是你的文件重新編寫使用更常見的(或至少證明)點分對符號:

((nil . ((tab-width . 4) 
     (js-indent-level . 4))) 

(js-mode . ((tab-width . 4) 
      (js-indent-level . 4))) 

(html-mode . ((tab-width . 4)))) 

請注意, (對於此特定數據),您不需要js-modehtml-mode條目,因爲它們正在複製nil模式條目的默認值。

編輯:從實驗上看,add-dir-local-variable似乎一旦文件處於有效狀態時的行爲如預期。

它傾向於在可能的情況下創建更緊湊的列表符號 - 這很好;它們是等效的 - 但瞭解格式差異很有用。
C-H我克(elisp) Dotted Pair NotationRET

+0

謝謝!現在emacs按照我的意願縮進javascript。儘管html的縮進並沒有改變爲4個空格。所以,一些谷歌搜索後,我添加到html模式下面的設置:'(sgml-basic-offset。4)'。它的工作原理,但現在每次我嘗試打開一個html文件emacs說,「局部變量列表包含可能不安全的值」標記爲'sgml-basic-offset:4'作爲這樣的值。你有沒有機會知道任何更好的方式來設置HTML模式的縮進? – azangru