VSCode Vim 搜索和替换捕获组



>编辑:我刚刚在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

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

预期:

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

实际:

private __requestor1 = null;
private __feedback1 = null;
private __dueDate: Calendar = null;
private __priority: number = NaN;
private __bigTest1 = null;

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

显然在VSCodeVim中,捕获组是用$1$2等来识别的,而不是12等。

因此,使用它有效:

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

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

使用更多正则表达式组:

:%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 行具有不同的模式。

最新更新