强制Emacs在php模式下使用制表符


Force Emacs to use tabs in php mode

我希望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模式缓冲区并按下<C-q><Tab>,但Emacs仍然插入4个空格而不是制表符。我花了很多时间找这个。上面的代码只是其中一个不起作用的解决方案。我遗漏了什么?

(我知道很多人认为制表符很糟糕,但在我工作的公司,这是一种标准,所以在我工作的时候,使用空格缩进对我来说不是一个选择)

我会这样写:

(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模式下使用。不过,设置它也没什么坏处。

注意,indent-tabs-modetab-widthc-basic-indent都是自动缓冲区局部变量。当您使用C-h v向Emacs询问它们时,它会告诉您情况就是这样。因此,您在原始代码中使用setq的方式不会对其他缓冲区产生任何影响。更改此类变量的默认值的正确方法是使用setq-defaultdefault-tab-width变量已经过时了;这样的变量已经被弃用,而使用setq-default作为正常的变量名。

我的代码中的模式钩子方法在你正在编辑的php模式缓冲区的上下文中设置buffer-local值,所以使用这种方法,如果你不想的话,你不需要打乱默认值。

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

我发现了一种更简单的方法。按M-x> customize-variable> php-mode-coding-style修改为Wordpress

换个方法怎么样?在保存这个SO问题时插入制表符这是相反的你可以把它改为tabify而不是untabify

我认为你只是在浪费时间:不要再担心制表符和空格了,继续看下去吧。

也就是说,如果你真的想这样做,你可以试试:

(add-hook 'php-mode-hook
          (lambda ()
            (local-set-key [?'t] 'self-insert-command)))