我同意泰勒;雖然它有點複雜,但如果您嘗試瞭解和自定義默認縮進功能,從長遠角度來看,您會更好。 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