ぼくがMacBook Airを買わない理由

MacBook Airが発売され、Twitterを眺めてみれば「注文した」だの「買った」だの「発送メールきた」だのと歓喜の声に溢れています。さて、そのような中、ぼくもそろそろモバイル用の新しいマシンが欲しいなあなんて思っていたので買う最後の一押しとして実物を見に行きました。その結果買わないことになりました。以下、買わない理由を列挙していきます。

理由1 キーボードがへぼい

MacBook Pro程度のキーボードならまだ良かったんですが、MacBook Airはキーボードがへぼいです。実際には長く使わないとわからない部分なのですが、軽く触っただけでもキーストロークの浅さが気になりました。キーボードの気持ち悪さは致命的になりかねません。デスクトップの代わりとしての高性能ノートパソコンなら外部キーボードを接続して使えばいいのでキーボードの悪さはたいした問題にはなりませんが、モバイル用途ではそれも無理です。キーボードを持ち運ぶような変態さんでない限り無理です。

理由2 CPUとメモリがしょぼい

CPUは1.5世代前、メモリは標準2GBで最大でも4GB。最新のスペックと比較すると見劣りします。いや、これは正直なところよくわかりません。CPUやメモリを特に酷使するような用途でなければ問題は無いと思います。少なくとも展示してある実機を触っている感じではそこそこ良さそうでした。この理由はある程度は数を挙げないといけない気になったので挙げただけです。

理由3 ぼくはiPadを持っていない

MacBook Air買うくらいならiPad買います。MacBook Airで使えるアプリはMac miniでも基本的には使えますが、iPadで使えるアプリはiPadでしか使えません。なので、iPadを買ったほうが楽しそうなのです。MacBook Airの隣に置いてあったiPadを改めて触ってみてちょっと欲しくなりました。だからMacBook Airを買うくらいならiPadを買います。

まとめ

キーボードがへぼくてスペックがしょぼいMacBookはいらん!

裏まとめ

自分自身に言い聞かせるために書いてみました。誰かMacBook Airください!

Command-T がすばらしい

Command-T は FuzzyFinder のように適当にファイルを検索することができる vim プラグイン。ぼくは FuzzyFinder をほとんど使っていなかったから正確に比較することはできないけれど、Command-T のほうが使いやすいと感じた。

なぜかhttpsな本家ページ

https://wincent.com/products/command-t

使い方

Command-T を起動して、ファイルパスに含まれている文字を適当に入力すると、適当にマッチして絞り込んでくれる。 などで候補から選択して Enter を押せばそのファイルを開く。簡単。わかりやすい。使いやすい。

インストール方法

Command-T のインストール方法は vim.org本家ページ を参照してもらえばいいんだけど、一応ここにも記載しておく(2010/08/10時点での方法。バージョン0.8bが対象)。

  • command-t-0.8b.vba をダウンロードする
  • vim で command-t-0.8b.vba を開く
  • vim で :source %
  • (ターミナルに戻る)
  • cd ~/.vim/ruby/command-t
  • ruby extconf.rb
  • make

ここまでは本家ページとかに書いてあるとおり。次からはぼくが maclinux で環境を分ける必要があるために追加した操作。

~/.vim.local を作成し C extension を含む ruby ディレクトリをそのまま移動させた。runtimepath/ruby ディレクトリを探すようなので .vim.local を runtimepath に追加しておけば勝手に .vim.local から探して使ってくれるのでなんの問題もない。
というわけで最後に

  • .vimrc に以下を追加
set runtimepath+=~/.vim.local
let g:CommandTMaxHeight=15
nnoremap <silent> <Space>f  :<C-u>Command-T<Return>
.vimrcに書いた内容の説明

runtimepath に .vim.local を追加しているのは上で説明したとおりの理由。

g:CommandTMaxHeight は候補一覧ウィンドウの最大の高さで、デフォルトの状態だとカレントウィンドウいっぱいになっている。けどそれだと高すぎるので15に設定した。そもそも15でも候補の数としては十分に多いのに、それ以上出ていても探すのが面倒なだけで意味はないと判断した。あと、第1候補は最上部に表示されるので、もしもカレントウィンドウいっぱいに広がるといきなり視点をウィンドウの最上部へ移さなければならいのが嫌だったという理由もある。

最後の keymap は適当に好きなように設定すればいいと思う。ぼくは FuzzyFinder で f を prefix として操作していた影響で f に割り当てた。Command-T なのに keymap に t を割り当てない気持ち悪さは残るけど。

まとめ

Command-T は使いやすいし、C extension を使っているだけあってさすがに速い。異種環境で同じ設定を使い回しているときにちょっとした工夫が必要だけど、これだけ快適に使えるのならば何の文句もない。

Command-T すばらしいよ。

screen でウィンドウタイトルを自動設定する方法

久しぶりにちょっと dot ファイルをいろいろといじっていたのでついでに書いておく。man screen に載っている内容だけど簡潔に。シェルは zsh を使っているとする。

.zshrc

local SETTITLE=$'\033k\033\134'
PROMPT=$SETTITLE'> '

.screenrc

shelltitle '> |zsh'
caption always '%{=r dd} %-w%{=b dd} %n %t %{-}%+w %='

ポイント

  • シェルのプロンプトに空のタイトル文字列用エスケープシーケンスを含めること
    • この例では空のタイトル文字列用エスケープシーケンスを SETTITLE に設定して連結しているけど、別に意味はない
    • 直接
      PROMPT='^[k^[\> '
      とかしてもいい
      • ^[ はエスケープコードで vim なら Ctrl+v ESC で入力できる。Emacs なら確か Ctrl+q ESC
  • プロンプトの最後の部分とshelltitleの最初の部分を一致させること
    • この例では両方とも
      > 
      で一致している
    • shelltitle で指定している | 以降の文字列(zsh)はデフォルトのタイトル

まとめ

とりあえず man 読め。

Vim で起動時に表時される画面を表示させる方法とか表示させない方法とか

Vim の起動時に表示される画面を無性に見たくなることが一生のうちに 2 回くらいは訪れるという。昨日ぼくはその 1 回目がきた。もちろん Vim を再起動すれば見られるが、それはなんだか邪道。再起動は邪道。で、どうすればいいか。ヘルプを探し回った結果

:intro

で表示されることがわかった。これでいつでも最初に表示される画面を表示させることが可能に!やりましたね!

ちなみに起動時に :intro の画面を表示させないようにするには .vimrc に以下のように書いておけばいいですよ。

set shortmess+=I

Vim で複数のタブを閉じる

すぐにタブを開いてしまうのはきっと Opera 使いの気性だから仕方ない。もちろん vim ですぐにタブページを開いてしまう。

さて、vim では

:tabclose {count}

で指定した番号のタブページを閉じることはできる。けれど、複数のタブページを指定して閉じることはできない。そこで以下のような設定を .vimrc に追加した。

これで

<Space>td 1 2 3<Return>

と入力すればタブページ 1 と 2 と 3 が閉じられる。

reverse(sort(copy(a:000)))

としているのは、大きい番号のタブページから閉じていかないと順番が狂うから。例えばタブページ 1, 2, 3 をこの順番に閉じていくと、タブページ 1 が閉じられた後は、最初 2 だったタブページが 1 になり、最初 3 だったタブページが 2 になる。で、次にタブページ 2 を閉じようとすると、最初 3 だったタブページが閉じられ、最初 2 だったタブページは閉じられない。これを回避するために、大きい番号のタブページから順番に閉じるようにした。

だれも喜ばない設定だけど、ぼくが喜ぶのでそれでよし。

vim script の関数呼び出しは遅いとか遅くないとか

vimプラグインである vimfiler を最近使い出したんですが、vimfiler バッファにおける j/k での移動がなんかひっかかる感じになっていました(vimfiler ではバッファの一番上で k を押すと一番下にジャンプし、一番下で j を押すと一番上にジャンプするという挙動をします)。MacVim では特に問題なかったんですが、Linux Mint 上の gvim ではひっかかる感まるだし。

ひっかかる感がストレスフルだったので j/k を unmap して、とりあえずひっかかる感を解消させました。上下のループはできなくなったけど、ひっかかる感が残るよりはましです。それでそのことについて twitter で以下のようにつぶやいたら

vimfiler の作者である [twitter:@ShougoMatsu] さんから速攻で reply が。
この間10分ほど。はええ。

それで早速試したところ確かに引っかかる感じがごく小さくなっていました。ちなみにアップデートコマンドは以下の通り。

wget -qO - http://github.com/Shougo/vimfiler/tarball/master | tar -xzC ~/.vim --strip-components=1

何をしたんだろうと diff を見ると関数呼び出しをやめているようでした。それで関数呼び出しでどの程度コストがかかるのかちょっと気になったので調べてみました。実行したスクリプトは以下のようなものです。

実行するには gvim の起動オプションに -S を指定。

gvim -S performance-comparison.vim

結果は以下のようになりました。

without function  :   7.358529
with    function1 :  11.212190
with    function2 :  13.246932

function1 は単純に関数にしてそれを呼び出すようにしたもので、function2 は三項演算子を使っていた部分を if/else に置き換えたもの。見てのとおり、関数呼び出しにしたら 1.5 倍くらい時間がかかりました。三項演算子を if/else したらさらに遅くなりました。

パフォーマンスを追求する場合、関数呼び出しはできるだけ減らした方が良さそうですね。まあ、1000000回で4秒、つまり1回あたり0.004ミリ秒なんですけどね。うん、相当おかしなことしない限り気にしなくていいよ。扇動的なタイトルでごめんなさい。

Vimで現在時刻をファイル名に持つファイルを作成する方法2

http://d.hatena.ne.jp/tacroe/20100608/1276007562 で書いた方法でもいいけど、単純に以下のように .vimrc に書いておいて、現在時刻が欲しくなったときに t で挿入する方が便利かもと思った。

cnoremap <expr> <C-o>t  strftime('%Y%m%d-%H%M%S')