Emacs:插入标签而不是空格

时间:2011-02-28 19:28:36

标签: emacs makefile text-editor

由于多种原因,我更喜欢将编辑器配置为在按下 TAB 时插入空格。

但最近我发现标签应该保留为make文件中的标签。

如果我不需要在每次需要编写make文件时重新配置编辑器,如何插入标签(\t,而不是" ")?

我使用以下编辑器: EmacsKategeditVisual Studio编辑。

3 个答案:

答案 0 :(得分:58)

要在Emacs中手动插入选项卡,请使用ctrl-Q TAB。 control-Q导致插入下一个键而不是解释为可能的命令。

答案 1 :(得分:8)

只要在正确的位置按右键,Emacs的Makefile模式就会处理插入标签和空格的位置。要不然,或者我错过了问题中的一些细节。

答案 2 :(得分:1)

EmacsWiki上NoTabs页面的Smart inference of indentation style部分非常有用。它向您展示了如何为大多数项目设置空间,但如果您正在编辑的文件包含以制表符开头的行多于以空格开头的行,则切换到制表符。

以下是代码:

(defun infer-indentation-style ()
  ;; if our source file uses tabs, we use tabs, if spaces spaces, and if        
  ;; neither, we use the current indent-tabs-mode                               
  (let ((space-count (how-many "^  " (point-min) (point-max)))
        (tab-count (how-many "^\t" (point-min) (point-max))))
    (if (> space-count tab-count) (setq indent-tabs-mode nil))
    (if (> tab-count space-count) (setq indent-tabs-mode t))))
  

[在我的c-mode挂钩中,或者我想要智能缩进的其他任何模式]

(setq indent-tabs-mode nil)
(infer-indentation-style)

在编辑应该始终包含makefile等标签的新文件时,这仍然是一个问题。对于那些,你的模式钩子只是将它设置为选项卡。例如:

(add-hook 'makefile-mode-hook 
  '(lambda() 
     (setq indent-tabs-mode t)
   )
)