强制Emacs在php模式下使用选项卡

时间:2013-04-22 03:08:30

标签: php emacs indentation

我希望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个空格而不是标签。我花了很多时间寻找这个。上面的代码只是其中一个无效的解决方案。 我在这里错过了什么?
(我知道很多人认为标签是邪恶的,但在我工作的公司里它是一个标准,所以在我工作时使用空格缩进对我来说不是一个选择)

4 个答案:

答案 0 :(得分: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))))

设置tab-stop-list在这里可能是多余的,也可能不是多余的,因为我不是在php模式下使用它。然而,设置它没有任何害处。

请注意,indent-tabs-modetab-widthc-basic-indent都是自动缓冲区局部变量。当您使用C-h v向Emacs询问有关它们时,它会告诉您这种情况。因此,在原始代码中使用setq的方式对其他缓冲区没有任何影响。更改此类变量的默认值的正确方法是使用setq-defaultdefault-tab-width变量已过时;这些变量已被弃用,支持使用setq-default和普通变量名。

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

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

答案 1 :(得分:1)

我找到了一种更简单的方法来实现这一目标。做M-x&gt; customize-variable&gt; php-mode-coding-style并将其更改为Wordpress

答案 2 :(得分:0)

不同的方法怎么样?在保存找到this时插入标签反之,您可以将其反向工程设计为tabify而不是untabify

答案 3 :(得分:0)

FWIW,我认为你只是在浪费你的时间:不要再担心标签与空格,只需继续前进。

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

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