Vim正则表达式替换问题

4c8rllxm  于 2022-11-11  发布在  其他
关注(0)|答案(3)|浏览(196)

我正在尝试将VIM中的所有多个“-”字符(从行首开始)替换为“=”
p.e.将“-----”替换为“=====”
或将“---------”替换为“==========”
我创建了这个正则表达式:

%s/^-\{2,}/=  ????/g

有人知道我如何复制“=”替换吗?(我必须在“=”后面加上什么?)

dl5txlt9

dl5txlt91#

试试看:

:%s/^-\{2,}/\=substitute(submatch(0), '-','=','g')/

或:

:%s/^-\{2,}/\=repeat('=',len(submatch(0)))/

有关详细信息,请参阅:help sub-replace-\=

jgwigjjp

jgwigjjp2#

我肯定有更好的答案,但实际上,为了简单起见,我会将其作为两个单独的操作:

%s/--/==/g
%s/=-/==/g

首先替换所有的重复出现,这将把-----变成====-。然后用第二个来修复剩余的(=-)。如果可能的话,我希望看到更优雅的答案。

tjrkku2a

tjrkku2a3#

从技术上讲,%s/-/=/g完成了这项工作,但在整个文件上,在每个-中。
如果要替换的行确实以-开头,我会这样做:

g/^-/s/-/=/g

或者,如果在第一个-之前有一些空间:

g/^\s*-/s/-/=/g

剩下的问题是这样的:

----------- the-composite-word

它们变成:

=========== the=composite=word

要解决这个问题,有很多方法。我不认为大师建议一个非常通用的方法,但这可能适用于单词之间的破折号:

g/^-/s/\w\@<!-/g

相关问题