2011-01-28 79 views
5

我想知道是否有人可以提供一些帮助我缩小我的.emacs文件。如何缩小.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

回答

1

espect.el运行GNU Emacs的23.2.1正是做你想要什么。

从文档:


这种模式可以很容易地配置与concice和可扩展的小型语言个人 缓冲区设置。它将 抽象出常见的配置选择任务,例如检查模式 或文件名,转换为简单的声明性语法。声明条件; 当新缓冲区匹配它们时运行一个函数。这使得 很容易做到这些事情,比如为您最喜欢的 编程语言启用flyspell-prog-mode,或者使以.mkn结尾的所有文本模式缓冲区都具有特殊属性。

+0

感谢您的回复,我会尝试一下,看看它是如何工作的,尽管对我来说可能会有点复杂。 – YTKColumba 2011-01-28 14:22:37

2

我不确定你想要做什么。如果你想在标签宽度全局设置为4个空格,那么你可以做,使用自定义命令:

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

您对标签宽度在自定义任何的变化将在全球应用。所以你不需要单独为每个模式设置钩子。

如果您有不同的设置要应用于不同的模式,您必须在您的.emacs中为每个模式必须具有特定的代码。

更一般地说,它看起来像你正在试图建立自己的自定义标签插入命令 - 内置缩进没有做你需要的吗?我认为在Emacs中定制缩进设置比在手动插入标签的位置更容易。

如果您还没有准备好,看看压痕手册部分,看看你也许可以做你的需要没有很多额外的挂钩:

章RM压痕

(即:ħ -elp,ř -ead手动, -enu项压痕

或:

(info "(emacs)Indentation") 
+0

那么,我想要做的大部分是在全球范围内缩进4个空格标签。如果你以前曾经使用过Visual Studio/DreamWeaver,那么我希望像这样设置它。 – YTKColumba 2011-01-28 14:19:54

+0

正如我上面所说的,在自定义设置你的标签宽度,并将你的.emacs减少到一行:(setq indent-tabs-mode t)。 – Tyler 2011-01-28 14:45:16

5

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

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

为了解决您的具体问题不论,但是:

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

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

(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)如果你看一下章vtab-widthRET且同样indent-tabs-mode,你会发现,他们都会说“以任何方式设置时自动变为缓冲区本地”。

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