From 4c4f8850efcc1637b5a640796ca6d03b882f81c8 Mon Sep 17 00:00:00 2001 From: xconverge Date: Wed, 8 Mar 2017 22:03:12 -0800 Subject: [PATCH] fixes #1373 --- src/cmd_line/commands/substitute.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/cmd_line/commands/substitute.ts b/src/cmd_line/commands/substitute.ts index 508f1fa1452..12dd91d800d 100644 --- a/src/cmd_line/commands/substitute.ts +++ b/src/cmd_line/commands/substitute.ts @@ -59,7 +59,7 @@ export class SubstituteCommand extends node.CommandBase { return this._arguments; } - getRegex(args: ISubstituteCommandArguments) { + getRegex(args: ISubstituteCommandArguments, modeHandler: ModeHandler) { let jsRegexFlags = ""; if (args.flags & SubstituteFlags.ReplaceAll) { @@ -70,6 +70,15 @@ export class SubstituteCommand extends node.CommandBase { jsRegexFlags += "i"; } + // If no pattern is entered, use previous search state + if (args.pattern === "") { + const prevSearchState = modeHandler.vimState.globalState.searchStatePrevious; + if (prevSearchState) { + const prevSearchString = prevSearchState[prevSearchState.length - 1].searchString; + args.pattern = prevSearchString; + } + } + return new RegExp(args.pattern, jsRegexFlags); } @@ -82,8 +91,8 @@ export class SubstituteCommand extends node.CommandBase { } } - async execute(): Promise { - const regex = this.getRegex(this._arguments); + async execute(modeHandler : ModeHandler): Promise { + const regex = this.getRegex(this._arguments, modeHandler); const selection = vscode.window.activeTextEditor.selection; const line = selection.start.isBefore(selection.end) ? selection.start.line : selection.end.line; @@ -110,7 +119,7 @@ export class SubstituteCommand extends node.CommandBase { // TODO: Global Setting. // TODO: There are differencies between Vim Regex and JS Regex. - let regex = this.getRegex(this._arguments); + let regex = this.getRegex(this._arguments, modeHandler); for (let currentLine = startLine.line; currentLine <= endLine.line && currentLine < TextEditor.getLineCount(); currentLine++) { await this.replaceTextAtLine(currentLine, regex); }