我希望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个空格而不是标签。我花了很多时间寻找这个。上面的代码只是其中一个无效的解决方案。
我在这里错过了什么?
(我知道很多人认为标签是邪恶的,但在我工作的公司里它是一个标准,所以在我工作时使用空格缩进对我来说不是一个选择)
答案 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-mode
,tab-width
和c-basic-indent
都是自动缓冲区局部变量。当您使用C-h v
向Emacs询问有关它们时,它会告诉您这种情况。因此,在原始代码中使用setq
的方式对其他缓冲区没有任何影响。更改此类变量的默认值的正确方法是使用setq-default
。 default-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)))