HTML/CSS/JavaScriptを書くために行ったVimの設定やインストールしたスクリプト等をざっとまとめてみた。「VimでWeb開発を100倍効率的にする方法」といったような生産性を上げるための設定の類ではない。
:make
で文法チェックtidy.vimが用意されているので、HTML Tidyをインストールし、.vimrcに以下のように書くだけで良い。
autocmd FileType html :compiler tidy
autocmd FileType html :setlocal makeprg=tidy\ -raw\ -quiet\ -errors\ --gnu-emacs\ yes\ \"%\"
tidy.vimのmakeprg
では日本語が化けるので-raw
を追加する。
gg=G
ノーマルモードではggでファイルの先頭に移動して=Gでファイル全体をインデントし直すことができる。選択範囲のみをインデントし直す場合は、適当にビジュアルモードで選択した状態で=を押すだけ。1000行とかあるHTMLファイルだと結構時間がかかる。デフォルトではJavaScriptファイルでやると残念な結果に……。
FirefoxやSafari、Chromeは普通にインストールするとApp Pathsに登録されるので、
:! start chrome.exe % :! start firefox.exe % :! start IEXPLORE.EXE % :! start Safari.exe %
でブラウザで開くことができる。! start
と間に半角スペースがあることに注意。
OperaのインストーラはApp Pathsに登録しないので、
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\opera.exe] @="C:\\Program Files\\Opera\\opera.exe" "Path"="C:\\Program Files\\Opera"
といったレジストリファイルをインポートして登録してやると:! start opera.exe %
で開くことができるようになる。
以下のPerlスクリプトをパスの通った場所に置いておく。
#!/usr/bin/perl
use strict;
use warnings;
use HTML::Entities;
print encode_entities(join('', <STDIN>), '&<>"\'');
その上でコマンドを作成。
command! -range EncodeEntities :'<,'>!perl -S encode-entities.pl
command! InsertDateTime :execute "normal! i".strftime("%Y-%m-%dT%H:%M:%S+09:00")
必要な人は少ないだろうけど。
:make
で文法チェックcss.vimをダウンロードしてインストールする。
autocmd FileType css :compiler css
同梱のPerlスクリプト(validate_css)はパスの通ったディレクトリにコピーする必要がある。
:make
で文法チェックJavaScript Lintをインストールし、javascriptlint.vimとして以下のファイルを$HOME/.vim/compiler
(Windowsでは$HOME/vimfiles/compiler
)以下に作成する。
if exists("current_compiler")
finish
endif
let current_compiler = "javascriptlint"
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
let s:cpo_save = &cpo
set cpo-=C
CompilerSet makeprg=jsl\ -nologo\ -nofilelisting\ -nosummary\ -nocontext\ -process\ %
CompilerSet errorformat=%f(%l):\ %m
let &cpo = s:cpo_save
unlet s:cpo_save
そして.vimrcに以下のように書く。
autocmd FileType javascript :compiler javascriptlint
デフォルトのインデント・スクリプトはjQueryを利用してJavaScriptを書いているとかなり酷いことになる。
foo(function () {
の次の行のインデントfoo({
の次の行のインデント})
でのアンインデントあたりがメジャーなインデントがおかしくなる箇所で、「コード書くよりインデントの修正の方が大変!」というくらい(おおげさ)。
あれやこれやJavaScriptのインデント・スクリプトは見つかるが、Better Javascript Indentationが一番良かった。普通にインストールするだけで特に設定等は必要ない。
インストールすると以下のような典型的なPowered by jQueryのJavaScriptファイルがすんなりインデントされるようになる。気持ち良い!
$(function () {
var num = 32;
$("#monthly_archives > li").each(function (i, li) {
if (i === num) {
$(li).before($("<li/>").append($("<a/>").attr({
href: "#archives-by-month"
}).append("» more").click(function () {
$(this).hide();
$("#monthly_archives .folded").show();
}))).addClass("folded").hide();
} else if (i > num) {
$(li).addClass("folded").hide();
}
});
});
気付いた範囲では、
var foo = {
bar:
function () {
と書いた時に、
}
で2段階アンインデントされてしまうといったラベル絡みでの不具合があった。function
の前で改行しない場合は問題ないと思う(そう書けという意味ではない)。
また、これをインストールするとgg=G
によるインデントのやり直しも改善される(当たり前だけど)。ただし複数行コメント内の行頭の空白が消えてしまうので、
/*!
* foobar
* hogehoge
*/
といったYUI Compressor向けなコメントなどは、
/*!
* foobar
* hogehoge
*/
となってしまうので注意が必要。
他にはMarkdownやTextileなどでHTMLに変換するコマンドを作っておいていたりするくらい。あとはひたすらAutoComplPopでOmni補完!