2013-02-23 78 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