Emacs中是否有类似于surround.vim的扩展或模式?

Cho*_*how 26 vim emacs surround

Surround.vim是一个漂亮的vim扩展,允许你用括号,括号和几乎任意"环绕"字符环绕文本块.它支持段落和单词环绕,但我经常在可视模式下使用它.我正在玩Emacs并想知道是否有类似的东西; 让我突出显示一个区域,然后用括号,括号或标签括起来的标记区域(或矩形).

Boz*_*sov 29

也许wrap-region就是你所需要的.

如果需要用分隔符,标签等包装东西,smartparens是另一个很好的选择.


sp3*_*tum 8

我用邪恶的环绕.它模仿vim行为,但不幸的是,可能不是大多数emacs用户想要的,因为它需要邪恶的 vim模式.但是,它可能适合您,也可能不适合您,因为您首先引用了surround.vim.

evil-surround似乎支持Surround.vim中的大多数功能,包括修改环境.


sco*_*zer 5

我不认为有任何内置的标签,但对于括号你可以做M-(。对于括号/大括号/引号,您可以执行以下操作:

(global-set-key (kbd "M-[") 'insert-pair)
(global-set-key (kbd "M-{") 'insert-pair)
(global-set-key (kbd "M-\"") 'insert-pair)
Run Code Online (Sandbox Code Playgroud)

请注意,如果您没有突出显示某个区域,它只会插入一对任意内容并将光标放在它们之间。也可以方便地删除匹配的内容

(global-set-key (kbd "M-)") 'delete-pair)
Run Code Online (Sandbox Code Playgroud)

如果你想插入标签对,这是一些简单的 elisp:

(defun my-insert-tags (tag)
  (interactive "sTag: ")
  (if (region-active-p)
      (let ((beg (region-beginning)))
        (save-excursion
          (goto-char (region-end))
          (insert "</" tag ">")
          (goto-char beg)
          (insert "<" tag ">")))
    (insert "<" tag ">")
    (save-excursion
      (insert "</" tag ">"))))
Run Code Online (Sandbox Code Playgroud)