Vim Advent Calendar 2012 の236日目の記事です。昨日の記事はsupermomongaさんで、明日の記事はmanga_osyoさんの予定です。
https://github.com/ujihisa/unite-locate
最終更新が2年前と、非常に古いuniteプラギンの一つです。著者は、てっきり全人類がunite-locateを毎日使っているものと思っていたのですが、先日友人と会話していたとき、「それunite-locateでできるよ」と指摘せざるをえないという事例がありました。その友人はunite-locateどころかlocateすら知らないという状態でした。悪いのはその友人ではなく、これを知らないという由々しき出来事をおこしてしまうVim業界、ひいては社会に問題があるということは間違いないでしょう。というわけで本記事はlocateコマンドとunite-locateプラギンについて紹介します。
余談ですが、最終更新が2年前という太古の昔なのにもかかわらず、いまだに修正なきまま動作しているように、unite.vimはかなり安定した、枯れたプラギンであることがわかります。
さらに余談です。unite.vim
にマージされ、主にag
を利用するために用いるunite-grep
というのがありますが、unite-locate
はそれよりも古くから存在していました。 https://twitter.com/tomohi_ro/status/10031757894098944
一言で説明すると「すべてのディレクトリから一瞬で特定のファイルを名前で検索する」というものです。一瞬というのは0.5秒未満という意味で、著者のマシンでは0.30~0.38秒といったところでした。
Gentoo Linuxではsys-apps/mlocate
というパッケージです。Gentoo Handbookに記述されているので、ほとんどすべての人がかなりの初期に導入しているものと思います。また、他のディストリビューション・OSでも標準で搭載されています。
http://en.wikipedia.org/wiki/Locate_(Unix)
mlocateは大きくわけて以下の2つのコンポーネントによって構成されています。
updatedb
locate
rootでupdatedb
を行うことによりlocate
が検索をするための対象とするインデックスを作成します。通常これには比較的長い時間を要します。といっても毎回ディスクのすべてを対象として検索/インデックス作成をしているわけではなく、うまく差分だけを対象にしているようで、定期的にupdatedb
しているならば短時間で処理が完了するように感じれるはずです。
Gentoo Linuxをはじめ、Mac OS X以外のほとんどのシステムでは
$ sudo updatedb
でインデックス作成を行います。Mac OS Xでは
$ sudo /usr/sbin/locate.updatedb
とかだったような気がしてきました。
検索を行うには
$ locate ujihisa
などとします。これで"ujihisa"という名前を含むファイルをすべて出力します。
Neobundleして:Unite locate
するといきなり使えます。詳しくは:h unite-locate
をご覧ください。
unite-locateは以下のようなページでも紹介されています。
-
https://github.com/Shougo/unite.vim/wiki/unite-plugins
locateコマンドを用いてファイルを検索するsourceである。 locateコマンドがインストールされていない場合、動作しない。 作者はujihisa氏。
-
http://mba-hack.blogspot.ca/2013/03/unitevim.html
locate検索
-
http://d.hatena.ne.jp/choplin/20110719/1311012688
ほぼujihisaさんのunite-locateまま。