anchor.diff:  
   (define-command vi-forward-char (&optional (n 1)) ("p")
     (let ((p (current-point)))
  -    (dotimes (_ n p)
  +    (dotimes (_ n)
         (if (eolp p)
             (return)
             (character-offset p 1)))))
   
   (define-command vi-backward-char (&optional (n 1)) ("p")
  -  (backward-char n))
  +  (let ((p (current-point)))
  +    (dotimes (_ n)
  +      (if (bolp p)
  +          (return)
  +          (character-offset p -1)))))
  +
  +(defun fall-within-line (point)
  +  (when (eolp point)
  +    (goto-eol point)))
   
   (define-command vi-next-line (&optional (n 1)) ("p")
  -  (next-line n))
  +  (next-line n)
  +  (fall-within-line (current-point)))
   
   (define-command vi-previous-line (&optional (n 1)) ("p")
  -  (previous-line n))
  +  (previous-line n)
  +  (fall-within-line (current-point)))
   
   (define-command vi-forward-word-begin (&optional (n 1)) ("p")
     (forward-word-begin (current-point) n nil))
  
positive.code:            :vi-delete-previous-char))
  (in-package :lem-vi-mode.commands)
  
  (defun eolp (point)
    (= (point-charpos point)
       (1- (length (line-string point)))))
  
  (define-command vi-move-to-beginning-of-line/universal-argument-0 () ()
    (if (mode-active-p (current-buffer) 'universal-argument)
  
negative.code:   (forward-word-end (current-point) n t))
  
  (define-command vi-move-to-beginning-of-line () ()
    (goto-bol (current-point)))
  
  (define-command vi-move-to-end-of-line () ()
    (goto-eol (current-point)))
  
  (define-command vi-back-to-indentation () ()
    (back-to-indentation-command))
  
  (define-command vi-delete-next-char (&optional (n 1)) ("p")
    (unless (empty-line (current-point))
      (delete-next-char n)
      (fall-within-line (current-point))))
  
  (define-command vi-delete-previous-char (&optional (n 1)) ("p")
    (unless (bolp (current-point))
      (delete-previous-char n)))
  