>编辑:我刚刚在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
等来识别的,而不是1
、2
等。
因此,使用它有效:
:%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 行具有不同的模式。