       "V": -> new VisualLineMode extend @options, initialRange: @selection.getRangeAt(0).cloneRange()
       "y": ->
         # Special case: "yy" (the first from edit mode, and now the second).
-        @selectLine() if @options.yYanksLine and @keyPressCount == 1
+        @selectLexicalEntity "lineboundary" if @options.yYanksLine and @keyPressCount == 1
         @yank()
 
-    if @options.underEditMode
+    if @options.underEditMode and not @options.oneMovementOnly
       extend @commands,
         "c": -> @yank(); enterInsertMode()
+        "x": -> @yank deleteFromDocument: true
         "d": ->
           # Special case: "dd" (the first from edit mode, and now the second).
-          @selectLine() if @options.dYanksLine and @keyPressCount == 1
+          @selectLexicalEntity "lineboundary" if @options.dYanksLine and @keyPressCount == 1
           @yank deleteFromDocument: true
+
+    if @options.oneMovementOnly
+      extend @commands,
+        "a": ->
+          if @keyPressCount == 1
+            for entity in [ "word", "sentence", "paragraph" ]
+              do (entity) => @movements[entity.charAt 0] = -> @selectLexicalEntity entity
 
     unless @options.underEditMode
       @installFindMode()

    "G": "forward documentboundary"
    "g": "backward documentboundary"
    "w": -> @moveForwardWord()
    "Y": -> @selectLine()
    "o": -> @reverseSelection()

  constructor: (options) ->

        @selection[if @getDirection() == backward then "collapseToEnd" else "collapseToStart"]()
    @copy @yankedText if @yankedText

  # Select a lexical entity, such as a word, a line, or a sentence. The argument should be a movement target,
  # such as "word" or "lineboundary".
  selectLexicalEntity: (entity) ->
    for direction in [ backward, forward ]
      @reverseSelection()
      @runMovement [ direction, entity ]

  # Try to scroll the focus into view.
  scrollIntoView: ->
