我想知道是否有人可以在缩小我的.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.
我同意泰勒的观点; 虽然它有点复杂,但如果你试图理解和自定义默认的缩进功能,那么从长远来看你会更好.Emacs Wiki具有良好的资源,Stack Overflow上还有其他相关的问答.
绑定选项卡键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))
Run Code Online (Sandbox Code Playgroud)
然后你只需要添加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
...))
Run Code Online (Sandbox Code Playgroud)
3)如果你看一下C-h v tab-width RET同样的话indent-tabs-mode,你会发现它们都说"以任何方式设置时自动成为缓冲区本地".
作为已提到的自定义界面的替代方法,您可以使用它(set-default 'indent-tabs-mode t)来为这些变量建立默认值.在没有设置缓冲区本地值的代码的情况下,所有缓冲区都将使用默认值,这可以帮助您避免编写不必要的模式挂钩.