5

HTML の終了タグを開くたびに、対応する終了 HTML タグが自動的に挿入されるようにしたいと思います。

だから私がタイプすると

<div>

私は取得する必要があります

<div></div>

sgml-close-tag自分に電話しなくても。

これを達成する方法は?

4

4 に答える 4

4

>キーストロークごとにフック関数を呼び出すのではなく、 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))
于 2013-09-05T11:24:56.587 に答える
3

あなたが好きならparedit(そして、あなたが emacs ユーザーなら、おそらくそう思うでしょう)、tageditMagnar Sveen によって書かれた、paredithtml を編集するためのような機能を提供する emacs パッケージに興味があるかもしれません。

ライブラリはhttps://github.com/magnars/tageditにあり、Melpa/Marmalade ( ) からインストールできますpackage-install tagedit

実験的な機能を有効にする(tagedit-add-experimental-features)と、自動的にタグが閉じられ、対応する終了タグのテキストが開始タグのテキストと一致するようになりますそれは、スプライス、スラープ、バーフ、およびpareditバランスの取れた表現で作業するときに実行できる他のすべてのクレイジーなことに加えて...素晴らしいと思います!

于 2013-09-05T13:18:02.300 に答える
1

yasnippetこの目的で使用しています。のようなこの回答のショートカットを入力する<kbd>C-o</kbd>には、次のスニペットがあります。

# -*- mode: snippet -*-
# name: kbd
# key: kbd
# --
<kbd>$0</kbd>

だから私は入力すると、カーソルが真ん中にkbdC-o展開されます。<kbd></kbd>に対しても同じ動作を行うことができますdiv

于 2013-09-05T08:46:40.267 に答える