sudo.vimをzshから扱いやすくしたい
Shougoさんのpluginを入れた状態でsudo vimすると怒られるようになったので、メッセージに従ってsudo.vimを使い始めたのですが、どうにも使いづらい。というわけで改善を試みます。
まず、使いづらい理由を挙げてみます。
- zshの補完が効かなくなる
- 個人的には致命的なので、早急になんとかする必要があります。
- コマンドの書き方が変わる(sudo vim … → vim sudo:…)
- 慣れの問題ですが、できればこれまでどおり使いたいところです。
- syntaxの設定が効かなくなる
- 困るには困るのですが、比較的優先度は低いと思います。
今回は、上2つの問題を解決するためにzshの関数を作ってみました。
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:を付けないよう修正