■ Emacs 全般で利用できる設定
【お知らせ】
<2018/08/10 追記>
mc/cycle-forward と mc/cycle-backward にキーを設定しました。
<2018/08/08 追記>
カーソルの位置を維持するために mc/cursor-specific-vars 変数から temporary-goal-column を削除する設定を追加しました。
次のコミットで追加された設定を解除しているものですが、この対応による影響は分かりません。
<2017/05/02 追記>
以前のバージョンより機能が縮小されましたが、正常に動作するように見直しました。
【本題】
multiple-cursors を違和感なく使うための設定です。次のページを参考としています。
上記の設定に次の改善をしてみました。
- リージョンを選択せずに multiple-cursors を使った場合に、cua-mode と同じような動きとなるキー設定とした。また、縦移動時にカーソル位置が維持されないのを改善した。
- 操作性をシンプルにするために previous でマーカーを上位に設定する機能は、全面的に不採用とした。
C-t で起動します。後は、リージョンを設定してもしなくとも、C-n、C-p、C-s を使えば、だいたいのことはできるようになっています。
入力した正規表現にマッチするリージョン内の部分をマークする機能も C-M-r に設定しています。利用してみてください。
(require 'multiple-cursors)
(require 'smartrep)
(declare-function smartrep-define-key "smartrep")
;; 入力した文字列にマッチするリージョン内の部分をマークする
(global-set-key (kbd "C-M-c") 'mc/mark-all-in-region)
;; 入力した正規表現にマッチするリージョン内の部分をマークする
(global-set-key (kbd "C-M-r") 'mc/mark-all-in-region-regexp)
(global-unset-key (kbd "C-t"))
(smartrep-define-key global-map "C-t"
'(("C-t" . 'mc/mark-next-like-this)
("C-n" . 'mc/mark-next-like-this)
("C-p" . 'mc/unmark-next-like-this)
("C-u" . 'mc/unmark-next-like-this)
("C-s" . 'mc/skip-to-next-like-this)
("C-*" . 'mc/mark-all-like-this)
("C-d" . 'mc/mark-all-like-this-dwim)
("C-i" . 'mc/insert-numbers)
("C-v" . 'mc/cycle-forward)
("M-v" . 'mc/cycle-backward)
("C-l" . 'recenter-top-bottom)
;; IM の切替えコマンドを指定する
("C-o" . 'toggle-input-method)))
;; IM の切替えコマンドを追加する
(add-to-list 'mc--default-cmds-to-run-once 'toggle-input-method)
;; カーソルの位置を維持するために mc/cursor-specific-vars 変数から
;; temporary-goal-column を削除する
(delq 'temporary-goal-column mc/cursor-specific-vars)
(defun mc/last-command-check ()
(memq last-command '(mc/mark-next-like-this
mc/unmark-next-like-this
mc/skip-to-next-like-this)))
;; 縦移動時にカーソル位置が維持されないのを対策する
(advice-add 'mc/mark-next-like-this
:around (lambda (orig-fun &rest args)
(if (mc/last-command-check)
(let ((last-command 'next-line))
(apply orig-fun args))
(apply orig-fun args))))
;; smartrepによるコマンド実行中はキー入力をエコーしない
;; http://shakenbu.org/yanagi/d/?date=20140105
(advice-add 'smartrep-map-internal
:around (lambda (orig-fun &rest args)
(let ((echo-keystrokes 0))
(apply orig-fun args))))
次のページの内容を追加設定するとさらに便利になります。
<変更履歴>
- 2014/05/21 このページを作成した。
- 2014/05/30 実装方法を見直した。(機能は同じ)
- 2014/07/31 NTEmacs で IM の切換えを行う場合、切替えが正しく機能しない場合があることの対策を行った。
- 2017/05/02 以前のバージョンより機能が縮小されたが、正常に動作するように見直した。
- 2018/08/08 カーソルの位置を維持するために mc/cursor-specific-vars 変数から temporary-goal-column を削除する設定を追加した。
最終更新:2019年11月01日 00:02