如何缩小.emacs配置文件?

如何缩小.emacs配置文件?,emacs,emacs23,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-in

我想知道是否有人能在缩小.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) ;; 爪哇钩子 (defun e-java-mode-hook() (设置标签宽度4) (setq缩进制表符模式t) (定义键java模式映射(kbd“”)“java插入”选项卡) (定义java插入选项卡(&可选参数) (交互式“P”) (插入选项卡arg)) (添加钩子“java模式钩子”e-java-mode-hook) 如果我要添加另一种语言,比如CSS或JavaScript,我会为CSS添加另一个钩子,为JavaScript添加另一个钩子。所以我想知道是否有一个全球性的方法来设置它,使它适用于任何和所有的语言

我目前正在Windows 7上运行GNU Emacs 23.2.1。

正是您想要的

从文档中:
此模式可方便地为单个用户配置设置 缓冲区使用简洁和可扩展的迷你语言。它是抽象的 取消常见的配置选择任务,如检查模式 或文件名,转换为简单的声明性语法。宣布条件; 当新缓冲区与它们匹配时运行函数。这就够了 为您的最爱打开flyspell prog模式等简单操作 或使所有文本模式缓冲区以.mkn结尾
有特殊的属性。

我不知道你想做什么。如果要全局将选项卡宽度设置为4个空格,则可以使用“自定义”命令:

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

我同意泰勒的观点;虽然这有点复杂,但是如果您尝试理解和自定义默认缩进特性,那么从长远来看,您会更好。EmacsWiki有,这里还有其他的堆栈溢出

将tab键绑定到
插入选项卡
意味着您完全失去了
缩进区域
以及主模式可能提供的任何其他智能行为的好处

但是,要解决您的具体问题,请:

1) 如果您正在定义
(java插入选项卡)
(css插入选项卡)
(javascript插入选项卡)
等,并且它们都做完全相同的事情。。。好吧,希望你能看到你实际上不需要超过一个这样的函数。只需给它一个更通用的名称,然后重新使用它

2)
(本地设置键…
执行与
(定义键(当前本地映射)…)
相同的操作,这意味着您也可以使用一个通用函数来覆盖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))
3) 如果您查看C-h v
tab width
RET以及
indent tabs mode
,您会注意到它们都说“当以任何方式设置时,自动成为缓冲区本地”


作为前面提到的自定义界面的替代,您可以使用
(设置默认值“缩进制表符模式t)
为这些变量建立默认值。在没有设置缓冲区本地值的代码的情况下,所有缓冲区都将使用默认值,这可能有助于避免编写不必要的模式挂钩。

好的,我主要尝试的是使用4个空格标签全局缩进。如果您以前使用过Visual Studio/DreamWeaver,我有点想这样设置。正如我前面所说的,在customize中设置选项卡宽度,并将.emacs减少到一行:(setq indent tabs mode t)。感谢您的回复,我将尝试一下,看看它是如何工作的,尽管对我来说可能有点复杂。太棒了,我会试试看,让你知道结果如何。
(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))
;; 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
   ...))