我同意泰勒;虽然它有点复杂,但如果您尝试了解和自定义默认缩进功能,从长远角度来看,您会更好。 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-width
RET且同样indent-tabs-mode
,你会发现,他们都会说“以任何方式设置时自动变为缓冲区本地”。
作为已经提到的自定义界面的替代方案,您可以使用(set-default 'indent-tabs-mode t)
来确定这些变量的默认值。在没有设置缓冲区本地值的代码的情况下,所有缓冲区都将使用默认值,这可能有助于避免编写不必要的模式挂钩。
感谢您的回复,我会尝试一下,看看它是如何工作的,尽管对我来说可能会有点复杂。 – YTKColumba 2011-01-28 14:22:37