工欲善其事,必先利其器,做为一名FPGA或者数字芯片设计人员,gvim就是我们编写代码的神器,掌握vim是十分必要的,使用vim来编写RTL代码会极大提高我们的效率,通过一些模板和规则的制作,vim也会让我们的代码看起来更加完美漂亮,尤其是对齐方面。
我接触vim也有段时间了,对vim也比较熟悉,这里我要推荐一本关于vim的书籍----《vim的实用技巧》。看完这本书,我对vim有了新的认识,也学了很多,以前总是想着制作快捷键和模板,却对vim自带的一些强大功能一无所知,真是惭愧。多掌握vim自带的一些功能,这样就可以随便在哪都可以用的顺手。
对于新手来说,刚开始使用gvim会有点吃力,各种不熟悉,这个是正常现象,要有一定的耐心哦,后面会越用越顺手的。文章的最后我会给出我配置好的gvim,下载后可以直接使用。
下面我将会介绍一些vim自带的核心功能,
命令 | 用途 |
---|---|
c | 修改 |
d | 删除 |
y | 复制 |
g~ | 反转大小写 |
gu | 转化为小写 |
gU | 转化为大写 |
> | 增加缩进 |
< | 减小缩进 |
= | 自动缩进 |
动作 | 用途 |
---|---|
aw | 一个单词 |
ap | 一段 |
l | 一个字符 |
命令 | 用途 |
---|---|
vi} | {}内部 |
vi) | ()内部 |
vi] | []内部 |
vi" | ""内部 |
va} | 一对花括号 |
va) | 一对圆括号 |
va] | 一对[] |
va" | 一对"" |
命令 | 用途 |
---|---|
iw | 当前单词 |
aw | 当前单词及 空格 |
iW | 当前字符串 |
aW | 当前字符串及 空格 |
is | 当前一个句子 |
as | 当前一个句子及 空格 |
ip | 当前段落 |
ap | 当前段落及 空格 |
//需要在[]内一次输入编号(0-19),手动输入会比较繁琐,更何况有些场景(0v5640寄存器的配置,有304个寄存器,要是都手动输入会比较麻烦)
assign cfg_array[] = {8'h78, 16'h3103, 8'h11};
assign cfg_array[] = {8'h78, 16'h3008, 8'h82};
assign cfg_array[] = {8'h78, 16'h3008, 8'h42};
assign cfg_array[] = {8'h78, 16'h3103, 8'h03};
assign cfg_array[] = {8'h78, 16'h3017, 8'hff};
assign cfg_array[] = {8'h78, 16'h3018, 8'hff};
assign cfg_array[] = {8'h78, 16'h3034, 8'h1A};
assign cfg_array[] = {8'h78, 16'h3037, 8'h13};
assign cfg_array[] = {8'h78, 16'h3108, 8'h01};
assign cfg_array[] = {8'h78, 16'h3630, 8'h36};
assign cfg_array[] = {8'h78, 16'h3631, 8'h0e};
assign cfg_array[] = {8'h78, 16'h3632, 8'he2};
assign cfg_array[] = {8'h78, 16'h3633, 8'h12};
assign cfg_array[] = {8'h78, 16'h3621, 8'he0};
assign cfg_array[] = {8'h78, 16'h3704, 8'ha0};
assign cfg_array[] = {8'h78, 16'h3703, 8'h5a};
assign cfg_array[] = {8'h78, 16'h3715, 8'h78};
assign cfg_array[] = {8'h78, 16'h3717, 8'h01};
assign cfg_array[] = {8'h78, 16'h370b, 8'h60};
assign cfg_array[] = {8'h78, 16'h3705, 8'h1a};
下面介绍“迭代法求值”
以下是我自己配置的一些命令,下载我的gvim后就可以直接使用。
在插入模式下输入相应的命令后,再回车(或者空格)即可
命令 | 用途 |
---|---|
F2功能键 | 插入文件头 |
Module | module模板 |
Define | define模板 |
Code | code注释模板,用来分隔变量和代码,使整个代码布局更加合理 |
ii | |
列块模式 | |
pp | 补全命令 |
hh | 插入模式下左移 |
jj | 插入模式下下移 |
kk | 插入模式下上移 |
ll | 插入模式下右移 |
input | input对齐模板 (输入完毕按空格即可) |
output8 | output对齐模板,最后的数字取值范围是[0,32],默认为wire型的。(输入完毕按空格即可) |
outputreg8 | output对齐模板,最后的数字取值范围是[0,32]。(输入完毕按空格即可) |
reg8 | reg模板,最后的数字取值范围是[0,32]。(输入完毕按空格即可) |
wire8 | wire模板,最后的数字取值范围是[0,32]。 (输入完毕按空格即可) |
Shixu | 时序逻辑代码模板,默认带2个else if |
Shixu1 | 时序逻辑代码模板,带一个else if |
Zh | 组合逻辑代码模板 |
Jsq | 计数器代码模板 |
Jsq2 | 2层计数器模板 |
Jsq3 | 3层计数器模板 |
Ztj | 3段式状态机模板 |
F10功能键 | 例化 |
F7功能键 | 调整例化后的格式 |
=ap | 在普通模式下输入=ap,可以调整该段代码的自动缩进 |
对于已保存的文件,可以使用下面的方法进行空格和TAB的替换
TAB替换为空格:
:set ts=4
:set expandtab
:%retab!
空格替换为TAB:
:set ts=4
:set noexpandtab
:%retab!
set ts=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
ts是tabstop的缩写,设TAB宽度为4个空格。
softtabstop 表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab 时特别有用。
shiftwidth 表示每一级缩进的长度,一般设置成跟 softtabstop 一样。
expandtab表示缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。
autoindent自动缩进
为了能及时回复大家,现在获取源码方式如下:
微信扫描下面的二维码关注【春哥笔记】公众号,回复"gvim"即可Get源码的获取方式:
在公众号中有视频演示操作哦~