vim tips

ファイルを開くエンコーディングを変更したい。
と言う場合にはfileencodingやらfileencodingsやらを書き換えたり自動文字コード判別を書いたりすればいいのだが、「このファイルだけは!!」とか色々面倒。
あとファイルの先頭にゴミがついてたりして、文字コード判別が死ぬ時とか結構ある。

ということで、すでに開いたファイルを別のエンコーディングで開き直す方法。
意外ににみんな知らないので今日のtipsはコレ。あとmodelineも。

:e ++enc=utf-8

これでutf-8で開き直せる。
":e"は":edit"でファイルを開くコマンド。
ファイル名を抜くと今開いているファイルを開き直す。
で、"++"がオプションで"++enc=utf-8"で開き直すエンコーディングを指定できちゃったりする。

"enc="には"sjis"とか"euc-jp"が使える。



どうでもいいけど、ファイルの先頭か末尾に

vim: ts=8:sw=8:et:syntax=haskell

とか書くとそのファイルにだけそのオプションが適応されるmodelineというのがある。
で、それで

vim: enc=sjis

とか

vim: fenc=sjis

とか書けばいけるかな?とか思ったらダメでした。特に後者はファイルを破壊しかねんので注意。


そう、このmodeline結構便利なんで覚えておくと吉。
例えばファイル名はindex.htmlだがその実、中身はrubyCGIなんてとき、普通にファイルを開くとvimは拡張子でhtmlと判断してしまいマークアップが...に。
で、毎回毎回

:set syntax=ruby

とかやればいいのだが、めんどい。


って時にmodelineを使うといい感じ。

# vim:syntax=ruby

見たいな感じで。
入れる箇所は、先頭はシバン(#!)と決まってるので、ファイル末尾がスマート。
実はmodelineは先頭/末尾だけじゃなくて、先頭/末尾から数えて、vimのオプションのmodelinesの数(デフォルトだと5かな)分だけ見てくれる。
ので、二行目、シバンの次の行に書いてもいいんだけどね。


↑の例を見れば分かるけどmodelineの前には"#"とか任意の文字を置けるのがポイント。
半角スペースをはさんでから"vim:"を書けばおっけー。


ってことなんで、cだったら"// vim:"とか、haskellだったら"-- vim:"とかでおっけ。


あと意外に知られてないけど後ろに文字を置くことのできる書き方もある。
"/* ... */"系のコメントを使いたい場合にはこちらをどうぞ↓

/* vim: set si:ai:is:syntax=html : */

見たいな感じで。ポイントは"set"と":"。
この書き方だと後ろにも任意の文字列を置けます。
便利です。


あとひそかにvimユーザであることをアピールできるのがポイント♪


ということでここまでノシ