我正在尝试将VIM中的所有多个“-”字符(从行首开始)替换为“=”p.e.将“-----”替换为“=====”或将“---------”替换为“==========”我创建了这个正则表达式:
%s/^-\{2,}/= ????/g
有人知道我如何复制“=”替换吗?(我必须在“=”后面加上什么?)
dl5txlt91#
试试看:
:%s/^-\{2,}/\=substitute(submatch(0), '-','=','g')/
或:
:%s/^-\{2,}/\=repeat('=',len(submatch(0)))/
有关详细信息,请参阅:help sub-replace-\=。
:help sub-replace-\=
jgwigjjp2#
我肯定有更好的答案,但实际上,为了简单起见,我会将其作为两个单独的操作:
%s/--/==/g %s/=-/==/g
首先替换所有的重复出现,这将把-----变成====-。然后用第二个来修复剩余的(=-)。如果可能的话,我希望看到更优雅的答案。
-----
====-
=-
tjrkku2a3#
从技术上讲,%s/-/=/g完成了这项工作,但在整个文件上,在每个-中。如果要替换的行确实以-开头,我会这样做:
%s/-/=/g
-
g/^-/s/-/=/g
或者,如果在第一个-之前有一些空间:
g/^\s*-/s/-/=/g
剩下的问题是这样的:
----------- the-composite-word
它们变成:
=========== the=composite=word
要解决这个问题,有很多方法。我不认为大师建议一个非常通用的方法,但这可能适用于单词之间的破折号:
g/^-/s/\w\@<!-/g
3条答案
按热度按时间dl5txlt91#
试试看:
或:
有关详细信息,请参阅
:help sub-replace-\=
。jgwigjjp2#
我肯定有更好的答案,但实际上,为了简单起见,我会将其作为两个单独的操作:
首先替换所有的重复出现,这将把
-----
变成====-
。然后用第二个来修复剩余的(=-
)。如果可能的话,我希望看到更优雅的答案。tjrkku2a3#
从技术上讲,
%s/-/=/g
完成了这项工作,但在整个文件上,在每个-
中。如果要替换的行确实以
-
开头,我会这样做:或者,如果在第一个
-
之前有一些空间:剩下的问题是这样的:
它们变成:
要解决这个问题,有很多方法。我不认为大师建议一个非常通用的方法,但这可能适用于单词之间的破折号: