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

Posted

技术标签:

【中文标题】如何将 emacs 设置为在 verilog 模式下使用 3 个空格而不是制表符?【英文标题】:How do I set emacs to use 3 spaces instead of tabs in verilog mode? 【发布时间】:2012-01-07 22:05:26 【问题描述】:

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

How To Force spaces instead of tabs regardless of major mode

Why might my Emacs use spaces instead of tabs?

Emacs global configuration of tabs

但它们似乎无法在 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)

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

【问题讨论】:

【参考方案1】:

在钩子中你应该使用setq而不是setq-default,所以你需要将你的钩子重写为:

(defun my-verilog-hook ()
    (setq indent-tabs-mode nil)
    (setq tab-width 3))
 (add-hook 'verilog-mode-hook 'my-verilog-hook)

附:最好在 hooks 中使用专用函数,因为更容易更改它们,并且您也可以从 hooks 中删除它们

【讨论】:

谢谢亚历克斯,但我仍然有问题。浏览不同的选项,我确实找到了 4 个选项,名为 1) Verilog 自动挂钩,2) Verilog before auto hook 3) verilog delete auto hook 和 4) verilog before delete auto hook。我应该更改这些值以使其正常工作吗?\ 这很奇怪 - 我刚刚再次检查了这个函数(来自 bzr 的 gnu emacs 24),当我将 indent-tabs-mode 设置为 t 时,我在源代码中得到了标签,但是当我将它设置为nil,然后我得到空间......你能检查一下 - 也许你有一些钩子,那是 Emacs 初始化代码的一部分? verilog-mode-hook 中列出了哪些函数? 好的,我检查了verilog-mode-hook,上面写着my-verilog-hook,问题仍然存在。 Btb 我使用的是 emacs 版本 23.3,从 emacs official site 下载。可能是在第 24 版中修复的错误。是的,我确实在here 周围进行了临时工作,这似乎工作正常。保存文件时,制表符将转换为空格 我还检查了 verilog-mode 的代码 - 它不直接使用 indent-tabs-mode,所以它应该由底层模式处理...但是 untabify 为你工作很好

以上是关于如何将 emacs 设置为在 verilog 模式下使用 3 个空格而不是制表符?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Emacs更改文件的读/写模式?

我可以将锁定模式设置为在 Informix - JDBC - tomcat 连接池中等待吗?

在Vim中集成emacs下的verilog-mode功能

如何在emacs组织模式中设置变量值?

设置 Emacs 默认字体 par-buffer/mode

RTL顶层自动连线的秘密武器:Emacs verilog-mode介绍(VIM也可以用)