获取字符串的长度替换

时间:2014-05-29 18:11:42

标签: vim

我想计算替换中使用的替换字符串的长度。也就是:s/foo/bar中的“bar”。假设我可以访问此命令字符串,我可以运行并撤消它,并可以将/标记的部分与split()分开。如果替换字符串包含特殊字符(如\ 1,\ 2等)或〜?

,我将如何得到替换字符串的字符串长度?

例如,如果我有

:s/\v(foo)|(bars)/\2\rreplace/

替换长度为strlen(“bars \ rreplace”)= 12。

编辑:为了清楚起见,我希望使用它来将光标移动到受替换操作影响的文本之外。我也很欣赏其他解决方案。

1 个答案:

答案 0 :(得分:2)

您必须使用:help sub-replace-expression。在其中,您使用submatch(2)代替\2。如果表达式是自定义函数,则可以将副作用存储在变量中,并稍后访问:

function! Replace()
    let g:replaceLength = strlen(submatch(0))
    " Equivalent of \2\rreplace
    return submatch(2) . "\r" . 'replace'
endfunction

:s/\v(foo)|(bars)/\=Replace()/