如何在vim中每6行后修改一行
我有一个包含以下行的文件:如何在vim中每6行后修改一行,vim,Vim,我有一个包含以下行的文件: aaa aaa aaa aaa aaa aaa bbb bbb bbb bbb bbb bbb ccc ccc ccc ccc ccc ccc ddd ddd ddd ddd ddd ddd 我想将其转换为: aaa;100; aaa aaa aaa aaa aaa bbb;100; bbb bbb bbb bbb bbb ccc;100; ccc ccc ccc ccc ccc ddd;100; ddd ddd ddd ddd ddd 在vim中,一个命令可以实
aaa
aaa
aaa
aaa
aaa
aaa
bbb
bbb
bbb
bbb
bbb
bbb
ccc
ccc
ccc
ccc
ccc
ccc
ddd
ddd
ddd
ddd
ddd
ddd
我想将其转换为:
aaa;100;
aaa
aaa
aaa
aaa
aaa
bbb;100;
bbb
bbb
bbb
bbb
bbb
ccc;100;
ccc
ccc
ccc
ccc
ccc
ddd;100;
ddd
ddd
ddd
ddd
ddd
在vim中,一个命令可以实现这一点吗 这取决于您所说的一个命令的含义,但您可以通过使用宏,不必为每个项目手动重复该命令: 将光标放在第一行上 开始录制名为z:qz的宏 在行尾输入插入模式: 输入所需的文本:;100; 退出插入模式: 跳下六行:6j 停止录制宏:q 按正确的次数重复宏多次:3@z 由于向下跳6行是宏的一部分,因此它将正确对齐并在文件中循环 这里的相关命令是q开始录制宏,q结束录制,和@播放录制
更多信息可以在不同的地方找到,例如vim wiki:,这取决于您所说的一个命令的含义,但是您可以通过使用宏对每个项目手动重复它: 将光标放在第一行上 开始录制名为z:qz的宏 在行尾输入插入模式: 输入所需的文本:;100; 退出插入模式: 跳下六行:6j 停止录制宏:q 按正确的次数重复宏多次:3@z 由于向下跳6行是宏的一部分,因此它将正确对齐并在文件中循环 这里的相关命令是q开始录制宏,q结束录制,和@播放录制
更多信息可以在不同的地方找到,比如vim wiki:如果在更改之前所有的行都是相同的,那么这是一个非常糟糕的vim解决方案:
/\v(.*)\n\zs\1@!
:%g//norm A;100;
传统上,在Vim中,您首先创建搜索,然后使用:%s//replace将上一次搜索替换为replace。一行是:
:%g/\v(.*)\n\zs\1@!/norm A;100;
我很抱歉。这就是多年使用Vim后发生的情况。这不漂亮
说明:
本质上,我们在下一行中查找不重复的行,并对其执行操作,在本例中,添加一些文本
:%g/对与%s相同语法的模式执行操作
\非常神奇。使Vim正则表达式中的所有特殊字符都特殊。
.*\n后跟换行符的任何文本。捕获文本。
\zs开始在这里突出显示匹配。这将把光标放在匹配后的下一行,我们将在那里执行操作。
\1上面的捕获组。*,因此使用相同文本的新行。。。
@! 但要否定它!因此,光标将转到上一行未复制的任何行。
/规范A;100; 从正常模式命令A开始;100; 它将在每一行上执行击键,就像在正常模式下一样。这里是常规Vim,只需添加一个文本。
如果在更换之前线路都是相同的,这是一个非常糟糕的Vim解决方案:
/\v(.*)\n\zs\1@!
:%g//norm A;100;
传统上,在Vim中,您首先创建搜索,然后使用:%s//replace将上一次搜索替换为replace。一行是:
:%g/\v(.*)\n\zs\1@!/norm A;100;
我很抱歉。这就是多年使用Vim后发生的情况。这不漂亮
说明:
本质上,我们在下一行中查找不重复的行,并对其执行操作,在本例中,添加一些文本
:%g/对与%s相同语法的模式执行操作
\非常神奇。使Vim正则表达式中的所有特殊字符都特殊。
.*\n后跟换行符的任何文本。捕获文本。
\zs开始在这里突出显示匹配。这将把光标放在匹配后的下一行,我们将在那里执行操作。
\1上面的捕获组。*,因此使用相同文本的新行。。。
@! 但要否定它!因此,光标将转到上一行未复制的任何行。
/规范A;100; 从正常模式命令A开始;100; 它将在每一行上执行击键,就像在正常模式下一样。这里是常规Vim,只需添加一个文本。
还有一个
:g/^/ if !((line('.')-1)%6)|s/$/;100;
崩溃
g/^/Global命令在每行上应用下一个表达式
如果行“”。-如果当前行的模数等于0,则为1%6
s/$/;100; 替换以结尾的行;100;
还有一个
:g/^/ if !((line('.')-1)%6)|s/$/;100;
崩溃
g/^/Global命令在每行上应用下一个表达式
如果行“”。-如果当前行的模数等于0,则为1%6
s/$/;100; 替换以结尾的行;100;
只需写一个简单的脚本…{…count+=6;}…只需写一个简单的脚本…{…count+=6;}…感谢您的if!行“.”-1%6,不知道全局命令可以这样做!谢谢你的邀请!行“.”-1%6,不知道全局命令可以这样做!