我想覆盖 emacs 中错误的默认选项卡方案,以便它可以像大多数其他编辑器(eclipse、notepad++)一样工作。我想设置它,以便无论模式如何,选项卡都会插入一个选项卡,然后按 Enter 将使我保持当前的选项卡深度。
我试过这个,但它什么也没做:
(global-set-key (kbd "TAB") 'tab-to-tab-stop)
(setq default-tab-width 4) ;; 8 is way too many
我想覆盖 emacs 中错误的默认选项卡方案,以便它可以像大多数其他编辑器(eclipse、notepad++)一样工作。我想设置它,以便无论模式如何,选项卡都会插入一个选项卡,然后按 Enter 将使我保持当前的选项卡深度。
我试过这个,但它什么也没做:
(global-set-key (kbd "TAB") 'tab-to-tab-stop)
(setq default-tab-width 4) ;; 8 is way too many
要使 Enter 键将您带到下一行并自动缩进,您可以输入
(global-set-key (kbd "RET") 'newline-and-indent)
在你的.emacs
. [或者你可以点击C-j
而不是 Enter。]一旦你有了它,你将永远不需要手动插入制表符,因为 Emacs 会在左大括号等之后自动缩进一个新行到额外的深度。如果你确实想更改缩进,您可以按 TAB 直到它带您到正确的缩进,然后从那里开始输入。[而且当你键入一个右大括号时,Emacs 足够聪明,可以将该大括号向后缩进一级。]
您应该删除(global-set-key (kbd "TAB") 'tab-to-tab-stop)
它才能正常工作。
许多主要模式会覆盖TAB
绑定,例如 cc-mode 绑定TAB
到'c-indent-to-column
.
由于'global-set-key
几乎所有主要模式都覆盖了TAB
.
可能对您有用的一个技巧是复制'pabbrev
使用的方法,并定义具有TAB
界限的全局次要模式。你可以这样做:
(defvar just-tab-keymap (make-sparse-keymap) "Keymap for just-tab-mode")
(define-minor-mode just-tab-mode
"Just want the TAB key to be a TAB"
:global t :lighter " TAB" :init-value 0 :keymap just-tab-keymap
(define-key just-tab-keymap (kbd "TAB") 'indent-for-tab-command))
但是,这会禁用所有TAB
完成。通过一个一个地覆盖每个主要模式,您可能会获得最佳结果(以避免弄乱TAB
完成)。
当我第一次开始使用 Emacs 时,这也困扰着我。不过,我已经爱上它了。如果我想适当缩进,我点击<tab>;
如果我想插入一个文字标签,我点击M-i
(Meta and 'i' or <Alt>-<i> in some parlances) 绑定到tab-to-tab-stop
.
我认为特雷杰克逊的答案可能是你想要的,除了可能使用'self-insert-command
而不是'indent-for-tab-command
. 我个人更喜欢 emacs 的默认行为,但self-insert-command
按照它所说的去做,而不是尝试做任何花哨的事情,比如确保你的代码格式正确。
有几次我实际上想插入一个制表符(不是缩进),我按 Mi。
您可能对我在http://github.com/vohrta/regtab创建的这种次要模式感兴趣。
它使得当您按下制表键时,制表符(如果 indent-tabs-mod 不为零)或制表宽度空格将被放置在点处。该模式还能够处理您可能认为在选定文本区域上的常规行为以及使用 shift-tabbing 删除行(或一组行)开头的选项卡。
您可以通过按 Mx regtab-mode 随时启用或禁用它。
C-j
执行您希望按 Enter 键的换行符 + 缩进功能。