仅使用标签进行Emacs中的缩进

4
我喜欢Emacs,但不喜欢它的缩进方式:要么是无法控制的制表符和空格混合,要么只有空格((setq indent-tabs-mode nil))。
我希望Emacs能够按照以下方式进行缩进:
  1. 只使用制表符。

  2. 将缩进设置为固定数量的位置(而不是有时为6个,有时为8个,而另一些地方则为4个)。

  3. 能够将一个缩进级别设为等于4个(或2个)空格。

  4. 如果我更改了制表位停止位的值,则所有新打开或重新加载的文件都应使用新值(或这种更改是否仅通过重新启动Emacs来实现?)

以上都可行吗?是否有一些在.emacs中设置或者包可以实现?
大多数IDE(例如Eclipse)都提供以上功能。

3
我只使用空格,所以我没有回答你的问题。但是你看到这个页面了吗?http://www.emacswiki.org/SmartTabs - kindahero
@kindahero,你提供的链接基本上回答了我所有的问题(还有更多!)。能否麻烦您将该链接添加为答案,以便我将其标记为已接受,并给予您的努力以荣誉?谢谢! - markvgti
3个回答

8

智能制表符是一种可以根据上下文插入制表符和空格的技术。

个人而言,我在自己的项目中只使用空格进行缩进和对齐。 这篇文章是emacswiki上另一篇关于此主题非常有用的文章。


对于那些想要在Spacemacs中使用它的人,在(https://github.com/curtmack/spacemacs-conf/tree/master/private/local/smart-tabs)上,curtmack已经开始了一些工作-该拉取请求在合并之前需要修复一些错误(https://github.com/syl20bnr/spacemacs/pull/6467)。 - Aidenhjj

3

我使用制表符来缩进代码。但是,当别人使用不同的编辑器时,他们可能会发现缩进已经消失了。因此,你可以选择用制表符缩进的一段代码并运行“M-x untabify”命令。这将把制表符替换为空格,因此对于使用不同编辑器的用户来说,第一个问题就不存在了。


3

对于C/C++/Java,您可以尝试在模式钩子中添加相同的tab宽度、缩进级别和c-basic-offset:

(defun my-c-mode-common-hook ()
  (setq c-indent-level 3
    c-brace-offset -3)
  (setq c-basic-offset 3)
  (setq-default tab-width 3)
  (setq tab-width 3))

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

这样做可以使得当您处于cc-mode时,制表符和缩进相同,因此emacs总是会选择制表符而不是空格。有关详细信息,请参见Indenting Ctab-width可以在其他地方设置,您可以将其与类似于python的python-indent的缩进长度变量一起应用于其他模式。

编辑:

实际上,看起来kindahero的链接已经基本做到了这一点:http://www.emacswiki.org/SmartTabs


这是有用的代码,特别是对于像我这样不懂elisp的人来说。谢谢,但正如你自己指出的那样,@kindahero的链接几乎涵盖了这个主题的所有内容。 - markvgti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接