     @countPrefix = ""
 
   pasteClipboard: (direction) ->
-    @protectClipboard =>
-      @paste (text) =>
-        if text
-          lineOriented = text == Movement.lastLineSelection
-          if lineOriented
-            @runMovement "#{direction} lineboundary"
-            text = if direction == forward then "\n" + text else text + "\n"
-          DomUtils.simulateTextEntry @element, text
-          @runMovement "backward line" if lineOriented
+    @protectClipboard (text) =>
+      if text
+        # We use the heuristic that the paste is line oriented if the last character is a newline.  This is
+        # consistent with the way runMovement selects text in visual mode for "forward lineboundary".
+        lineOriented = /\n$/.test text
+        if lineOriented
+          @runMovement "#{direction} lineboundary"
+          @runMovement "#{direction} character" if direction == forward
+        DomUtils.simulateTextEntry @element, text
+        # Slow!  Expensive!  Better way?
+        @runMovement "backward character" for [0...text.length] if lineOriented
 
   openLine: (direction) ->
     @runMovement "#{direction} lineboundary"

      if @alterMethod == "move" and not locked
        locked = true
        @paste (text) =>
          result = func()
          @copy text
          locked = false
          result

              @keyQueue = ""
              @selection = window.getSelection()

              if @commands[keyChar]
                @commands[keyChar].call @
                @scrollIntoView()
