首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在vi中交换奇数行和偶数行?

如何在vi中交换奇数行和偶数行?
EN

Stack Overflow用户
提问于 2019-10-27 13:44:36
回答 4查看 256关注 0票数 2

假设我有这样的代码:

代码语言:javascript
复制
__device__ ​ float __cosf (float x);
//Calculate the fast approximate cosine of the input argument.
__device__ ​ float __exp10f (float x);
//Calculate the fast approximate base 10 exponential of the input argument.
__device__ ​ float __expf (float x);
//Calculate the fast approximate base e exponential of the input argument.
__device__ ​ float __fadd_rd (float x, float y);
//Add two floating point values in round-down mode.
__device__ ​ float __fadd_rn (float x, float y);
//Add two floating point values in round-to-nearest-even mode.
__device__ ​ float __fadd_ru (float x, float y);
//Add two floating point values in round-up mode.

我如何在vi中交换奇数行和偶数行?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-27 14:03:48

我的输出

代码语言:javascript
复制
//Calculate the fast approximate cosine of the input argument.
__device__  float __cosf (float x);

//Calculate the fast approximate base 10 exponential of the input argument.
__device__  float __exp10f (float x);

//Calculate the fast approximate base e exponential of the input argument.
__device__  float __expf (float x);

//Add two floating point values in round-down mode.
__device__  float __fadd_rd (float x, float y);

//Add two floating point values in round-to-nearest-even mode.
__device__  float __fadd_rn (float x, float y);

//Add two floating point values in round-up mode.
__device__  float __fadd_ru (float x, float y);

我用vi中的一个命令完成了它:

代码语言:javascript
复制
:%s/\(__device.*\n\)\(.*$\)/\2^M\1/g

不过有一个诡计。要输入^M,我按Ctrl,然后按enter键。

详细说明:

要替换vi命令中所有匹配的内容,基本上如下所示:

代码语言:javascript
复制
%s/something/other/g

可以使用任何符号,而不是斜杠。所以

代码语言:javascript
复制
%s,something,other,g 

做同样的事。

“某物”是我们所寻找的,而“其他”则是替代物。

在我的例子中,我寻找单词"__device“,后面跟着任何符号( .*代表”任何“),然后以换行符\n结尾。

我标记了我想要在\( \)中重用的搜索字符串的一部分。

美元代表“行的尽头”。

然后我用\2\1把它们按相反的顺序放回去。

要输入换行符,我按了Ctrl键,然后输入。

我希望这能解释。注意,我使用vim表示Vi改进。老式的简单VI可能缺乏一些特色。在大多数unixes中,在默认情况下,安装软件包"vim“将使其在不存在时可用。

编辑:实际上你可以省略美元符号。无论如何,.*只搜索行尾。但我认为我保留它的答案,因为有时regexp需要它,这是有用的知识。

票数 2
EN

Stack Overflow用户

发布于 2019-10-27 14:33:47

您可以定义一个可以交换2行的键::map <F2> ddp<Down>

似乎没有太多的线,所以点击几次'F2‘就会换行.

票数 3
EN

Stack Overflow用户

发布于 2019-10-27 14:44:36

这是一个快速的‘N’肮脏的诡计。在正常模式下,键入:

代码语言:javascript
复制
qaddpjq

…然后:

代码语言:javascript
复制
1000@a

第一行正在记录宏:qa开始记录宏"a",dd删除当前行并将其存储在默认缓冲区中,p将其放在当前行之后(以前是下一行),j跳到下一行,然后q再次停止宏记录。

之后,@a调用宏,1000重复它一千次,因为我们不能在这里使用基于运动的操作或视觉选择。

它在我的机器上工作,但您应该关心要交换的行数,这是处理后的最后两行的状态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58579964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档