如何在结果字符串中精确重复n个匹配的模式?
示例如果我有以下文本:
++ '[' -f /etc/bashrc ']' ++ . /etc/bashrc +++ '[' '[\u@\h \W]\$' ']' +++ '[' -z 'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' ']' +++ shopt -s checkwinsize +++ '[' '[\u@\h \W]\$' = '\s-\v\$' ']' +++ shopt -q login_shell +++ '[' 506 -gt 199 ']' ++++ id -gn
现在我想用3个空格替换每个”,但它只能在模式的开头发生.我会使用:< range> s / ^< pattern> :%s / / / g,但如果它在文本的其余部分中有一个”,我就会搞砸它.
问题:
如何匹配每个开头并重复结果字符串中找到的相同计数?
预期:
^ ++$ -> ^ $ ^ +++$-> ^ $ ^ +$ -> ^ $
谢谢
试试这个:
:%s/^+*/\=repeat(' ',strlen(submatch(0)))/
submatch(0)包含在行开头匹配的所有匹配,strlen对它们进行计数.因此,对于行开头的每个加号,使用repeat插入三个空格.
欲获得更多信息:
:help sub-replace-expression :help repeat() :help submatch() :help strlen()