例えば abcdefghijklmnopqrstuwxyz という一行を狭い emacs で表示すると 以下のようになります。
abcdefghijklmnopq rstuwxyz |
この際、カーソルが a の位置にあったとすると、[↓]キーを押すと r で無く、次の行に飛んでいってしまいます。[↑]キーでも同様です。 これを a ならば r、f ならば x と直感的な動きをさせるよう改造する ためには .emacs なり何なりに以下のような行を追加します。
(global-set-key "\C-p" 'previous-window-line)
(global-set-key [up] 'previous-window-line)
(global-set-key "\C-n" 'next-window-line)
(global-set-key [down] 'next-window-line)
(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))))
|
さらにこう書くと、ファイルの末尾で[↓]キーを押した際、新たな行を追加せず そこで留まってくれる利点もあります。
なお、この二つの elisp 関数は 1993 年頃かな、 どっかから入手して、以降使使っているもので、作者や著作権は定かではありません。 まっ書いてても大丈夫でしょ。