重复在文本文件中的后续行片(但保持制表符禁用的代码)(Repeating TABs on subse

2019-10-20 14:31发布

我在编辑一个文本文件foo.txt使用emacs。

我按TAB CQ在一行的开头插入制表符,然后用几个字符遵循。

有一次,我按ENTER键,emacs的插入在下一行八个空格。

怎样在我的.emacs指定我想制表符在后面的行与选项卡重复?

重要的是 ,我不喜欢制表符的程序代码,所以我有(setq-default indent-tabs-mode nil) ,以确保选项卡插入,只有当我明确要求他们。

Answer 1:

Emacs的插入SPC字符,因为你告诉它,通过设置indent-tabs-mode ,以nil (我的偏好也BTW)。

如果你想Emacs的使用缩进TAB在特定模式下(缓冲)字符,但希望使用SPC字符一般(即,在其它模式下),然后设置indent-tabs-modet在那些你想要的模式TAB秒。 只要使用setq当你的模式,因为它是一个缓冲区局部变量。 例如:

 (add-hook MY-mode-hook (lambda () (setq indent-tabs-mode t)))


Answer 2:

真正的答案是:不,没有办法通过一些简单的配置在emacs中设置做到这一点。 indent-tabs-mode是开或关,并且缩进将根据其行为。

但是,仅仅因为这个功能是不存在的,并不意味着你可以不加吧!

其实,这是不是从我发现了一个简单的问题。 不论是否使用制表符或空格由下式确定indent-tabs-mode用C居多。 假设你正在运行的emacs最新版本,自动缩进是来自electric-indent-mode ,它使用indent-according-to-modepost-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)

这仅仅是测试电动压痕期间工作



文章来源: Repeating TABs on subsequent lines in text files (but keeping TABs disabled for code)
标签: emacs tabs