[英]How can I execute a command until the end of the file in vim?
我有一些看起来像:
{
hey1
},
{
you2
},
{
hey3
},
{
you4
}
我想将其更改为: {hey1}, {you2}, {hey3}, {you4}
。
我知道我可以创建一个像qa 3Jj q
这样的宏,然后执行103@a
但是我正在寻找一种不需要我1)制作宏和2)知道行数的解决方案。 所以我在尝试类似: 3J . G.
3J . G.
但这不起作用。 我如何每3行执行3J命令直到文件结束?
您可以使用:global
命令在以{
开头的每一行上执行j!3
(从当前行开始,加入三行,没有多余的空格):
:g/^{/j!3
如果您尝试在每一行上执行相同的操作(忽略第一个字符),您将获得完全相同的结果(在示例文本上),因为:g
知道不要在不再存在的行上执行命令了:
:g/^/j!3
您可以使用以下命令加入这些行:
:%j!
Udpate:如果有任何可能的话,您可以使用以下命令在整个文件上运行该宏
:%normal @a
您可以编写一个显式循环,该循环在到达最后一行时停止:
:while line('.') < line('$') | exe 'normal! 3Jj' | endwhile
或者,您可以仅在没有更多行时依靠命令序列中止,然后创建足够长的序列:
:exe 'normal!' repeat('3Jj', 100)
好吧,如果您不反对制作宏,那么您仍然不需要知道行数。 您可以执行999999 @ a,并且无论如何它将停止在最后一行,因为转到下一行的'j'命令将出错并中止该命令的其余部分。 或者,您可以记录一个递归宏以执行相同的操作: http : //vim.wikia.com/wiki/Record_a_recursive_macro
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.