     ranges.filter (range) =>
       not isLeadingWhiteSpaceRange(@editor, range)
 
-  isMultipleAndAllRangeHaveSameColumnRanges: (ranges) ->
+  # [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, end} = ranges[0]
-    startColumn = start.column
-    endColumn = end.column
+    {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)

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

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

      ranges.length > 1 and ranges.every(isSingleLineRange)

    if newRanges.length > 0
      return if @isMultipleAndAllRangeHaveSameColumnAndConsecutiveRows(newRanges)
      newRanges = newRanges.map (range) => humanizeBufferRange(@editor, range)
      newRanges = @filterNonLeadingWhiteSpaceRange(newRanges)

