       ranges.length > 1 and ranges.every(isSingleLineRange)
 
     if newRanges.length > 0
-      return if @isMultipleAndAllRangeHaveSameColumnRanges(newRanges)
+      return if @isMultipleAndAllRangeHaveSameColumnAndConsecutiveRows(newRanges)
       newRanges = newRanges.map (range) => humanizeBufferRange(@editor, range)
       newRanges = @filterNonLeadingWhiteSpaceRange(newRanges)
 

      else
        @flash(newRanges, type: 'undo-redo')
    else
      return if @isMultipleAndAllRangeHaveSameColumnRanges(oldRanges)

      if isMultipleSingleLineRanges(oldRanges)
        oldRanges = @filterNonLeadingWhiteSpaceRange(oldRanges)

    ranges.filter (range) =>
      not isLeadingWhiteSpaceRange(@editor, range)

  # [TODO] Improve further by checking oldText, newText?
  # [Purpose of this is function]
  # Suppress flash when undo/redoing toggle-comment while flashing undo/redo of occurrence operation.
  # This huristic approach never be perfect.
  # Ultimately cannnot distinguish occurrence operation.
  isMultipleAndAllRangeHaveSameColumnAndConsecutiveRows: (ranges) ->
    return false if ranges.length <= 1

    {start: {column: startColumn}, end: {column: endColumn}} = ranges[0]
    previousRow = null
    for range in ranges
      {start, end} = range
      unless ((start.column is startColumn) and (end.column is endColumn))
        return false

      if previousRow? and (previousRow + 1 isnt start.row)
        return false
      previousRow = start.row
    return true

    ranges.every ({start, end}) ->
      (start.column is startColumn) and (end.column is endColumn)
