diff --git a/lib/ace/search.js b/lib/ace/search.js index 48cd88fb..325ce00f 100644 --- a/lib/ace/search.js +++ b/lib/ace/search.js @@ -143,20 +143,27 @@ var Search = function() { if (options.$isMultiLine) { var len = re.length; var maxRow = lines.length - len; - for (var row = re.offset || 0; row <= maxRow; row++) { + var prevRange; + outer: for (var row = re.offset || 0; row <= maxRow; row++) { for (var j = 0; j < len; j++) if (lines[row + j].search(re[j]) == -1) - break; + continue outer; var startLine = lines[row]; var line = lines[row + len - 1]; - var startIndex = startLine.match(re[0])[0].length; + var startIndex = startLine.length - startLine.match(re[0])[0].length; var endIndex = line.match(re[len - 1])[0].length; - - ranges.push(new Range( - row, startLine.length - startIndex, - row + len - 1, endIndex + + if (prevRange && prevRange.end.row === row && + prevRange.end.column > startIndex + ) { + continue; + } + ranges.push(prevRange = new Range( + row, startIndex, row + len - 1, endIndex )); + if (len > 2) + row = row + len - 2; } } else { for (var i = 0; i < lines.length; i++) {