【问题标题】:Understanding behavior of backreferencing in vim了解 vim 中反向引用的行为
【发布时间】:2017-05-09 17:57:55
【问题描述】:

我有一个包含这个词的文件:

单词

当我执行这个命令时:

:s/\(\w\)\+/#\1#/

我得到了##,但据我所知\w 匹配一个字符。为什么我在反向引用它时没有得到它?

现在是这个命令

:s/\(\w\)\{1,}/#\1#/ 我得到了#d#。为什么是最后一个字符而不是第一个字符?

VIM - Vi 改进版 7.4 Ubuntu 16.04 LTS

【问题讨论】:

  • @rock321987 什么?你在哪个版本的 vim 上测试过?
  • 在 Ubuntu 15.10 上的 vim 7.4 版中,我肯定会得到与 Sabrina 相同的行为(它看起来像是一个错误或 vim 正则表达式引擎的众多“特性”之一......)
  • @DenysSéguret 见 here.. 它似乎工作
  • 它适用于我在 vim 7.4 (Windows 7) 上。
  • 与@DenysSéguret 不同,我无法在 Ubuntu 15.10 中重现它,但我可以在 16.04 中重现它(7.4,补丁 1-1689,额外补丁 8.0.0056)。绝对看起来像是 Ubuntu 16.04(软件包版本 2:7.4.1689-3ubuntu1.2)的构建中的一个错误。

标签: regex vim vi substitution


【解决方案1】:

我可以使用 Vim 7.4.1689(Ubuntu 16.04 LTS 附带)重现此问题,但不再使用 Vim 8.0.55。 :set re=1(即切换回旧的正则表达式引擎)也解决了这个问题。因此,这似乎是新的正则表达式引擎中的一个错误,同时已被修复。

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2021-12-15
    相关资源
    最近更新 更多