在 Emacs 中设置制表符缩进

Mag*_*nus 2 emacs

我想在 Emacs 中做一件非常简单的事情。我想设置它以便当我按下 TAB 键时,它插入两个空格。只是这个。这就是我要问的。我已经尝试这样做了几年了,但没有办法做到。在每种文件类型中,它都会以不同的方式爆炸。HTML文件?在获得四个空格或跳到上一行缩进之间的随机选择。Python文件?只有四个空格,我会忽略您的任何设置。根据之前工作时的月相,它似乎也会随机停止工作。

在我的 .emacs 中:

(setq indent-tabs-mode nil)
(setq tab-width 2)
Run Code Online (Sandbox Code Playgroud)

这应该有效,对吧?不不不。似乎 emacs 对每个扩展都有一个神奇的“文件模式”,它完全覆盖了我告诉它的内容。那么我是否必须找到这个神奇的仙女配置并为每种文件类型覆盖它?我该怎么做才能让这个简单的事情发挥作用。呸。

Gil*_*il' 5

每种语言都有自己的缩进约定,因此Tab始终从易于访问的键中获得相同的效果并不是很有用。这就是为什么许多主要模式¹ 覆盖键的绑定。

要覆盖特定模式的设置,请将其绑定到其键盘映射中。

(defun insert-two-spaces (&optional count)
  (interactive "*p")
  (insert (make-string (* 2 count) ?\ )))
(add-hook 'python-mode-hook '(local-set-key "\t" 'insert-two-spaces))
Run Code Online (Sandbox Code Playgroud)

要覆盖任何地方的设置,您可以定义一个永远在线的次要模式。有关如何定义次要模式的信息,请参阅Elisp 手册

(define-minor-mode magnus-minor-mode
  "Override the binding of the TAB key."
  :keymap '(([?\t] . insert-two-spaces))
  :global t)
(magnus-minor-mode 1)
Run Code Online (Sandbox Code Playgroud)

¹你所谓的“魔仙档案模式”是一种主要模式。如果您不喜欢自动执行操作的编辑器,我建议使用nano