ファイル内のデータをソートするショートカットをvimrcに設定

以前に小ネタ的に書いたこれ、我ながらなかなか役に立っています。

calendar.vimを出すショートカットをvimrcに設定 - the code to rock

記事にしてから1週間ちょっとですが、けっこう何度も使ってます。

しかし、というかそれ以上に、似たような感じで設定&有効だったのが掲題の件で、具体的には以下のようなのをvimrcに設定しています。

nnoremap <Space>s  :sort<CR>

気づいたのはこの頃ですが、

Qiitaさんとそこへ投稿されてる皆さん、本当にありがとうございます・・
VIMで選択行をソートする - Qiita

ようは、複数行の同タイプの文章をソートしたいとき、たとえば以下のようなログとか・・

2014/06/23 12:56	foo
2012/05/27 11:02	bar
2013/10/19 17:10	baz
2015/03/22 09:20	qux
2014/06/03 13:40	quux

これを日付の古い順にしたい、という場合、今までだとこういうときは、一旦新規のExcelを開いて、そこにペーストして、コマンド+シフト+rで「並べ替え」機能のウィンドウを出して(ショートカット使わない場合は最上部のメニューから「ツール>並べ替え」だと思う)、そこでなんかやってました。

が、上記のリンク先(Qiita)にあるとおり、コマンドラインモードで「:sort」を打ち込むと、

2012/05/27 11:02	bar
2013/10/19 17:10	baz
2014/06/03 13:40	quux
2014/06/23 12:56	foo
2015/03/22 09:20	qux

てな感じに一瞬でなります。

しかも、これ別に行頭だけでソートしてるわけじゃなくて、たとえばこういうデータなら

2014/06/03 13:40	quux
2014/06/03 13:40	foobar

こんな風に

2014/06/03 13:40	foobar
2014/06/03 13:40	quux

異なる部分で判断してソートしてくれますので、そこも大変ありがたいです。(普通?普通ですかね?)

ただしちなみに、上記ではわざわざ、1ケタの数字も「06」とかにしているので問題ないですが、こんな感じのデータだと・・(実験用に年数はすべて揃えています)

2014/6/23 12:56	foo
2014/05/27 11:02	bar
2014/10/19 17:10	baz
2014/3/22 09:20	qux
2014/06/03 13:40	quux

こんな風に

2014/05/27 11:02	bar
2014/06/03 13:40	quux
2014/10/19 17:10	baz
2014/3/22 09:20	qux
2014/6/23 12:56	foo

ある意味期待通りですが、「10月」の方が「3月」とか「6月」より上になります。数値としてではなく文字として判断してる、てことでしょうかね? それともたんに行頭から順に読んでるだけか?

ま、ともあれ、このコマンドを利用して、vimrcに冒頭のようなことを書いておきますと、「あ〜、これソートしたいな〜」という時に(他の人にどれだけそんな機会があるのかは知りませんが)、そのファイル上で「Space」と「s」を順番にパパッと押したらチャチャッとソートされます。これはかなり気持ちいい&速くてよいです。

まあもちろん、「:sort」なんて大したあれでもないので、そのつど打ち込んでもいいんですが、僕はけっこうこれやるので、だいぶ違いがありますね。
なんと言っても、これでもう「ソートしたいたびにExcelを開く」必要がなくなるわけですから・・(どんだけソートしたいのか)

ちなみにというか、逆順でソート(:sort!)とか、重複行を削除とか、正規表現を使うとかも含めて上記のQiita記事では紹介されているのでよろしければどうぞ。

ああ、あとさらにちなみに、そちらの記事では、そもそものタイトルにもあるとおり、「選択した行をソートする」方法としてそれが紹介されているので、もしかしたら、というか普通はそういう使い方の方がよいかもしれないですね。
その場合はシフト+vで複数行を選択して、コマンドラインモードで「:sort」とかすればOKです。

僕の場合はコマンド+コントロール+qとかでいつも下書き用の白紙エディタが出てくるような作業フローがあるので、そこにデータをパッとコピペして「Space, s」やってソートされたのを目的の場所にカット&ペースト、みたいなことが多いです。

Vim マジ便利ですね〜。