如何将 emacs 设置为在 verilog 模式下使用 3 个空格而不是制表符?

Pul*_*mon 1 emacs verilog emacs23

我对 emacs 很陌生(使用版本 23.3),我想设置默认 Tab 键以在 verilog 模式下插入 3 个空格而不是制表符。我确实在堆栈溢出中找到了许多关于此的帖子。他们之中有一些是: -

无论主要模式如何,如何强制使用空格而不是制表符

为什么我的 Emacs 可能使用空格而不是制表符?

Emacs 全局标签配置

但它们似乎不能在 verilog 模式下工作。这是我的 .emacs 文件的样子

(custom-set-variables      
 '(tab-stop-list ('(3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 102 105 108 111 114 117 120)))
 '(verilog-case-indent 3)    
 '(verilog-indent-level-directive 0)
 '(verilog-indent-level 3)    
 '(verilog-tab-always-indent nil))
(custom-set-faces
  )
(add-hook 'after-change-major-mode-hook 
          '(lambda () 
             (setq-default indent-tabs-mode nil)
             (setq tab-width 3)))

(setq-default indent-tabs-mode nil)
(setq-default tab-width 3)
(setq-default standard-indent 3)
Run Code Online (Sandbox Code Playgroud)

如果我尝试编辑文本文件,则设置会完美运行并插入 3 个空格而不是制表符。但是,当我尝试编辑 verilog 文件 (.v) 时,它仍会插入一个制表符。我可以选择整个文本并执行 Mx untabify 以获得所需的结果,但还有另一种直接的解决方案吗?

Ale*_*Ott 5

在钩子中,您应该使用setq而不是setq-default,因此您需要将钩子重写为:

(defun my-verilog-hook ()
    (setq indent-tabs-mode nil)
    (setq tab-width 3))
 (add-hook 'verilog-mode-hook 'my-verilog-hook)
Run Code Online (Sandbox Code Playgroud)

PS 最好在 hooks 中使用专用函数,因为更容易改变它们,你也可以从 hooks 中移除它们