在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插件。
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功能的主要内容,如果未能解决你的问题,请参考以下文章