【问题标题】:VSCode Vim Search and Replace capture groupVSCode Vim 搜索和替换捕获组
【发布时间】:2020-01-24 20:02:32
【问题描述】:

编辑:我刚刚在 VS2019 的 VSVim 扩展中尝试了这个,它按预期工作。 我开始认为 VSCode 的 VSCodeVim 扩展不能正确处理捕获?

我正在尝试在我的打字稿文件中搜索尚未分配初始值的变量列表,并将其设置为= null

  private __requestor: Req;
  private __feedback: FeedbackObject;
  private __dueDate: Calendar = null;
  private __priority: number = NaN;
  private __bigTest = TestObject;

我正在使用以下命令: :%s/(: [a-zA-Z]+);/\1 = null;/g

我希望输出会在第 1、2 和 5 行粘贴 = null,但它会粘贴 \1

预期:

  private __requestor: Req = null;
  private __feedback: FeedbackObject = null;
  private __dueDate: Calendar = null;
  private __priority: number = NaN;
  private __bigTest: TestObject = null;

实际:

  private __requestor\1 = null;
  private __feedback\1 = null;
  private __dueDate: Calendar = null;
  private __priority: number = NaN;
  private __bigTest\1 = null;

我的正则表达式/搜索和替换命令有问题吗?它看起来类似于我见过的示例中使用捕获组的其他 S&R 命令,并且我没有看到任何“启用”捕获组的设置。

【问题讨论】:

    标签: vim visual-studio-code


    【解决方案1】:

    显然在 VSCodeVim 中,捕获组通过$1$2 等来识别,而不是\1\2 等...

    所以,使用这个有效:

    :%s/(: [a-zA-Z]+);/$1 = null;/g
    

    来源: https://github.com/VSCodeVim/Vim/issues/4502

    【讨论】:

      【解决方案2】:

      使用更多的正则表达式组:

      :%s/\v(__\w+)(:| \=) ([A-Z][a-zA-Z]+);/\1: \3 = null; 
      
       % ....................... whole file
       \v ...................... very magic (avoid some scapes)
       (__\w+)  ................ first group (matches __word)
       (:| \=)  ................ second group, followed by : or space plus =
       ([A-Z][a-zA-Z]+) ........ third group (matches CamelCaseWords) 
       ; ....................... followed by literal ;
      

      OBS:难以达到正确结果的原因是第 5 行具有不同的模式。

      【讨论】:

      • 谢谢,但这在 VSCodeVim 中不起作用。我在搜索他们的 Github 页面后发现了这一点,出于某种原因,他们使用 $1 而不是 \1 作为捕获组...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多