【问题标题】:Execute two commands in one line in vi editorvi编辑器中一行执行两条命令
【发布时间】:2017-02-09 22:50:33
【问题描述】:

这个命令

%s#^#/*

还有这个命令

%s#$#*/

当我一个接一个地单独执行它们时,在 ubuntu 14.04 上的 vi 编辑器中工作正常。

我需要的是在一行中执行它们

%s#^#/* <bar> %s#$#*/

我也试过 |;CR 作为分隔符,总是得到 error 488 trailing character

【问题讨论】:

    标签: regex ubuntu vi


    【解决方案1】:

    在我的 vim 7.4 补丁 769 中,这非常有效。

    :%s/foo/FOO/ | %s/bar/BAR/
    

    您似乎在替换中省略了最后的分隔符。如果没有终止 # 字符,Vim 不知道替换字符串在哪里结束。当执行一个替换的常用命令时,如果找不到一个替换,vim 会将命令的结尾视为终止分隔符。

    例如,如果您在命令的最后一次替换中省略终止符,它会起作用:

    :%s/foo/FOO/ | %s#bar#BAR
    

    最后是关于您的潜艇的快速提示。您可以使用一些基本的捕获组魔术在文本中换行。匹配整行并在替换中使用&amp; 以重用匹配的文本:

    :s#.*#/* & */
    

    【讨论】:

    • 谢谢。你的快速提示正是我想要的。最终分隔符允许链接命令,但不允许将斜杠 / 作为插入。这个 :%s/foo/f/o/ | :%s/bar/b/r/ 和这个 :%s/foo/f/\/o/ | :%s/bar/b/\/r/ 导致同样的错误 488。如何正确转义斜线?
    • @user2661175:应该很好用。我认为您在最后一个子中有错字;一个额外的斜线。这对我有用::s/foo/f\/o/ | s/bar/b\/r/
    猜你喜欢
    • 2013-05-03
    • 2014-03-27
    • 2023-04-08
    • 2013-10-26
    • 2015-01-19
    • 2012-05-08
    • 2010-09-10
    • 2013-09-16
    • 2015-08-15
    相关资源
    最近更新 更多