例えば 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 年頃かな、 どっかから入手して、以降使使っているもので、作者や著作権は定かではありません。 まっ書いてても大丈夫でしょ。