我希望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-mode
、tab-width
和c-basic-indent
都是自动缓冲区局部变量。当您使用C-h v
向Emacs询问它们时,它会告诉您情况就是这样。因此,您在原始代码中使用setq
的方式不会对其他缓冲区产生任何影响。更改此类变量的默认值的正确方法是使用setq-default
。default-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)))