diff --git a/spec/atom/command-interpreter-spec.coffee b/spec/atom/command-interpreter-spec.coffee index 938badc8c..2311be2df 100644 --- a/spec/atom/command-interpreter-spec.coffee +++ b/spec/atom/command-interpreter-spec.coffee @@ -78,6 +78,14 @@ describe "CommandInterpreter", -> expect(editor.getSelections().length).toBe 1 expect(editor.getSelection().getBufferRange()).toEqual [[6,16], [6,21]] + it "wraps around to the beginning of the buffer, but doesn't infinitely loop if no matches are found", -> + editor.setSelectionBufferRange([[10, 0], [10,3]]) + interpreter.eval(editor, '/pivot') + expect(editor.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] + + interpreter.eval(editor, '/mike tyson') + expect(editor.getSelection().getBufferRange()).toEqual [[3,8], [3,13]] + describe "address range", -> describe "when two addresses are specified", -> it "selects from the begining of the left address to the end of the right address", -> diff --git a/src/atom/command-interpreter/regex-address.coffee b/src/atom/command-interpreter/regex-address.coffee index 441a7893a..613e53618 100644 --- a/src/atom/command-interpreter/regex-address.coffee +++ b/src/atom/command-interpreter/regex-address.coffee @@ -12,10 +12,17 @@ class RegexAddress extends Address selectedRange = editor.getLastSelectionInBuffer().getBufferRange() rangeToSearch = new Range(selectedRange.end, editor.getEofPosition()) - rangeToReturn = selectedRange + rangeToReturn = null editor.buffer.traverseRegexMatchesInRange @regex, rangeToSearch, (match, range) -> rangeToReturn = range - rangeToReturn + if rangeToReturn + rangeToReturn + else + rangeToSearch = new Range([0, 0], rangeToSearch.start) + editor.buffer.traverseRegexMatchesInRange @regex, rangeToSearch, (match, range) -> + rangeToReturn = range + + rangeToReturn or selectedRange isRelative: -> true