Viper-mode on Emacs で折り返し表示時に次の表示行へ移動する。

Viper-mode on Emacs で折り返し表示時に次の表示行へ移動する方法です。
2段階の設定が必要です。
まず、Control+P or N でも折り返し行に対応できるように下記を設定に入れます。

(defun previous-window-line (n)
(interactive "p")
(let ((cur-col
(- (current-column)
(save-excursion (vertical-motion 0) (current-column)))))
(vertical-motion (- n))
(move-to-column (+ (current-column) cur-col))))
(defun next-window-line (n)
(interactive "p")
(let ((cur-col
(- (current-column)
(save-excursion (vertical-motion 0) (current-column)))))
(vertical-motion n)
(move-to-column (+ (current-column) cur-col))))
(global-set-key "\C-p" 'previous-window-line)
(global-set-key "\C-n" 'next-window-line)


つぎに、''j'' and ''l'' のキーを新しく指定し直します。

(define-key viper-vi-global-user-map "j" 'next-window-line)
(define-key viper-vi-global-user-map "k" 'previous-window-line)
B! LINE