如何在文本模式下在Emacs中设置4个空格缩进?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

TAB使用主模式按下缓冲区时,我一直没有成功让Emacs从8个空间制表符切换到4个空间制表符text-mode。我已将以下内容添加到我的.emacs

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)

;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)

无论我如何更改我的.emacs文件(或我的缓冲区的局部变量),TAB按钮始终会执行相同的操作。

  1. 如果上面没有文字,请缩进8个空格
  2. 如果上一行有文本,请缩进第二个单词的开头

尽管我爱Emacs,但这变得令人讨厌。有没有办法让Emacs在上一行没有文本的情况下至少缩进4个空格?

提问于
用户回答回答于
(customize-variable (quote tab-stop-list))

或在.emacs文件中将制表符停止列表条目添加到自定义设置变量中:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))
用户回答回答于

简短的回答:

关键是告诉emacs在缩进时插入任何你想要的东西,这是通过改变缩进线功能来完成的。将它更改为插入一个选项卡然后将选项卡更改为4个空格而不是将其更改为插入4个空格更容易。以下配置将解决你的问题:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)

说明:

来自缩进由Major Mode @ emacs手动控制:

每种主要模式的一个重要功能是自定义键以正确缩进正在编辑的语言。 [...] indent-line-function变量是由(和​​各种命令使用的,比如在调用缩进区域时)缩进当前行的函数。indent-by-to-mode命令只不过是调用这个函数。 [...] 默认值是许多模式的缩进相对值。

来自indent-relative @ emacs手册:

缩进相对空间在前一个非空行的下一个缩进点之前。 [...] 如果前一个非空行在列起始点之后没有缩进点,那么将执行“制表符到制表符”。

只需将indent-line-function的值更改为insert-tab函数,并将tab插入配置为4个空格即可。

扫码关注云+社区