useやusingなどの宣言を綺麗にソートする(Emacs編)


2010年 12月 21日

Emacsでも同じ事ができます。

まずはaprpopse-commandanything-aproposeでソートコマンドを探してみましょう。
M-x anything-aproposeに続けてsort-を入力するとそれっぽいコマンドが列挙されます。

sort-pages
sort-columns
sort-paragraphs
sort-fields
sort-regexp-fields
sort-numeric-fields
sort-lines

sort-regexp-fieldsが利用できそうです。
そのままsort-regexp-fieldsを選択するとコマンドの説明が表示されます。

sort-regexp-fields is an interactive compiled Lisp function in
`sort.el'.

(sort-regexp-fields REVERSE RECORD-REGEXP KEY-REGEXP BEG END)

ふむ。。。なにやらよくわかりませんね。。。(汗
Googleでいろいろ検索してみると、引数は次のような意味のようです。

  • RECORD-REGEXP = ソート対象の行を指定するための正規表現
  • KEY-REGEXP = ソート対象の文字列を指定するための正規表現

とするとuseやusingをソートするコマンドは次のように定義できそうです。ソート対象の文字列から;を除くのが肝ですね。

(sort-regexp-fields nil "^.+$" "[^;]+" beg end)

使いやすくするために関数化します。

(defun my-sort-declarations (beg end)
  (interactive (list (region-beginning) (region-end)))
  (sort-regexp-fields nil "^.+$" "[^;]+" beg end))

さて、昨日のコードに登場してもらいましょう。

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Linq;

リージョンを選択して、M-x my-sort-declarationsを実行してみましょう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

意図したようにソートできましたね。