monolithic kernel

sudo.vimをzshから扱いやすくしたい

Shougoさんのpluginを入れた状態でsudo vimすると怒られるようになったので、メッセージに従ってsudo.vimを使い始めたのですが、どうにも使いづらい。というわけで改善を試みます。

まず、使いづらい理由を挙げてみます。

  • zshの補完が効かなくなる
    • 個人的には致命的なので、早急になんとかする必要があります。
  • コマンドの書き方が変わる(sudo vim … → vim sudo:…)
    • 慣れの問題ですが、できればこれまでどおり使いたいところです。
  • syntaxの設定が効かなくなる
    • 困るには困るのですが、比較的優先度は低いと思います。

今回は、上2つの問題を解決するためにzshの関数を作ってみました。

Terminal window
sudo() {
local args
case $1 in
vi|vim)
args=()
for arg in $@[2,-1]
do
if [ $arg[1] = '-' ]; then
args[$(( 1+$#args ))]=$arg
else
args[$(( 1+$#args ))]="sudo:$arg"
fi
done
command vim $args
;;
*)
command sudo $@
;;
esac
}

これを.zshrcなんかにコピペすれば使えるようになります。

この関数は、

sudo vim file1 file2 ...

みたいなのを

vim sudo:file1 sudo:file2 ...

のように置き換えることで、これまでどおりのsudo vimという記述をsudo.vimを利用する形に変換しています。これによって、sudo vimという書き方が可能になるほか、zshのファイル名補完も効くようになります。

おわりに

とりあえず個人的には快適に使えるようになったのですが、このアプローチがいいのか悪いのかよくわかりません(あんまりよくない気はする)。何かエレガントな解があればぜひ教えてください。

追記

  • 2011/12/17
    • オプションにsudo:を付けないよう修正