Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 如何跨代码行重复某个操作?_Vim - Fatal编程技术网

Vim 如何跨代码行重复某个操作?

Vim 如何跨代码行重复某个操作?,vim,Vim,我需要在代码库中的几行代码中重复某个操作。比如说, x = y; 需要替换为 EQUATE(x,y); 但是,每个实例都需要手动评估,因为只有当x和y被声明为unit16\t时,才需要进行评估。因此,我寻求的功能是能够浏览各种感兴趣的文件,并且每当我遇到需要运行上述操作的行时,我应该能够只按特定的键序列,用所需的更改替换给定的代码行。比如说,如果我在其他地方遇到一条线,看起来像下面这样 struct_x.var_x = struct_y.var_y; 我应该可以把它换成 EQUATE(st

我需要在代码库中的几行代码中重复某个操作。比如说,

x = y;
需要替换为

EQUATE(x,y);
但是,每个实例都需要手动评估,因为只有当x和y被声明为unit16\t时,才需要进行评估。因此,我寻求的功能是能够浏览各种感兴趣的文件,并且每当我遇到需要运行上述操作的行时,我应该能够只按特定的键序列,用所需的更改替换给定的代码行。比如说,如果我在其他地方遇到一条线,看起来像下面这样

struct_x.var_x = struct_y.var_y;
我应该可以把它换成

EQUATE(struct_x.var_x, struct_y.var_y);

通过一组简单的击键。

这就是我使用宏执行此操作的方式:

使用qa:q开始录制宏以开始录制,然后保存在寄存器a中。 移动到行的开头:^ 输入插入模式i并键入Equale。 然后在命令模式下搜索并替换操作::.s/\=\/,/g-search for=并将其替换为,在此行。 使用$移动到行的末尾,再次进入插入模式并关闭括号。 停止录制宏-q
就这样!在需要使用宏的其他地方用@a重放宏。

为什么不使用宏?这很好,刚刚学会了如何使用宏-我对vim很陌生。它完成了任务。您可以将^i到i和$a到a合并。您不需要指定。-当前行是:s中的默认范围。您也不需要转义空格::s/=/,/g工作正常。