Skip to content

Instantly share code, notes, and snippets.

@ujihisa
Last active December 20, 2015 03:19
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ujihisa/6062963 to your computer and use it in GitHub Desktop.
Save ujihisa/6062963 to your computer and use it in GitHub Desktop.

Vim Advent Calendar 2012 ujihisa 16 (236日目)

Vim Advent Calendar 2012 の236日目の記事です。昨日の記事はsupermomongaさんで、明日の記事はmanga_osyoさんの予定です。

unite-locate

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

locate

一言で説明すると「すべてのディレクトリから一瞬で特定のファイルを名前で検索する」というものです。一瞬というのは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"という名前を含むファイルをすべて出力します。

unite-locate

Neobundleして:Unite locateするといきなり使えます。詳しくは:h unite-locateをご覧ください。

余談

unite-locateは以下のようなページでも紹介されています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment