如何缩小.emacs配置文件?

时间:2011-01-28 13:41:06

标签: emacs emacs23

我想知道是否有人可以帮我缩小我的.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上运行GNU Emacs 23.2.1。

3 个答案:

答案 0 :(得分:5)

我同意泰勒;虽然它有点复杂,但如果你试图理解和自定义默认的缩进功能,那么从长远来看你会更好。 Emacs Wiki有good resources,Stack Overflow上还有其他relevant Q&As

将Tab键绑定到insert-tab意味着你完全失去了indent-region之类的好处,以及主要模式可能提供的任何其他智能行为。

无论如何,要解决您的具体问题:

1)如果你要定义(java-insert-tab)(css-insert-tab)以及(javascript-insert-tab)等,他们都做同样的事情......好吧,希望你能看到你没有实际上需要不止一个这样的功能。只需给它一个更通用的名称,然后重复使用它。

2)(local-set-key ...)(define-key (current-local-map) ...)的功能相同,这意味着无论主要模式如何,您都可以使用一个通用函数来覆盖Tab键绑定。

(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)如果您查看 Ch v tab-width RET ,同样indent-tabs-mode,您会发现他们都说“自动”在以任何方式设置时变为缓冲局部。“

作为已提到的自定义界面的替代方法,您可以使用(set-default 'indent-tabs-mode t)为这些变量建立默认值。在没有设置缓冲区本地值的代码的情况下,所有缓冲区都将使用默认值,这可以帮助您避免编写不必要的模式挂钩。

答案 1 :(得分:2)

我不确定你要做什么。如果要将tab-width全局设置为4个空格,则可以使用customize命令执行此操作:

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

您在自定义中对制表符宽度所做的任何更改都将全局应用。因此,您不需要为每个模式单独设置钩子。

如果您要将不同的设置应用于不同的模式,则必须为.emacs中的每种模式设置特定的代码。

更一般地说,看起来您正在尝试构建自己的自定义选项卡插入命令 - 内置缩进是否不能满足您的需求?我认为在Emacs中自定义缩进设置比在自己想要的地方手动插入标签更容易。

如果您还没有,请查看有关缩进的手册部分,看看您是否能够在没有太多额外钩子的情况下完成所需的操作:

C-h r m缩进

(即: h -elp, r -ead the manual, m -enu item 缩进

或:

(info "(emacs)Indentation")

答案 2 :(得分:1)

espect.el正在做你想要的。

来自文档:

<小时/> 此模式可以轻松配置个人设置 具有简洁和可扩展的迷你语言的缓冲区。它摘要 远离常见的配置选择任务,比如检查模式 或文件名,成为一个简单的声明性语法。宣布条件; 当新缓冲区匹配它们时运行一个函数。这样做 很容易做一些事情,比如打开你最喜欢的flyspell-prog模式 编程语言,或使所有文本模式缓冲区以.mkn结尾 有特殊属性。