1、前言
记录与回放命令
这需要三个步骤:
1. "q{register}" 命令启动一次击键记录,结果保存到 {register} 指定的寄存器中。
寄存器名可以用 a 到 z 中任一个字母表示。
2. 输入你的命令。
3. 键入 q (后面不用跟任何字符) 命令结束记录。
现在,你可以用 "@{register}" 命令执行这个宏。
现在看看你可以怎么用这些命令。假设你有如下文件名列表:
stdio.h
fcntl.h
unistd.h
stdlib.h
而你想把它变成这样:
#include "stdio.h"
#include "fcntl.h"
#include "unistd.h"
#include "stdlib.h"
先移动到第一行,接着执行如下命令:
qa 启动记录,并使用寄存器 a
^ 移到行首
i#include "<Esc> 在行首输入 #include "
$ 移到行末
a"<Esc> 在行末加上双引号 (")
j 移到下一行
q 结束记录
现在,你已经完成一次复杂的修改了。你可以通过重复三次 "@a" 完成余下的修改。
"@a" 命令可以通过计数前缀修饰,使操作重复指定的次数。在本例中,你可以输入:
3@a
2、实例
在verilog编程中,我们经常遇到这样的情况,下面所示。
我们要对adder module实例化100个,那么我们通常的做法就是复制99次,然后对每个进行修改。这样的操作也许你并不讨厌,那么你有没有想过还有更快捷的方式呢。下面我们就用vi的记录与回放命令,来实现这个简单的操作。
首先我们在文件中编辑这样的一段代码:
adder adder0
(
.rst(rst),
.clk(clk),
.a(a0),
.b(b0),
.sum(sum0)
);
下面我们就要对这段代码复制49遍,实例化50个。
将光标移动到adder行
qx 启动记录,将记录保存在寄存器x中。x可以是a-z的任意一个字母
^ 将光标移动到adder行的第一个非空白字符
<ctrl+v> 进入visual block模式
jjjjjjjjjjj 下移11行,移动到);下的空白行
$ 选中
y 复制
jjjjjjjjjjj 下移11行,复制
/adder\d <Enter> 寻找adder后为整数的匹配
<ctrl+a> adder后面的数字加1
/a\d <Enter>
/b\d <Enter>
/sum\d <Enter>
kkkkkkkkk 移回到adder的行
q 记录结束
这样的话,这些操作就被保存在了,寄存器x里去了。
下面只要执行49@x,就可以完成你想完成的结果了。
我还有一个问题目前没有解决,正在继续寻找答案,若是有那么高手敢于分享自己的经验的,不妨分享一下,在这里全体的网友都会感谢你的!
问题描述:
在写verilog的时候我需要有这么几个信号;
hor_halfpel00 <= 0; hor_halfpel01 <= 0; hor_halfpel02 <= 0; hor_halfpel03 <= 0; hor_halfpel04 <= 0;
hor_halfpel10 <= 0; hor_halfpel11 <= 0; hor_halfpel12 <= 0; hor_halfpel13 <= 0; hor_halfpel14 <= 0;
hor_halfpel20 <= 0; hor_halfpel21 <= 0; hor_halfpel22 <= 0; hor_halfpel23 <= 0; hor_halfpel24 <= 0;
hor_halfpel30 <= 0; hor_halfpel31 <= 0; hor_halfpel32 <= 0; hor_halfpel33 <= 0; hor_halfpel34 <= 0;
hor_halfpel40 <= 0; hor_halfpel41 <= 0; hor_halfpel42 <= 0; hor_halfpel43 <= 0; hor_halfpel44 <= 0;
hor_halfpel50 <= 0; hor_halfpel51 <= 0; hor_halfpel52 <= 0; hor_halfpel53 <= 0; hor_halfpel54 <= 0;
我如何快速的完成他们输入和赋值,谢谢!