我已将一个indent-for-tab-command
命令绑定到一个键,我希望它能够像使用标签一样进行智能模式特定的缩进。在所有模式中。它总是插入空格而不是制表符。如何重新配置/重新编程?
我希望将Emacs用作完全可自定义的编辑器,因为它已宣布为。这样它的行为就像我想要的那样。我根本不关心开发人员的意见,并希望自定义一切。这是错的吗?
答案 0 :(得分:7)
并非所有主要模式都以相同的方式处理缩进,因此您可能必须对某些模式进行一些调整才能获得所需的行为。他们通常会有自己的缩进设置,例如cperl-indent-level
。
在基于cc-mode
的类似C语言的模式中,这样的事情可以做你想要的:
(setq-default indent-tabs-mode t)
(setq-default tab-width 4) ; Assuming you want your tabs to be four spaces wide
(defvaralias 'c-basic-offset 'tab-width)
请注意,使用制表符进行缩进时可能会出现一些有趣的情况。 EmacsWiki indentation basics页面值得一读,如果只是为了理解Emacs如何处理缩进与其他编辑不同。
修改强>
对于ruby-mode
,这应该有效(假设您已经如上所述设置了tab-width
):
(setq ruby-indent-tabs-mode t)
(defvaralias 'ruby-indent-level 'tab-width)
适用于sgml-mode
- 派生模式,包括html-mode
:
(defvaralias 'sgml-basic-offset 'tab-width)
答案 1 :(得分:1)
将indent-tabs-mode
设置为非nil值是告诉Emacs“我希望缩进尽可能使用TAB”的方法。但是问题是,如果您的tab-width
是8(即TAB字符跨越8列),并且缩进代码发现缩进应该在第13列,则无法仅使用TAB到达那里,因此Emacs然后将插入TAB和SPC的组合。
但是,如果您确实只想要TAB,则可以覆盖缩进的列选择。例如:
(setq-default indent-tabs-mode 'only)
与类似的东西一起
(advice-add 'indent-to :around
(lambda (orig-fun column &rest args)
(when (eq indent-tabs-mode 'only)
(setq column (* tab-width (round column tab-width))))
(apply orig-fun column args)))
答案 2 :(得分:-1)
将(setq-default indent-tabs-mode nil)
放入您的.emacs
文件中。