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>

スポンサーリンク


Comment