0

我是新手。现在我想

自动启动 yasnippet 自动完成 gtags flymake 模式

当我打开 (php/java/el/...) 文件时。

我应该在我的 emacs 配置文件中放什么?

4

2 回答 2

2

正如 liu 所说,您用于add-hook指定在启动特定模式时运行的操作。文档在这里。钩子类似于C# 中的事件,或 OOP 中的观察者模式

每个模式都应该定义一个在该模式启动时运行的钩子,例如。对于名为java-mode 的模式,有一个名为java-mode-hook的相应钩子。add-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。如果您想在启动任何编程语言模式时运行某个操作,请将您的函数添加到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 的检查器。

于 2013-02-24T03:49:01.267 回答
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)))
于 2013-02-23T18:08:30.967 回答