以下のコードを使用してにバインドyf/replace-or-delete-pair
しM-D
ます。
使用例:ポイントオンで(
、ヒットM-D [
して()
ペアがペアになり[]
ます。M-D RET
代わりにヒットした場合、ペアは削除されます。
このコードは構文テーブルを使用します。つまり、一部のペアについては、閉じ括弧を自分で指定する必要があります。HTMLモードでの例は、()
置き換えることができ<>
押すことでM-D <
。ただし、多くのモードで<>
は認識されないペアであり、M-D <
「<を閉じる方法がわからない」と表示されます。その後、単にタイプすることができます>
。
(defun yf/replace-or-delete-pair (open)
"Replace pair at point by OPEN and its corresponding closing character.
The closing character is lookup in the syntax table or asked to
the user if not found."
(interactive
(list
(read-char
(format "Replacing pair %c%c by (or hit RET to delete pair):"
(char-after)
(save-excursion
(forward-sexp 1)
(char-before))))))
(if (memq open '(?\n ?\r))
(delete-pair)
(let ((close (cdr (aref (syntax-table) open))))
(when (not close)
(setq close
(read-char
(format "Don't know how to close character %s (#%d) ; please provide a closing character: "
(single-key-description open 'no-angles)
open))))
(yf/replace-pair open close))))
(defun yf/replace-pair (open close)
"Replace pair at point by respective chars OPEN and CLOSE.
If CLOSE is nil, lookup the syntax table. If that fails, signal
an error."
(let ((close (or close
(cdr-safe (aref (syntax-table) open))
(error "No matching closing char for character %s (#%d)"
(single-key-description open t)
open)))
(parens-require-spaces))
(insert-pair 1 open close))
(delete-pair)
(backward-char 1))
\bigl(...\bigr)
に\Bigl(...\Bigr)
など