読者です 読者をやめる 読者になる 読者になる

Vimっぽい設定('o', 'O', 'f', 'F')

emacs

Vimの 'o'('O')とか 'f'('F')って使いたいことが多いので、
Emacs Lispで実装してみた。

;; 'o' 次の行に挿入
(defun edit-next-line ()
  (interactive)
  (end-of-line)
  (newline-and-indent))

;; 'O' 前の行に挿入
(defun edit-previous-line ()
  (interactive)
  (forward-line -1)
  (if (not (= (current-line) 1))
      (end-of-line))
  (newline-and-indent))

(global-set-key (kbd "M-o") 'edit-next-line)
(global-set-key (kbd "M-O") 'edit-previous-line)

;; 'f' 後方の入力した文字の上に移動
(defun forward-match-char (n)
  (interactive "p")
  (let ((c (read-char)))
    (dotimes (i n)
      (forward-char)
      (skip-chars-forward (format "^%s" (char-to-string c))))))

;; 'F' 前方の入力した文字の上に移動
(defun backward-match-char (n)
  (interactive "p")
  (let ((c (read-char)))
    (dotimes (i n)
      (skip-chars-backward (format "^%s" (char-to-string c)))
      (backward-char))))

(global-set-key (kbd "M-l") 'forward-match-char)
(global-set-key (kbd "M-L") 'backward-match-char)

'Alt + キー'ではなく、Escを前に押すとより Vimっぽい感じで使えます。
M-fはさすがに同じにできないですので、違うキーにしました。

余談

こんなことが 1キーストロークできたら便利だなってことで、
いろいろ考えては割り当てていましたが、結局慣れなくて使わないのが
大半です。なんでひとつ思いついたら次々に新しいことを考えずにそれを
じっくり使ってみようかと思います。