【问题标题】:Substitute in vim, with special characters在 vim 中替换,带有特殊字符
【发布时间】:2017-06-28 09:31:40
【问题描述】:

我正在尝试在 vim 中使用替换命令来包含特定模式的所有出现

\cite{author1}
\cite{author2}

(\cite{author1})
(\cite{author2})

基于堆栈交换中的其他答案我使用了以下vim命令

%s/\\cite{(\w\+)}/(\\cite{\1})/g

但是,没有运气。它说“找不到匹配项”。我放了两个反斜杠,其中一个应该是转义字符。请帮忙。

我知道我可以使用其他编辑器来完成这项工作,但我想知道我的错误。谢谢。

【问题讨论】:

    标签: vim substitution


    【解决方案1】:

    请转义()

    %s/\\cite{\(\w\+\)}/(\\cite{\1})/g
    

    【讨论】:

      【解决方案2】:

      您不需要捕获组来获取整个匹配项。您可以在替换的替换部分中使用\0& 来表示整个匹配。

      :%s/\\cite{\w\+}/(&)/g
      

      如果您确实想使用捕获组,则需要转义捕获组/括号。

      :%s/\(foo\)/(\1)/g
      

      如需更多帮助,请参阅:

      :h :s%
      :h /magic
      

      【讨论】:

        【解决方案3】:

        作为mentioned,通常需要对括号进行转义。

        您可以使用very magic mode (\v) 使正则表达式更简单;无需转义许多正则表达式部分,包括用于捕获的括号:

        %s/\v(\\cite\{\w+\})/(\1)/g
        

        【讨论】:

          【解决方案4】:

          了解正则表达式中的每个符号在 vim 中的作用有时非常重要 困难,特别是对于所有模式和配置变量,这 取决于。因此,获得视觉反馈非常重要 在制作常规时,我们在任何时候真正匹配的文本是什么 表达式。

          如果您使用 neovim,有一个名为 inccommand 的特殊选项,您可以 可以启用实时预览比赛和替换。这样你就可以想 更快地找出错误。此功能很可能也包含在 vim 未来,但除此之外,您还可以使用简单的 vim 来 如果您启用选项incsearch,则为您提供视觉反馈。

          设置incsearch,你可以观看 / 和 ? 的比赛。当你写它们的时候 只是为了确保模式是正确的。以后你可以利用一个不错的 替换功能:如果您将第一部分留空,则最后一部分 将使用搜索。

          所以你可以先进行搜索:

          /\\cite{\w\+}/(&)/g
          

          与此同时,vim 会直观地显示匹配的文本。一旦您 确定模式正确后按回车,最后输入:

          :%s//(\1)<Enter>
          

          另外,如果你想要比这个简单的 hack 更强大的东西,你可以去 对于我的插件Extend.vim,可以 通过出色的视觉反馈做到这一点以及更多。

          【讨论】:

            猜你喜欢
            • 2020-07-12
            • 2012-11-06
            • 2011-12-28
            • 1970-01-01
            • 2020-12-11
            • 2014-11-03
            • 1970-01-01
            相关资源
            最近更新 更多