Emacsでリファクタリングに超絶便利なmark-multiple (複数行同時編集)

まずはこちらの動画をどうぞ。(特に24〜29秒辺り)

  • テキストを選択
  • 同時に変更したい箇所を追加
  • テキストを編集すると・・
  • 選択した箇所も一緒に書き換えてくれる!!

が出来るようになります。変数名の一括変換に便利です。

インストール

MELPAに登録されているので package.el を使います。

M-x package-list-packages

を実行後・・

mark-multiple

を選択

package.el のインストール方法はコチラをどうぞ。

.emacs.d/init.el

基本はデフォルト設定のままですが、rename-sgml-tagをhtml-modeで使えるようにしています。
sgml-modeを使っている人はデフォルト設定を使うといいです。

;; mark-multiple
(require 'inline-string-rectangle)
(global-set-key (kbd "C-x r t") 'inline-string-rectangle)

(require 'mark-more-like-this)
(global-set-key (kbd "C-<") 'mark-previous-like-this)
(global-set-key (kbd "C->") 'mark-next-like-this)
;; (global-set-key (kbd "C-M-m") 'mark-more-like-this) ; like the other two, but takes an argument (negative is previous)
(global-set-key (kbd "C-*") 'mark-all-like-this)

;; (add-hook 'sgml-mode-hook
;;           (lambda ()
;;             (require 'rename-sgml-tag)
;;             (define-key sgml-mode-map (kbd "C-c C-r") 'rename-sgml-tag)))
(add-hook 'html-mode-hook
          (lambda ()
            (require 'rename-sgml-tag)
            (define-key html-mode-map (kbd "C-c C-r") 'rename-sgml-tag)))

キーバインド

C-<
選択範囲にマッチする次の部分をマーク
C->
選択範囲にマッチする前の部分をマーク
C-*
選択範囲にマッチする全ての箇所をマーク

おまけ、選択範囲をインタラクティブに広げる expand-region

動画だとC-@ キーで選択範囲を作成していますが、これは expand-region というelispで実現されています。興味がある人は以下のリンクからどうぞ。

Emacsで選択範囲をインタラクティブに広げる expand-region - Qiita

おわりに

この記事はEmacs Advent Calendar 2012の5日目でした。
まだまだ募集中のようですので、是非参加を!!