像TextMate一样打开/关闭标签中的换行选择?

11 emacs elisp

TextMate中,可以使用ctrl-shift-w将文本包装在Open/Close标记中,使用ctrl-shift-cmd -w将每行包装在Open/Close标记的区域中.如何使用emacs lisp在Emacs中实现相同的功能?

emacs

becomes

<p>emacs</p>

而......

emacs
textmate
vi

becomes

<li>emacs</li>
<li>textmate</li>
<li>vi</li>

Tre*_*son 7

这个答案为您提供了包裹区域的解决方案(一旦您修改它以使用尖括号).

此例程将提示您使用该标记,并应使用该类型的打开/关闭标记标记该区域中的每一行:

(defun my-tag-lines (b e tag)
  "'tag' every line in the region with a tag"
  (interactive "r\nMTag for line: ")
  (save-restriction
    (narrow-to-region b e)
    (save-excursion
      (goto-char (point-min))
      (while (< (point) (point-max))
        (beginning-of-line)
        (insert (format "<%s>" tag))
        (end-of-line)
        (insert (format "</%s>" tag))
        (forward-line 1)))))
Run Code Online (Sandbox Code Playgroud)

*注意:*如果您希望tag始终如此li,则删除tag参数,\nMTag for line:从对Interactive的调用中删除文本,并更新插入调用以仅"<li\>"按预期插入.


Tör*_*bor 5

对于sgml-modederatives,标记区域以标记,键入M-x sgml-tag和键入您要使用的标记名称(按下TAB以获取可用HTML元素的列表).尽管如此,此方法不允许您标记区域中的每一行,您可以通过录制键盘宏来解决此问题.