             void: true
           }
         })
+        screenColumn += eolInvisibleReplacement.length
 
       while @showIndentGuides and indentGuidesCount > 0 and not previousPositionWasFold
-        distanceToNextTabStop = @tabLength - (tokensScreenExtent % @tabLength)
+        distanceToNextTabStop = @tabLength - (screenColumn % @tabLength)
         tokens.push({
-          screenExtent: 0,
+          screenExtent: distanceToNextTabStop,
           bufferExtent: Point(0, 0),
           metadata: {
-            showIndentGuide: (tokensScreenExtent % @tabLength is 0),
+            showIndentGuide: (screenColumn % @tabLength is 0),
             void: true
           }
         })
+        screenColumn += distanceToNextTabStop
         indentGuidesCount--
 
       if tokens.length is 0


      if eolInvisibleReplacement = @eolInvisibles[@buffer.lineEndingForRow(bufferRow)]
        tokens.push({
          screenExtent: 0,
          bufferExtent: Point(0, 0),
          metadata: {
            eol: eolInvisibleReplacement,


  bufferDidChange: (change) ->
    {oldRange, newRange} = @expandChangeRegionToSurroundingEmptyLines(change.oldRange, change.newRange)
    {startScreenRow, endScreenRow, startBufferRow} = @expandBufferRangeToScreenLineBoundaries(oldRange)

    oldRowExtent = endScreenRow - startScreenRow
    newScreenLines = @buildScreenLines(startBufferRow, newRange.end.row + 1)
