Windows向けの定番エディタとして有名な秀丸エディタですが、HTMLを高速にコーディングする為のマクロとしてZen-Codingマクロが提供されています。
秀丸マクロでZen-Coding
このマクロを導入すると、HTMLのタグ打ちが非常に速くなるのですが、
しばらく使っていると、細かい使い勝手が気になる様になってきました。
例えば、リンクを貼りたいときにaタグをマークアップさせると…
このように、開始タグの後ろに改行が入ってしまいます。
またh1~h6タグの場合も
開始・終了タグが独立行になり、タイトル文字にインデントが入ります。
上記の振る舞いは、元々のzen-codingとしては正しいのかもしれませんが、個人的には、これらのタグの前後に改行が入るとソースが間延びして見づらくなってしまうので、a,hタグの前後には改行を入れたくない派です。
なので、これを直すために、今までエディタで以下のように修正していました。
修正の手間はわずかなのですが、頻度が多いし、そもそもZen-Codingがマクロで置換を掛けているものなので、プログラムが整形したものを人が再整形するのもおかしな話です。
なので、マクロに手を入れて上記のa,hタグの場合に限り、改行を入れないように改変してみました。
※補足:ちなみに設定ファイルのzenhtml.iniで、改行・インデントの有無は設定できるっぽいのですが、今回はh,aタグのときだけ振る舞いを変えたいという、ワガママ仕様なのでマクロ自体を変更します。
; yes: 改行・インデントしてソースを整形する(推奨) ; no: 整形しない use-indent = yes |
というわけで、今回の修正は以下の場所です。
もっとスマートな修正方法があるかもしれませんが、マクロ全体の流れを追うのも面倒なので、
適用が楽な所にパッチを当てる事にしました。
修正は2ファイルです。
まずは、zenhtml.macの640目付近にあるIndentEachLine関数。
元々は、以下の記述だったのを…
IndentEachLine: // $$1: stri // $$2: baseindent ##indenterSize = strlen($indenter); call ReplaceAll $$1, "><",">\n<"; if ($$return != "") $$1 = $$return; call ReplaceAll $$1, "]>\n<!--","]><!--"; if ($$return != "") $$1 = $$return; call CountLines $$1; ##linelen = ##return; $$src = $$1 + "\n"; ... |
このように変更します。
IndentEachLine: // $$1: stri // $$2: baseindent ##indenterSize = strlen($indenter); call ReplaceAll $$1, "><",">\n<"; if ($$return != "") $$1 = $$return; call ReplaceAll $$1, "]>\n<!--","]><!--"; if ($$return != "") $$1 = $$return; call CountLines $$1; ##linelen = ##return; // add 2012/05 call ReplaceAll $$1, "<a href=\"\">\n","<a href=\"\">"; if ($$return != "") $$1 = $$return; call ReplaceAll $$1, "<h1>\n","<h1>"; if ($$return != "") $$1 = $$return; call ReplaceAll $$1, "<h2>\n","<h2>"; if ($$return != "") $$1 = $$return; call ReplaceAll $$1, "<h3>\n","<h3>"; if ($$return != "") $$1 = $$return; call ReplaceAll $$1, "<h4>\n","<h4>"; if ($$return != "") $$1 = $$return; call ReplaceAll $$1, "<h5>\n","<h5>"; if ($$return != "") $$1 = $$return; call ReplaceAll $$1, "<h6>\n","<h6>"; if ($$return != "") $$1 = $$return; $$src = $$1 + "\n"; ... |
この関数では、下記の場所でタグの切れ目に改行を入れています。
call ReplaceAll $$1, "><",">\n<"; if ($$return != "") $$1 = $$return; |
なので、その直後で、特定のタグの場合に限り追加された改行を削除しています。
2つ目の修正は、zenhtml.iniの290行目付近にある、各タグの要素を定義している箇所。
hタグがblock要素として定義されているのを、強制的にinlineに変更します。
h1 = block h2 = block h3 = block h4 = block h5 = block h6 = block |
↓
h1 = inline h2 = inline h3 = inline h4 = inline h5 = inline h6 = inline |
マクロの方で、block要素のタグを挿入する場合は、タグの前後で改行した上で、その中身をインデントするというロジックになっています。なので、h1~h6タグはinlineであると騙す事によって該当のコードが走るのを抑制します。
上記2点の変更で、無事期待する動作に替わりました。
これでさらに高速にマークアップが出来る様になりそうです。
今回の改造は2箇所だけなので大した手間では有りませんが、元ネタがGPL3だったので、改変版を公開しておきます。改変版のライセンスは、勿論GPL3です。
というわけで、本マクロをダウンロードした方は以下のことを自由に行う事が可能です。
1.プログラムの実行 2.プログラムの動作を調べ、それを改変すること 3.複製物の再頒布 4.プログラムを改良し、改良を公衆にリリースする権利 |
ダウンロード:zencoding-macro-v0.5.6_kai
関連記事
コメントを残す