我想计算替换中使用的替换字符串的长度。也就是:s/foo/bar
中的“bar”。假设我可以访问此命令字符串,我可以运行并撤消它,并可以将/
标记的部分与split()分开。如果替换字符串包含特殊字符(如\ 1,\ 2等)或〜?
例如,如果我有
:s/\v(foo)|(bars)/\2\rreplace/
替换长度为strlen(“bars \ rreplace”)= 12。
编辑:为了清楚起见,我希望使用它来将光标移动到受替换操作影响的文本之外。我也很欣赏其他解决方案。
答案 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()/