| @Mac/iPhone

仕事するときはWindowsでもLinuxでもVimを使っているので、最近ではVimが手足のようになっています。エレベーターに乗るときも j k を押そうとしてしまうほどです。しかしMacでコードを書くときはTextMateも使ってしまいます。TextMate Bundleが提供するスニペットや + R でスクリプトを走らせる機能とかやはり便利ですね。

しかしVimが手足のようになってる皆さんならお分かりいただけるかと思いますが、Vimmerは口より先に j k を連打してカーソルを動かそうとしますし、Ctrl + uCtrl + d による高速スクロール、Visualモードによる選択・一括編集、 #* を利用した検索なしのテキストエディティングなんて苦痛でしかないわけなんですね。

TextMateでVimのキーバインディングが使えないかなー、あるいはVimの中でTextMate Bundleが使えないかなー的なことを夢想していたら、それを実現しているテキストエディタがあったわけですよ。Vicoってやつでした。春頃チェックしてたんだけど、先日、「TextMate vim keybinding」みたいキーワードで検索していて改めてその存在を知ったので試用版をダウンロードして使ってみた次第です。まんまTextMate + Vimという感じ。

TextMateとの相違点としては、

  • Vimキーバインディング(Vimが使えない人には多分使いにくい)
  • デフォルトで日本語に対応!!!
  • デフォルトでサイドドロワーがついてる
  • ウィンドウ分割あり!!!

良くできてる点

  • TextMate Bundleが利用できる
  • GUIエディタとCLIエディタの長所をうまい具合に統合している。
  • TextMate同様、カスタムシェル変数を設定できる。
  • 従って + R でスクリプトを走らせるときに TM_RUBY という具合にシェル変数を設定しておくことで、RVMのRubyを実行時のインタープリタとして利用できる。

気になる点

  • テキストをインサートモード時にバックスペースで削除すると、削除するつもりのない文字を一文字余計に削除する
  • .vimrc を見て機能を拡張された状態のVimを使えるわけではなさそう
  • upコマンド(テキストが変更されていれば保存する機能)が使えない
  • なんとなく動作が不安定

このように気になる点がないわけでもないので、Vicoで書いていたこのテキストを途中でVimに切り替えて書いてしまっちゃった。Vimは .vimrc にごちゃごちゃ書いたりプラグインをインストールして始めて快適に使えるようになるので、キーバインディングだけviライクでもVimそのものの機能を提供してくれるわけではないVicoは、生粋のVimmerからするとちょっと使いにくいところがありますね。

それでも「j k 連打したい!」というVimmerの切実な欲求は満たしてくれますので、TextMate Bubdleは手放したくないというVimmerの皆様にはおかれましては導入をご検討いただければと思います。Mac App Storeで3540円ですが、以下から試用版がダウンロードできます。

| @技術/プログラミング

Amazonの検索結果画面で、個別商品URLへのリンクが target="_blank" 指定となっていてうざかったので target="_self" と置き換えるユーザースクリプトを書いた。

地味に便利。

Amazon target killer

| @音楽

なぜ自分がiTunes Storeであまり音楽を買わず、主にCDで音楽を買うのかを考えてみた。オールドタイプな人間なため物理的なメディアが欲しいのが理由かと思っていたけど、iTunesで買うときりがなくてどんどん買ってしまうから、どこかで線引きをするためになるべくCDで買おうとするのではないかと気がついた。iTunesにはいい音楽がたくさんあって、今聞いてるアルバムに似たアルバムまで推薦してくれる。しかしCDだと在庫がなかったり家のCDを置くスペースの制約があったりで好き放題買うことはできない。その結果散財を防ぐことができる。浪費家なりに自己防衛していたのだと思い至った。

| @Mac/iPhone

Magic Trackpad、Appleの新しい黒歴史入りプロダクトかと思っていましたが、Lionで使うとなかなかいいですね。

| @雑談

昨夜、吉野家の牛丼を食べた。狂牛病騒動があってからは怖くて吉野家とか松屋の牛丼はかたくなに食べないようにしていた。しかし昨夜は暑かったしむしゃくしゃしていたし、なにより牛丼270円キャンペーン中だったので大盛つゆ抜き玉子を頼んで食べてしまった。

アルバイト先の隣の隣に吉野家があったので、15分休憩のときに一杯、30分休憩のときにまた一杯と、学生時代は吉野家の牛丼を常食していた。常食というか、愛していた。吉野家と愛し合っていた。

俺は吉野家の牛丼はつゆ抜きが一番うまいと思っている。つゆだくはご飯がべちゃべちゃになってダメだ。何も考えずに「つゆだくで」とか言ってるやつを見かけると虫唾が走る。お前、つゆだくって言いたいだけちゃうんかと。

牛丼に生卵をつけないやつも信じられない。吉野家の牛丼は関東風の塩辛い醤油をたらした生卵を牛肉の上にかけることで始めて完成する。なのにつゆだくに七味やら紅ショウガやらを盛大にぶっかけて食べている連中を見かけると反吐が出る。ただのものを全部トッピングしてやろうという貧乏人根性が丸見えだ。

吉野家での最も甘美なコマンドはアフターだ。吉野家に通い詰めていた俺も、アフターコマンドを聞いたのはこれまで一度しかない。あるとき吉野家で並つゆ抜き玉子をかき込んでいると、長髪小太りのテレビ番組制作会社社員のような男が入ってきた。牛丼を頼む際、注文の最後に「アフター並」と男は言った。アフターってなんだよ、後からキャバ嬢でも来てアフターしちゃうのか? と俺は悩んだが、アフターとは食後に牛丼を持ち帰るということであった。なんと甘美なコマンドだろうと俺は思った。今にして思えばUNIXの哲学が反映されているような気がしないでもない。男はスーパープログラマーだったのかもしれない。

とまぁ、こんな感じで、土曜の夜に博多駅で感傷に浸りながら牛丼を食べた。こんなことができるのは嫁がいない一人の夜だけだ。今の俺はなんと不自由なんだろう。一筋の涙が頬を伝った。

というわけで6月に結婚しました。金ないのに結婚してやっていけるか心配です。ご祝儀寄越せとか言わないので福岡にお立ち寄りの際はもつ鍋でもおごってください。

| @技術/プログラミング

JekyllはLiquidというRubyのテンプレートエンジンを採用してるんですが、Liquid内でLiquidの文法をエスケープする方法が分からず大変苦しんでおりました。Jekyllの公式のDocument呼んでもXML出力時とかCGI出力時にコンテンツをエスケープする方法は書いてあるのに、Liquidテンプレート自体をエスケープする方法が書いてなく、大変不満でした。しかしその方法が分かったのでお知らせいたします。元ネタはスタックオーバーフロー。

例えば {{ "{% this " %}}} と表示させたかったらこうやります。

{{ "{% this " %}}}}

ちょっとトリッキーですね。

Pygmentsと組み合わせて使うことも可能ですが、いちいち {{ "{% highlight " %}}} のなかでコメントアウト処理をしてあげないといけないません。面倒くさいですね。

| @技術/プログラミング

Jekyllを使いだしてから気がつくと一年経ってました。いろいろ便利に使えており気に入っております。

PygmentでコードをシンタックスハイライトしたりLSIで関連記事表示したりと結構手を入れてはいたんだけど、いわゆる世間の一般のブログにあるようなカテゴリ一覧表示機能と、カテゴリごとの記事アーカイブ機能がなくて、それを若干不便に思っておりました。

ググってみたところ、プログラマー向けなブログツールなだけあっていろんな方法が出てきました。以下そのまとめ。

カテゴリ一覧

JekyllのLiquid (テンプレート言語) には {{ "{{ sites.categories " }}}} みたいタグがあるんだけど、こいつが意図したとおりに動かない。普通のRuby使いの感覚からすると site.categories ってカテゴリを沢山持った配列になってそうな気がするんだけどこれが違う。

<ul>
{{ "{{ for category in sites.categories " }}}}
  <li>{{ "{{ category.name " }}}}</li>
{{ "{{ endfor " }}}}
</ul>

↑みたいな感じのコード書くと何も表示されない。 site.categoires はHashで、{ "カテゴリ名" => カテゴリ内の記事一覧 } みたいな構造になってる。LiquidでHashのキーを取りだす方法が分からず、どうにもこうにもいかなかったので他の人が作っているプラグインを利用することにした。

↑のファイルを JEKYLL_ROOT/_plugins にコピーする。(_plugins というディレクトリがなければ作る)。そんでテンプレートを変更する。↑のやつを↓みたいにする。

<ul>
{{ "{{ for category in sites.iterable.categories " }}}}
  <li>{{ "{{ category.name " }}}}</li>
{{ "{{ endfor " }}}}
</ul>

2行目のところが変更点です。これでカテゴリ一覧表示ができるようになる。

カテゴリごとの記事一覧

カテゴリごとの記事一覧を表示する方法だけど、こういうのを発見した。

ここの generate_categories.rb を使えばカテゴリ内の記事一覧を作成できる。こんな感じ。

これもさっきのと同じように、JEKYLL_ROOT/_plugins にファイルをコピーする。そんでLiquidテンプレートを書き換えるんだけど詳細はプラグイン内の記事をご確認くだしあ。