3

我希望 Emacs 在 php 模式下使用制表符而不是空格。我试着把下面的代码

;; Turn on tabs
(setq indent-tabs-mode t)
(setq-default indent-tabs-mode t)

;; Bind the TAB key
(global-set-key (kbd "TAB") 'self-insert-command)

;; Set the tab width
(setq default-tab-width 4)
(setq tab-width 4)
(setq c-basic-indent 4)

在我的 .emacs 中。然后我打开一个 php-mode 缓冲区并按下<C-q><Tab>,但 Emacs 仍然插入 4 个空格而不是一个制表符。我花了很多时间寻找这个。上面的代码只是不起作用的解决方案之一。我在这里想念什么?
(我知道很多人认为制表符是邪恶的,但在我工作的公司中,这是一个标准,所以在我工作时使用空格缩进不是我的选择)

4

4 回答 4

2

我会使用这样的东西:

(add-hook 'php-mode-hook 'my-php-mode-hook)
(defun my-php-mode-hook ()
  (setq indent-tabs-mode t)
  (let ((my-tab-width 4))
    (setq tab-width my-tab-width)
    (setq c-basic-indent my-tab-width)
    (set (make-local-variable 'tab-stop-list)
         (number-sequence my-tab-width 200 my-tab-width))))

在这里设置制表符停止列表可能是多余的,也可能不是多余的,因为我不知道它是否曾经在 php-mode 中使用过。但是,设置它并没有什么坏处。

请注意indent-tabs-modetab-width、 和c-basic-indent都是自动缓冲区局部变量。当你C-h v过去向 Emacs 询问它们时,它会告诉你情况就是这样。因此,您setq在原始代码中使用的方式不会对其他缓冲区产生任何影响。更改此类变量默认值的正确方法是使用setq-default. 该default-tab-width变量已过时;此类变量已被弃用,取而代之的是setq-default与普通变量名一起使用。

我的代码中的模式挂钩方法在您正在编辑的 php-mode 缓冲区的上下文中设置缓冲区本地值,因此如果您不想使用这种方法,则不需要弄乱默认值。

在您的情况下,您可能希望使用一些默认值,特别是如果您将编辑的不仅仅是 PHP 代码。

于 2013-04-22T22:06:34.910 回答
1

我找到了一种更简单的方法来实现这一点。执行M-x> customize-variable>php-mode-coding-style并将其更改为Wordpress.

于 2014-08-20T14:12:22.690 回答
0

不同的方法怎么样?保存时插入选项卡,发现这个SO 问题可以反向进行,您可能可以对其进行反向工程,tabify而不是untabify

于 2013-04-22T12:15:09.887 回答
-1

FWIW,我认为您只是在浪费时间:停止担心制表符与空格,然后继续前进。

这就是说,如果这真的是你想要的,你可以尝试:

(add-hook 'php-mode-hook
          (lambda ()
            (local-set-key [?\t] 'self-insert-command)))
于 2013-04-22T16:23:53.233 回答