emacsの矩形選択モード紹介

ようやく風邪が治りました。nagata(@handlename)です。

みなさん、矩形選択モードというものをご存知でしょうか? 矩形というのは長方形のことです。 矩形選択というのはつまり、領域を四角形に選択することを指します。

通常選択

emacs-rectangle-normal.png

矩形選択

emacs-rectangle-rectangle.png

通常テキストエディタは行毎に処理を行いますが、 矩形選択を活用すると行をまたいだ操作を行うことができます。

今回はemacsの矩形選択モードを3種類ほど紹介してみたいと思います。

標準の矩形選択

emacsに最初から用意されている関数です。 それぞれの関数にはそれぞれキーバインドが設定されています。

コマンド呼ばれる関数動作
C-x r cclear-rectangle矩形領域を空白文字に置き換える
C-x r ddelete-rectangle矩形領域を削除する
C-x r oopen-rectangle空白文字で埋まった矩形領域を挿入する
C-x r tstring-rectangle矩形領域を文字列で置き換える
C-x r kkill-rectangle矩形領域を削除してキルリングに追加
C-x r yyank-rectangleキルリングの矩形領域を貼り付ける
C-x r rcopy-rectangle-to-registerレジスターに矩形領域を登録する
C-x r iinsert-registerレジスターに登録された矩形領域を貼り付ける

なにも設定する必要なく使うことができるのでお手軽ですが、 どの部分が選択されるかが若干わかりにくく、 通常のリージョン操作方法と異なるので覚えにくいという欠点があります。

sense-region

従来のリージョン選択と同じ操作方法なので、自然に使えます。

;; (install-elisp "http://taiyaki.org/elisp/sense-region/src/sense-region.el")
(require 'sense-region)
(sense-region-on)

リージョン選択中に、もう一度 C-<space> すると矩形選択モードに、 その状態で C-w なり M-w なりすれば矩形領域をコピー&切り取りができます。

貼り付けるときには、

  • すでにある文字列を押しのけて挿入するか
  • 単純に挿入するか

を選択できます。たとえば、このような状態で矩形貼り付けを行った場合、

emacs-rectangle-before-insert.png

すでにある文字列を押しのけて挿入する場合はこんな感じに。

emacs-rectangle-without-newline.png

そのまま挿入する場合はこんな感じになります。

emacs-rectangle-with-newline.png

通常のリージョン操作と違和感なく使えるのでおすすめです。

cua-mode

矩形領域の前後にリアルタイムで文字列の挿入ができたり、 連番で置き換えたりできます。

(cua-mode t)
(setq cua-enable-cua-keys nil) ; そのままだと C-x が切り取りになってしまったりするので無効化

リージョン選択中に C-<enter> で矩形選択モードになります。 sense-regionと同様に C-wM-w が使えます。 また、矩形選択中に次のコマンドを打つと、矩形領域に対して操作を行うことができます。

コマンド動作
適当なキー矩形領域の前(または後ろ)にそのまま挿入。 <enter> で挿入位置を変えられる
M-p矩形の幅を固定
M-b空白文字で埋める。 open-rectangle と同等
M-s文字列で置き換える。 string-rectangle と同等
M-f1種類の文字で埋める。 string-rectangle で1文字指定したときと同等
M-i矩形領域内の数字をインクリメントする
M-n矩形領域を連番で埋める。フォーマット指定可

参考: Emacs Column Editing on Vimeo

連番挿入が便利なので、いつもはこれを使ってます。

おわり

うまく使うと作業効率アップに絶大な効果がある矩形選択、是非お試しあれ〜。

カヤックでは隠れた機能を使いこなす技術者も募集しています!