       for row in selection.getBufferRowRange()
         selection.selectLine(row)
 
-  # Private:
   selectCharacterwise: ->
+    if @editor.getLastSelection().isEmpty()
+      @editor.selectRight()
+      return
+
     for selection in @editor.getSelections()
       {originalRange} = selection.marker.getProperties()
       if originalRange

        selection.setBufferRange(originalRange)

  selectBlockwise: ->
    selections = @editor.getSelections()
    for selection in selections
      tail = selection.getTailBufferPosition()
      head = selection.getHeadBufferPosition()
      {start, end} = selection.getBufferRange()

      @activateNormalMode()
      return

    # [FIXME] comment out to evaluate necessity.
    # Since I can't understand why this is necessary.
    # unless @isVisualMode()
    #   @deactivateInsertMode()

    switch submode
      when 'linewise' then @selectLinewise()
      when 'characterwise' then @selectCharacterwise()
      when 'blockwise' then @selectBlockwise()
    @setMode('visual', submode)
    @updateStatusBar()

  selectLinewise: ->
    if @editor.getLastSelection().isEmpty()
      @editor.selectRight()
    # Keep original range as marker's property to restore column.
    for selection in @editor.getSelections()
      originalRange = selection.getBufferRange()
