2013-02-23 124 views
0

我是新手。 現在我想emacs自動加載模式

自動啓動yasnippet自動完成gtags flymake模式

當我打開(PHP/JAVA/EL/...)文件。

我應該在我的emacs配置文件中放什麼?

回答

2

劉說,你用add-hook指定動作被當特定模式下運行開始。文檔here。掛鉤類似於C#中的事件或OOP中的觀察者模式

每種模式都應該定義一個在該模式啓動時運行的鉤子,例如。對於模式名爲的java模式有一個對應的鉤子叫做java-mode-hookadd-hook讓您連線的行動,這個鉤子:

(add-hook 'java-mode-hook 'my-action) 

您可以使用匿名lambda功能來定義,動作到位,像這樣:

(add-hook 'java-mode-hook (lambda() (message "hello from java-mode"))) 

每次啓動這將打印信息java模式。

爲此目的定義一個命名函數通常會更好。如果您使用命名函數,add-hook將確保相同的函數不會被多次調用。

(defun hello() 
    (message "hello from java-mode")) 

    (add-hook 'java-mode-hook 'hello) 

語言編輯模式從編程模式派生。如果您想在啓動任何編程語言模式時運行動作,請將函數添加到prog-mode-hook


您需要手動配置自動完成模式要在使用它的每個模式對於每種模式,該模式添加到ac-modes列表:

(add-to-list 'ac-modes 'java-mode) 

作爲一個側面說明,你會想要使用flyspell-prog-mode編程語言模式,所以您只能收到評論和字符串文字的拼寫建議。

(defun on-prog-mode() 
    (flyspell-prog-mode t)) 

(add-hook 'prog-mode-hook 'on-prog-mode) 

而且你可能會想使用flycheck來代替舊的flymake。 Flycheck正處於積極的發展階段,並且有php的跳棋。

+0

+1謝謝您關於flycheck的建議 – jilen 2013-02-24 12:52:35

+0

prog-mode-hook是我正在尋找的 – jilen 2013-02-26 01:49:30

0

您可以添加,就像下面:

(global-auto-complete-mode t) 
(yas-global-mode 1) 

然後在下面相應的更新:

(add-hook 'php-mode-hook (lambda() (flyspell-mode 1))) 
(add-hook 'php-mode-hook (lambda()(gtags-mode 1))) 
+0

如果我想自動啓動gtags for java,我是否也應該放入(add-hook'java-mode-hook xxxx)?是否有無論如何啓用那些文件(Java/PHP/...)我正在開放? – jilen 2013-02-24 02:20:51

+0

是的,只是根據模式掛鉤進行設置。 – ryu 2013-02-24 05:25:57