anchor.diff:                 (apply-visual-range (lambda (start end)
                                        (unless (point< start end)
                                          (rotatef start end))
  -                                     (write-line (points-to-string start end) out)
  +                                     (write-string (points-to-string start end) out)
                                        (delete-between-points start end))))
                (unless (continue-flag :kill)
                  (kill-ring-new))
  
positive.code: 
  (define-command vi-forward-word-end (&optional (n 1)) ("p")
    (vi-forward-word-begin n)
    (unless *vi-delete-recursive*
      (vi-backward-char)))
  
  (define-command vi-forward-word-end-broad (&optional (n 1)) ("p")
  
negative.code:                (apply-visual-range (lambda (start end)
                                       (unless (point< start end)
                                         (rotatef start end))
                                       (write-string (points-to-string start end) out))))
               (unless (continue-flag :kill)
                 (kill-ring-new))
               (kill-push (get-output-stream-string out))
               (unless (visual-line-p)
                 (kill-append "" nil '(:vi-nolf))))
             (vi-visual-end))
            (t
             (let ((command (lookup-keybind (read-key))))
  