正規表現の問い合わせ置換
HTML helperモードで、以下のように雛形を.emacsに書いておくと、.htmlファイルの新規作成時にその雛形を自動的に挿入してくれる。(参考:Emacs で HTML)
(defvar html-helper-new-buffer-template '("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n" "<html lang=\"ja\">\n" ここに続けて雛形を書く ) "*Template for new buffers, inserted by html-helper-insert-new-buffer-strings if html-helper-build-new-buffer is set to t")
この雛形を既存の.htmlファイルからコピーして作る際に問題になるのが以下の2点。
- それぞれの行をダブルクオートで囲んで、改行文字を挿入しなくてはならない
- 従って、HTMLファイル内のダブルクオートはエスケープしないといけない
こんなことを手書きでやってたんじゃ間違えるかもしれないし、めんどくさいので、Meadowの「正規表現での問い合わせ置換(C-M-%)」を使った。
まず最初にダブルクオートのエスケープを行う(これは正規表現を使わなくて大丈夫)
Query replace regexp: " RET Query replace regexp r with: \" RET 実行結果の例: <html lang="ja"> => <html lang=\"ja\">
次に、それぞれの行をダブルクオートで囲んで、改行文字を挿入
Query replace regexp: <\(.*\)> RET Query replace regexp r with: "<\1>\\n" RET 実行結果の例: <html lang="ja"> => "<html lang=\"ja\">\n"
.emacsに追加する雛形の設定例
(defvar html-helper-new-buffer-template '( "<?xml version=\"1.0\" encoding=\"Shift_JIS\"?>\n" "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n" "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ja\" lang=\"ja\">\n" "<head>\n" "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\" />\n" "<meta http-equiv=\"Content-Style\" content=\"text/css\" />\n" "<link rel=\"stylesheet\" href=\"css/mystyle.css\" type=\"text/css\" />\n" "<title></title>\n" "</head>\n" "<body>\n" "<address>\n" "Copyright © ; 2006 HogeCompany All Rights Reserved.<br />\n" "<!-- hhmts start -->" "<!-- hhmts end -->" "</address>\n" "</body>\n" "</html>\n" ) "*Template for new buffers, inserted by html-helper-insert-new-buffer-strings if html-helper-build-new-buffer is set to t") (defvar html-helper-timestamp-start "<!-- hhmts start -->") (add-hook 'html-helper-timestamp-hook (function (lambda () (insert "Last modified: " (format-time-string "%Y-%m-%d %T\n")))))
余談だけど、新規作成で雛形が挿入されたら、C-x hでバッファ全体を選択して、M-x indent-regionを実行すれば、インデントもきちんとそろって便利。
今回は正規表現に助けられた。もっと本格的に勉強すれば、すごく強力な武器になるのかもしれない。今年中にはオライリーの詳説 正規表現 第2版を読んでみたいな。