我在编辑一个文本文件foo.txt
使用emacs。
我按TAB CQ在一行的开头插入制表符,然后用几个字符遵循。
有一次,我按ENTER键,emacs的插入在下一行八个空格。
怎样在我的.emacs指定我想制表符在后面的行与选项卡重复?
重要的是 ,我不喜欢制表符的程序代码,所以我有(setq-default indent-tabs-mode nil)
,以确保选项卡插入,只有当我明确要求他们。
我在编辑一个文本文件foo.txt
使用emacs。
我按TAB CQ在一行的开头插入制表符,然后用几个字符遵循。
有一次,我按ENTER键,emacs的插入在下一行八个空格。
怎样在我的.emacs指定我想制表符在后面的行与选项卡重复?
重要的是 ,我不喜欢制表符的程序代码,所以我有(setq-default indent-tabs-mode nil)
,以确保选项卡插入,只有当我明确要求他们。
Emacs的插入SPC
字符,因为你告诉它,通过设置indent-tabs-mode
,以nil
(我的偏好也BTW)。
如果你想Emacs的使用缩进TAB
在特定模式下(缓冲)字符,但希望使用SPC
字符一般(即,在其它模式下),然后设置indent-tabs-mode
来t
在那些你想要的模式TAB
秒。 只要使用setq
当你的模式,因为它是一个缓冲区局部变量。 例如:
(add-hook MY-mode-hook (lambda () (setq indent-tabs-mode t)))
真正的答案是:不,没有办法通过一些简单的配置在emacs中设置做到这一点。 indent-tabs-mode
是开或关,并且缩进将根据其行为。
但是,仅仅因为这个功能是不存在的,并不意味着你可以不加吧!
其实,这是不是从我发现了一个简单的问题。 不论是否使用制表符或空格由下式确定indent-tabs-mode
用C居多。 假设你正在运行的emacs最新版本,自动缩进是来自electric-indent-mode
,它使用indent-according-to-mode
在post-self-insert-hook
做缩进。
我所做的,这是定义一个缓冲局部轻微模式,当这种模式被激活indent-tabs-mode
将根据在上线的第一个字符,同时运行被临时设置indent-according-to-mode
。
因此,当smart-electric-indent-tabs-mode
是积极的,和你的最后一行开始与标签,下一行会与标签缩进太大,否则它只会使用任何indent-tabs-mode
通常会被设置为。
可以将以下添加到您的配置来激活它。 该add-hook
子句摆在那里为了您的方便,你可以激活它像一个正常的未成年人模式的飞,如果你愿意的话。
(define-minor-mode smart-electric-indent-tabs-mode
"When on, indenting will use tabs if the current line does,
else it will indent according to `indent-tabs-mode'."
:init-value nil
:lighter " smart-tabs"
:keymap nil
:global nil)
(defadvice indent-according-to-mode (around maybe-use-tabs activate)
"Follow `smart-electric-indent-tabs-mode'."
(let ((indent-tabs-mode
(or (and smart-electric-indent-tabs-mode
(save-excursion
(save-restriction
(widen)
(beginning-of-line 0)
(looking-at "\t"))))
indent-tabs-mode)))
ad-do-it))
;; if you want, add a text mode hook
(add-hook 'text-mode-hook 'smart-electric-indent-tabs-mode)
这仅仅是测试电动压痕期间工作