いろいろ調べて、とりあえずそれっぽいものを作ることができました!
もっとゴツいロジックを想像してましたが、意外とあっさりしたものができました。
もちろん、使っているうちに不具合が見つかるかもですが。。。
見てくださった方、ありがとうございました!
lisp
1(defun expand-empty-tag ()
2 (newline-and-indent)
3 (previous-line)
4 (end-of-line)
5 (newline-and-indent))
6
7 (defun web-mode-ret ()
8 (interactive)
9 (if (looking-at "</\(.*?\)>")
10 (expand-empty-tag)
11 (newline-and-indent)))
追記
ちょっと改良しました。上のだと
html
1<div><img src="hoge.png" alt=""></div>
ワンライン嫌だなーと思って展開しようとすると
html
1<div>
2 |<img src="hoge.png" alt=""></div>
↓
html
1<div>
2 <img src="hoge.png" alt="">
3 |
4</div>
こうなってしまう。この場合は
html
1<div>
2 |<img src="hoge.png" alt=""></div>
↓
html
1<div>
2 <img src="hoge.png" alt="">
3|</div>
こうが良かったので。
lisp
1(defun web-mode-ret ()
2 (interactive)
3 (let ((narrow-end (point))
4 (in-empty-tag nil)
5 (tag-name))
6 (if (looking-at "</\(.*?\)>")
7 (progn (setq tag-name (match-string 1))
8 (save-excursion
9 (beginning-of-line)
10 (if (re-search-forward (concat "<" tag-name ".*>") narrow-end t)
11 (setq in-empty-tag t)))
12 (if in-empty-tag
13 (expand-empty-tag)
14 (newline-and-indent)))
15 (newline-and-indent))))
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。