2011-01-28 82 views
5

我想知道是否有人可以提供一些幫助我縮小我的.emacs文件。如何縮小.emacs配置文件?

目前,我已經設置了每種語言都有自定義選項卡的地方,例如,如果我有Java鉤子,它看起來就像這樣。

 
;; Java Hook 
(defun e-java-mode-hook() 
    (setq tab-width 4) 
    (setq indent-tabs-mode t) 
    (define-key java-mode-map (kbd "") 'java-insert-tab)) 
(defun java-insert-tab (&optional arg) 
    (interactive "P") 
    (insert-tab arg)) 
(add-hook 'java-mode-hook 'e-java-mode-hook) 

如果我是添加其他語言如CSS或JavaScript,我想補充另一個鉤子對CSS和其他掛鉤的JavaScript。所以我想知道是否有全球性的方式來設置它,所以它適用於任何和所有的語言?

我目前在Windows 7

回答

1

espect.el運行GNU Emacs的23.2.1正是做你想要什麼。

從文檔:


這種模式可以很容易地配置與concice和可擴展的小型語言個人 緩衝區設置。它將 抽象出常見的配置選擇任務,例如檢查模式 或文件名,轉換爲簡單的聲明性語法。聲明條件; 當新緩衝區匹配它們時運行一個函數。這使得 很容易做到這些事情,比如爲您最喜歡的 編程語言啓用flyspell-prog-mode,或者使以.mkn結尾的所有文本模式緩衝區都具有特殊屬性。

+0

感謝您的回覆,我會嘗試一下,看看它是如何工作的,儘管對我來說可能會有點複雜。 – YTKColumba 2011-01-28 14:22:37

2

我不確定你想要做什麼。如果你想在標籤寬度全局設置爲4個空格,那麼你可以做,使用自定義命令:

M-x customize-variable tab-width <ret> 

您對標籤寬度在自定義任何的變化將在全球應用。所以你不需要單獨爲每個模式設置鉤子。

如果您有不同的設置要應用於不同的模式,您必須在您的.emacs中爲每個模式必須具有特定的代碼。

更一般地說,它看起來像你正在試圖建立自己的自定義標籤插入命令 - 內置縮進沒有做你需要的嗎?我認爲在Emacs中定製縮進設置比在手動插入標籤的位置更容易。

如果您還沒有準備好,看看壓痕手冊部分,看看你也許可以做你的需要沒有很多額外的掛鉤:

章RM壓痕

(即:ħ -elp,ř -ead手動, -enu項壓痕

或:

(info "(emacs)Indentation") 
+0

那麼,我想要做的大部分是在全球範圍內縮進4個空格標籤。如果你以前曾經使用過Visual Studio/DreamWeaver,那麼我希望像這樣設置它。 – YTKColumba 2011-01-28 14:19:54

+0

正如我上面所說的,在自定義設置你的標籤寬度,並將你的.emacs減少到一行:(setq indent-tabs-mode t)。 – Tyler 2011-01-28 14:45:16

5

我同意泰勒;雖然它有點複雜,但如果您嘗試瞭解和自定義默認縮進功能,從長遠角度來看,您會更好。 Emacs Wiki有good resources,還有其他的relevant Q&As在Stack Overflow上。

將tab鍵綁定到insert-tab意味着您完全失去了諸如indent-region之類的好處以及主模式可能提供的任何其他智能行爲。

爲了解決您的具體問題不論,但是:

1)如果要定義(java-insert-tab)(css-insert-tab)(javascript-insert-tab)等,他們都做同樣的事情......好吧,希望你能看到,你不實際上不止需要這些功能之一。只要給它一個更通用的名稱,並重新使用它。

2)(local-set-key ...)的功能與(define-key (current-local-map) ...)的功能相同,這意味着無論主模式如何,您都可以使用單個通用函數覆蓋製表符鍵綁定。

(defun my-coding-config() 
    (setq tab-width 4) 
    (setq indent-tabs-mode t) 
    (local-set-key (kbd "<tab>") 'my-insert-tab)) 

(defun my-insert-tab (&optional arg) 
    (interactive "P") 
    (insert-tab arg)) 

然後,您只需將my-coding-config添加到每個適用的模式掛鉤變量。如果有很多人,你可以把它包裝起來的列表如下:

;; Use my coding hook for all programming modes 
(mapcar 
(lambda (language-mode-hook) 
    (add-hook language-mode-hook 'my-coding-config)) 
'(java-mode-hook 
    javascript-mode-hook 
    css-mode-hook 
    ...)) 

3)如果你看一下章vtab-widthRET且同樣indent-tabs-mode,你會發現,他們都會說「以任何方式設置時自動變爲緩衝區本地」。

作爲已經提到的自定義界面的替代方案,您可以使用(set-default 'indent-tabs-mode t)來確定這些變量的默認值。在沒有設置緩衝區本地值的代碼的情況下,所有緩衝區都將使用默認值,這可能有助於避免編寫不必要的模式掛鉤。