ZenCodingを改造して自分用スニペットを入力する
スポンサーリンク
Zen Codingをカスタマイズし、自分用のスニペットも入力できるようにする方法のメモ。以下はEmEditor用Zen Codingマクロをもとに書いているが、内容はJavaScriptなので、他のエディタ用ZenCodingでも使える内容になっていると思う。少なくともサクラエディタ用ZenCodingにはそのまま当てはまった。
概略
Zen CodingのExpanded Abbreviationは、例えばhtml:5と書いてからZen Codingで展開すると、html5形式のhtml一式が入力されるというもの。
<!DOCTYPE HTML> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> </html>
初期状態では上のコードに展開される。この機能を改造し、自分用のものに変更したい。上の例では、head要素内にstyleやjavascriptの設定が無いが、これらも同時に展開されるようにしたい。
方法
ZenCodingファイルを開く(EmEditorの場合zen_emeditor.jsee)。html:5を検索すると以下の部分が出てくる。
'html:5': '<!DOCTYPE HTML>\n' +
'<html lang="${locale}">\n' +
'<head>\n' +
' <meta charset="${charset}">\n' +
' <title></title>\n' +
'</head>\n' +
'<body>\n\t${child}|\n</body>\n' +
'</html>'
この下にhtml:myという項目を追加し、自分用スニペットが入力されるように改造する。まず、'</html>'の後ろに“,”を付け足す。それからその下に、以下のコードを挿入する。
'html:my': '<!DOCTYPE HTML>\n' + '<html dir='ltr' lang='ja'>\n' + '<head>\n' + ' <meta charset='UTF-8'/>\n' + ' <title></title>\n' + ' <meta http-equiv='Content-Style-Type' content='text/css'/>\n' + ' <meta http-equiv='Content-Script-Type' content='text/javascript'/>\n' + ' <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js'></script>\n' + '</head>\n' + '<body>\n' + '</body>\n' + '</html>'
ようするに展開したいコードを書き、1行ごとにシングルクオートで囲み、必要なら改行コード\nを入れ行末に+をつければいい。これでhtml:myから設定したhtmlが展開されるようになる。
この方法は新しい項目を付け足すやり方だが、既存のものを変更してもいい。例えばhtml:5の項目を以下のように改造しておけば、headerタグやsectionタグの入ったhtmlが展開されるようになる。
'html:5': '<!DOCTYPE HTML>\n' + '<html lang="ja">\n' + '<head>\n' + ' <meta charset="utf-8">\n' + ' <title></title>\n' + '</head>\n' + '<body>\n' + ' <header>\n' + ' </header>\n' + ' <section>\n' + ' </section>\n' + ' <footer>\n' + ' </footer>\n' + '</body>\n' + '</html>'
応用
ZenCodingの内部処理で$は文字列を置換する際のフックになっている。そのため、展開させたいスニペット中に$があると困ったことになる。どういうことかというと、例えばjQueryのコードをZenCodingで展開させたい時に、$がそのままでは処理できない。jQuery(function($){});というjQueryの基本的なコードでも、$はそのままでは表示されない。
ということで、対策として${dollar}で$と表示されるようにする。
ZenCodingファイルからvar zen_settingsを検索する。その少し下に、
'variables': {
'lang': 'en',
'locale': 'en-US',
'charset': 'UTF-8',
という部分があるので、この下に'dollar' : '$' ,と付け足す。
'variables': {
'lang': 'en',
'locale': 'en-US',
'charset': 'UTF-8',
'dollar' : '$' ,
これで${dollar}と入力すると、$と表示されるようになる。
先程のhtml:myを
'html:my' : '<!DOCTYPE HTML>\n' +
'<html lang="ja">\n' +
'<head>\n' +
' <meta charset="utf-8">\n' +
' <title></title>\n' +
' <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>\n' +
' <script type="text/javascript">\n' +
' jQuery(function(${dollar}){\n' +
' \n' +
' });\n' +
' </script>' +
'</head>\n' +
'<body>\n\t${child}|\n</body>\n' +
'</html>'
とすると、以下のように${doller}の部分が$と変換される。
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
<script type="text/javascript">
jQuery(function($){
});
</script></head>
<body>
</body>
</html>
スポンサーリンク