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

multiple-cursors.elのキーバインドを少しだけ改善

emacs

先日のEmacs Advent Calender の5日目の記事
Emacsでリファクタリングに超絶便利なmark-multiple (複数行同時編集) - ブログのおんがえし
で大変素敵なmark-multiple.el (実際はmultiple-cursors.el下位互換)が紹介されていた.
multiple-cursors.elについて知りたい方は以下の動画を見るのが早いだろう.

本稿ではmultiple-cursors.elのキーバインドの設定例について少しだけ書く.

上記記事の中で,キーバインドの例として

(global-set-key (kbd "C->") 'mark-next-like-this)
(global-set-key (kbd "C-<") 'mark-previous-like-this)

などが紹介されていたが,このキーバインドは押しづらい気がしなくもない.
自分だけかもしれないが.
そこで@myuhe氏のsmartrepを使って連続入力をしやすくしたのが以下の設定例である.

(require 'multiple-cursors)
(require 'smartrep)
(declare-function smartrep-define-key "smartrep")
(global-set-key (kbd "C-M-c") 'mc/edit-lines)
(global-set-key (kbd "C-*")   'mc/mark-all-like-this)
(global-unset-key "\C-t")
(smartrep-define-key global-map "C-t"
  '(("C-p"      . 'mc/mark-previous-like-this)
    ("C-n"      . 'mc/mark-next-like-this)
    ("u" . mc/unmark-next-like-this)
    ("U" . mc/unmark-previous-like-this)
    ("s" . mc/skip-to-next-like-this)
    ("S" . mc/skip-to-previous-like-this)
    ("*"        . 'mc/mark-all-like-this)))

上記により,C-tの後にC-nC-pを続けて押せば同記事と同様の操作が可能である.

上記はあくまで設定例であり,気に入らない場合はご自由にカスタマイズされたし.

追記

以下のregion-bindings-modeを用いればsmartrepの設定は実は必要なかったりする。

region-bindings-modeの紹介 - 備忘録

追記2

multiple-cursors.elの作者自身も紹介しているように,multiple-cursors.elはexpand-region.elとの相性がよい.
以下のページの設定を試してみるのもよいだろう.

mc/mark-all-dwimの改良ネタ - 備忘録

追記3

smartrepのソースはここ.https://github.com/myuhe/smartrep.el

追記4

複数箇所同時編集という意味で,auto-highlight-symbol-modeというのも存在する.
詳細はemacsでカーソル位置のシンボルをハイライトする - brainstormが参考になる.

追記5

iedit-modeというものも,複数箇所同時編集可能である.
詳細は
複数箇所を同時に編集可能にする iedit の紹介 - 備忘録
を参考に.
ソースはvictorhge/iedit · GitHubにある.