将 x*(string) 形式的表达式替换为该字符串的 x 个副本
我有一些 3*(item1; item2; item3;) 形式的表达式,我想将它们替换为 item1;item2;item3;item1;item2;item3;item1;item2;item3; (即括号中的 3 个内容,不包括括号)
我可以编写一个正则表达式来提取相关部分,但我不确定如何做其他部分——我尝试了 submatch() 和eval() 但我还没有找到一种将字符串与其自身连接特定次数的方法:
:%s/\(\d+\)\*(\(\_[^)]\+\))/这里发生了什么......?
我曾希望像 \2{\1} 这样的东西可以工作,但这不会评估大括号中的数字。如果我以错误的方式处理这件事,那也没关系——我并不是特别热衷于这样做,这只是我所知道的,我只是想知道这在 Vim 中是否很容易实现。
谢谢如果有人可以帮忙!
I have some expressions of the form 3*(item1; item2; item3;), and I want to replace them with item1;item2;item3;item1;item2;item3;item1;item2;item3; (i.e. 3 lots of the thing in brackets, not including the brackets)
I can write a regex to extract the relevant parts, but I'm not sure how to do the other part -- I had a play around with submatch() and eval() but I've not found a way to concatenate a string to itself a specific number of times:
:%s/\(\d+\)\*(\(\_[^)]\+\))/what goes here...?
I had hoped something like \2{\1} would work, but that doesn't evaluate the number in braces. If I'm going about this the wrong way that's fine -- I'm not particularly tied to doing it this way, it's just what I sort of know, and I just wondered if it was easily possible in Vim.
Thanks if anyone can help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
无需自定义功能。您可以以相同的方式使用内置的
repeat()
。%s#\v(\d+)\*\((\_[^)]+)\)#\=repeat(submatch(2), submatch(1))#gc
更多信息这里的
:help Repeat()
和:help function-list
是内置函数的列表。No need for custom function. You can use the built-in
repeat()
the same way.%s#\v(\d+)\*\((\_[^)]+)\)#\=repeat(submatch(2), submatch(1))#gc
more info here
:help repeat()
and:help function-list
for a list of built-in functions.您可以定义一个函数来重复复制字符串...
(注意:如果 n 很大,则效率非常低;例如,创建列表并调用 join 很可能是更高效),然后使用
:s
的表达式求值功能 ...(注意:我的正则表达式和你的正则表达式之间有一些差异,这可能是原始问题中拼写错误的结果)。
You could define a function that makes a repeated copy of a string ...
(note: this is very inefficient if n is large; it may well be that, e.g., making a list and calling
join
is more efficient) and then use the expression-evaluating feature of:s
...(note: there are a couple of differences between my regexp and yours, which may be the results of typos in the original question).