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

Posted ExASIC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Vim中集成emacs下的verilog-mode功能相关的知识,希望对你有一定的参考价值。

本文获得作者授权,转载自

https://segmentfault.com/a/1190000015642389

请关注作者的专栏:验证的进阶之路

https://segmentfault.com/blog/harriszh



安装emacs的verilog-mode


下载


最新版的下载网址:

https://www.veripool.org/projects/verilog-mode/wiki/Installing


安装


Windows


从网上找到的教程清一色是让在$HOME目录下新建一个elisp目录,然后放verilog-mode.el进去,再写个.emacs。要新建.emacs还需要用cmd窗口 echo hi > .emacs 但我照做了没有用。


在emacs下, 依次输入C-h v load-path回车, 就可以看到下面界面:




里面并不包含$HOME目录,所以它没有起作用。


从load-path的输出看,第一个是emacs/26.1/site-lisp,所以可以把解压缩后的verilog-mode.el放到这个目录里,同时在该目录新建一个文件site-start.el,如下:


;; Load verilog mode only when needed
(autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
;; Any files that end in .v should be in verilog mode
(setq auto-mode-alist (cons  '("\.[v|sv]\'" . verilog-mode) auto-mode-alist))
;; Any files in verilog mode should have their keywords colorized
(add-hook 'verilog-mode-hook '(lambda () (font-lock-mode 1)))

这样当打开.v或.sv开头的文件,会自动加载verilog-mode插件。

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


Linux

新建~/.elisp目录,把verilog-mode.el拷贝进去
在~/.emacs里输入

(defun prepend-path ( my-path )
(setq load-path (cons (expand-file-name my-path) load-path)))

(defun append-path ( my-path )
(setq load-path (append load-path (list (expand-file-name my-path)))))
;; Look first in the directory ~/elisp for elisp files
(prepend-path "~/.elisp")
;; Load verilog mode only when needed
(autoload 'verilog-mode "verilog-mode" "Verilog mode" t )
;; Any files that end in .v, .dv or .sv should be in verilog mode
(add-to-list 'auto-mode-alist '("\.[ds]?v\'" . verilog-mode))
;; Any files in verilog mode should have their keywords colorized
(add-hook 'verilog-mode-hook '(lambda () (font-lock-mode 1)))




在vim上安装verilog-mode插件


在网上有一个插件,但它有很多问题,基于它我修改出了一个无问题版本。

见 https://github.com/zhuzhzh/verilog_emacsauto.vim


使用vim-plug或Vundle安装的方法如下:


vim-plug


Plug 'zhuzhzh/verilog_emacsauto.vim', {'for': ['verilog''systemverilog'] }



Vundle


Plugin 'zhuzhzh/verilog_emacsauto.vim'



vim上的使用方法


  • <Leader>a: 展开所有auto宏

  • <leader>d:  移除所有auto宏


注意,默认<Leader>是  , 也可以在.vimrc里重设它。



一个例子


原始代码如下:


 1//
2// Created On         :  2018-07-14 22:20:59
3// Last Modified      :  2018-07-14 22:20:59
4// Update Count       :  1
5// Tags               :
6// Description        :
7// Conclusion         :
8//
9//=======================================================================
10module foo(/*AUTOARG*/);
11
12input i;
13output [DWIDTH-1:0] o;
14
15endmodule
16
17module test (/*AUTOARG*/)
;
18
19parameter DWIDTH=32;
20
21input i;
22output [DWIDTH-1:0] o;
23
24foo u0(/*AUTOINST*/);
25
26endmodule


按下<leader>a后, 变成如下:


 1//
2// Created by         :  Harris Zhu
3// Filename           :  test.sv
4// Author             :  Harris Zhu
5// Created On         :  2018-07-14 22:20:59
6// Last Modified      :  2018-07-14 22:20:59
7// Update Count       :  1
8// Tags               :
9// Description        :
10// Conclusion         :
11//
12//=======================================================================
13module foo(/*AUTOARG*/
14   // Outputs
15   o,   
16   // Inputs
17   i
18   );
19  input i;
20  output [DWIDTH-1:0] o;
21
22endmodule
23
24module test (/*AUTOARG*/
25   // Outputs
26   o,
27   // Inputs
28   i
29   );
30
31parameter DWIDTH=32;
32
33input i;
34output [DWIDTH-1:0] o;
35
36foo u0(/*AUTOINST*/
37       // Outputs
38       .o                (o[DWIDTH-1:0]),
39       // Inputs
40       .i                (i));
41
42endmodule




小编来总结


是不是觉得作者很厉害?来偷窥一下verilog_emacsauto.vim的源码:



谜底揭开:隐式调用了emacs。


最后,再次感谢作者harriszh的分享!





欢迎关注ExASIC


分享数字集成电路设计中的经验和方法

分享让工作更轻松


以上是关于在Vim中集成emacs下的verilog-mode功能的主要内容,如果未能解决你的问题,请参考以下文章

在 Emacs 中集成 Recoll 全文搜索

如何把vim的光标设置成emacs闪烁的那种

如何将vim打造成Linux下的source insight

vim和Emacs哪个要牛一些?

vim配置

Emacs key bindings for vim users