我是新手。现在我想
自动启动 yasnippet 自动完成 gtags flymake 模式
当我打开 (php/java/el/...) 文件时。
我应该在我的 emacs 配置文件中放什么?
正如 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 的检查器。
你可以像下面这样添加:
(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)))