Skip to content

Commit

Permalink
Merge pull request #3484 from pleshevskiy/patch-1
Browse files Browse the repository at this point in the history
Update command substitute
  • Loading branch information
nightwing committed Dec 25, 2017
2 parents d0a67f7 + 889f663 commit 3024dcd
Showing 1 changed file with 26 additions and 6 deletions.
32 changes: 26 additions & 6 deletions lib/ace/keyboard/vim.js
Original file line number Diff line number Diff line change
Expand Up @@ -4433,8 +4433,17 @@ dom.importCssString(".normal-mode .ace_cursor{\
onClose(prompt(shortText, ''));
}
}

function splitBySlash(argString) {
var slashes = findUnescapedSlashes(argString) || [];
return splitBySeparator(argString, '/');
}

function findUnescapedSlashes(argString) {
return findUnescapedSeparators(argString, '/');
}

function splitBySeparator(argString, separator) {
var slashes = findUnescapedSeparators(argString, separator) || [];
if (!slashes.length) return [];
var tokens = [];
// in case of strings like foo/bar
Expand All @@ -4446,12 +4455,15 @@ dom.importCssString(".normal-mode .ace_cursor{\
return tokens;
}

function findUnescapedSlashes(str) {
function findUnescapedSeparators(str, separator) {
if (!separator)
separator = '/';

var escapeNextChar = false;
var slashes = [];
for (var i = 0; i < str.length; i++) {
var c = str.charAt(i);
if (!escapeNextChar && c == '/') {
if (!escapeNextChar && c == separator) {
slashes.push(i);
}
escapeNextChar = !escapeNextChar && (c == '\\');
Expand Down Expand Up @@ -4869,7 +4881,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
} else {
result.line = this.parseLineSpec_(cm, inputStream);
if (result.line !== undefined && inputStream.eat(',')) {
result.lineEnd = this.parseLineSpec_(cm, inputStream);
result.lineEnd = this.parseLineSpec_(cm, inputStream, result.line);
}
}

Expand All @@ -4883,7 +4895,7 @@ dom.importCssString(".normal-mode .ace_cursor{\

return result;
},
parseLineSpec_: function(cm, inputStream) {
parseLineSpec_: function(cm, inputStream, prevLine) {
var numberMatch = inputStream.match(/^(\d+)/);
if (numberMatch) {
return parseInt(numberMatch[1], 10) - 1;
Expand All @@ -4899,6 +4911,14 @@ dom.importCssString(".normal-mode .ace_cursor{\
return mark.find().line;
}
throw new Error('Mark not set');
case '+':
if (prevLine) {
var match = inputStream.match(/^\d+/);
if (match) {
return prevLine + parseInt(match[0], 10);
}
}
throw new Error('Require prevLine');
default:
inputStream.backUp(1);
return undefined;
Expand Down Expand Up @@ -5268,7 +5288,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
'any other getSearchCursor implementation.');
}
var argString = params.argString;
var tokens = argString ? splitBySlash(argString) : [];
var tokens = argString ? splitBySeparator(argString, argString[0]) : [];
var regexPart, replacePart = '', trailing, flagsPart, count;
var confirm = false; // Whether to confirm each replace.
var global = false; // True to replace all instances on a line, false to replace only 1.
Expand Down

0 comments on commit 3024dcd

Please sign in to comment.