繁体   English   中英

在vim中如何执行命令直到文件结束?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM