HTML の終了タグを開くたびに、対応する終了 HTML タグが自動的に挿入されるようにしたいと思います。
だから私がタイプすると
<div>
私は取得する必要があります
<div></div>
sgml-close-tag
自分に電話しなくても。
これを達成する方法は?
>キーストロークごとにフック関数を呼び出すのではなく、 aが入力された後にのみ呼び出す方が理にかなっています。>これは、を使用するキーマップで文字を再バインドすることで実現できますsgml-mode
。
さらにsgml-close-tag
、タグが既に閉じられている場合は呼び出されるべきではありません。したがって、次のコードはそのための単純な正規表現チェックを追加します。
(defun my-sgml-insert-gt ()
"Inserts a `>' character and calls
`my-sgml-close-tag-if-necessary', leaving point where it is."
(interactive)
(insert ">")
(save-excursion (my-sgml-close-tag-if-necessary)))
(defun my-sgml-close-tag-if-necessary ()
"Calls sgml-close-tag if the tag immediately before point is
an opening tag that is not followed by a matching closing tag."
(when (looking-back "<\\s-*\\([^</> \t\r\n]+\\)[^</>]*>")
(let ((tag (match-string 1)))
(unless (and (not (sgml-unclosed-tag-p tag))
(looking-at (concat "\\s-*<\\s-*/\\s-*" tag "\\s-*>")))
(sgml-close-tag)))))
(eval-after-load "sgml-mode"
'(define-key sgml-mode-map ">" 'my-sgml-insert-gt))
あなたが好きならparedit
(そして、あなたが emacs ユーザーなら、おそらくそう思うでしょう)、tagedit
Magnar Sveen によって書かれた、paredit
html を編集するためのような機能を提供する emacs パッケージに興味があるかもしれません。
ライブラリはhttps://github.com/magnars/tageditにあり、Melpa/Marmalade ( ) からインストールできますpackage-install tagedit
。
実験的な機能を有効にする(tagedit-add-experimental-features)
と、自動的にタグが閉じられ、対応する終了タグのテキストが開始タグのテキストと一致するようになります。それは、スプライス、スラープ、バーフ、およびparedit
バランスの取れた表現で作業するときに実行できる他のすべてのクレイジーなことに加えて...素晴らしいと思います!
yasnippet
この目的で使用しています。のようなこの回答のショートカットを入力する<kbd>C-o</kbd>
には、次のスニペットがあります。
# -*- mode: snippet -*-
# name: kbd
# key: kbd
# --
<kbd>$0</kbd>
だから私は入力すると、カーソルが真ん中にkbd
C-o展開されます。<kbd></kbd>
に対しても同じ動作を行うことができますdiv
。