【发布时间】:2017-02-09 22:50:33
【问题描述】:
这个命令
%s#^#/*
还有这个命令
%s#$#*/
当我一个接一个地单独执行它们时,在 ubuntu 14.04 上的 vi 编辑器中工作正常。
我需要的是在一行中执行它们
%s#^#/* <bar> %s#$#*/
我也试过 | 和 ; 和 CR 作为分隔符,总是得到 error 488 trailing character
【问题讨论】:
这个命令
%s#^#/*
还有这个命令
%s#$#*/
当我一个接一个地单独执行它们时,在 ubuntu 14.04 上的 vi 编辑器中工作正常。
我需要的是在一行中执行它们
%s#^#/* <bar> %s#$#*/
我也试过 | 和 ; 和 CR 作为分隔符,总是得到 error 488 trailing character
【问题讨论】:
在我的 vim 7.4 补丁 769 中,这非常有效。
:%s/foo/FOO/ | %s/bar/BAR/
您似乎在替换中省略了最后的分隔符。如果没有终止 # 字符,Vim 不知道替换字符串在哪里结束。当执行一个替换的常用命令时,如果找不到一个替换,vim 会将命令的结尾视为终止分隔符。
例如,如果您在命令的最后一次替换中省略终止符,它会起作用:
:%s/foo/FOO/ | %s#bar#BAR
最后是关于您的潜艇的快速提示。您可以使用一些基本的捕获组魔术在文本中换行。匹配整行并在替换中使用& 以重用匹配的文本:
:s#.*#/* & */
【讨论】:
:s/foo/f\/o/ | s/bar/b\/r/