【问题标题】:Is there an extension or mode in Emacs similar to surround.vim?Emacs 中是否有类似于环绕.vim 的扩展名或模式?
【发布时间】:2010-04-30 17:36:19
【问题描述】:

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

【问题讨论】:

标签: vim emacs surround


【解决方案1】:

也许wrap-region 是你需要的。

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

【讨论】:

  • Corral (github.com/nivekuil/corral) 刚刚问世,也这样做了。
  • 请注意,Corral 的使用模式不同,似乎不尊重包装选择。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    (global-set-key (kbd "M-[") 'insert-pair)
    (global-set-key (kbd "M-{") 'insert-pair)
    (global-set-key (kbd "M-\"") 'insert-pair)
    

    请注意,如果您没有突出显示区域,它只会插入这对whatevers并将光标放在它们之间。删除匹配的东西也很方便

    (global-set-key (kbd "M-)") 'delete-pair)
    

    如果你想插入标签对,那就是一些简单的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 ">"))))
    

    【讨论】:

      【解决方案4】:

      不知道在 Emacs 中有什么方法可以做到这一点,即使是模块也不知道。

      我的 Elisp 有点生锈了,在这里买一个简单的函数,它将当前区域(标记的文本)或带引号 (") 的单词括起来:

      (defun 插入引号 () "在当前区域或作品周围插入引号 (\")。" (交互的) (让(开始结束边界) (如果(和瞬态标记模式标记激活) (setq start (区域开始) 结束(区域结束)) (预测 (setq bounds (bounds-of-thing-at-point 'symbol)) (setq start (车界) 结束(cdr 边界)))) (转到字符开始) (插入 ”\””) (goto-char (+ end 1)) (插入 ”\””)))

      【讨论】:

        【解决方案5】:

        是的,有一个环绕.vim 的克隆,截至 1 周前:http://github.com/timcharper/vimpulse-surround.el

        它需要vimpulse,这需要vim。它实现了环绕.vim 的大部分功能。

        【讨论】:

          【解决方案6】:

          也许evil-surround 就是你要找的东西。

          谢谢。

          【讨论】:

            【解决方案7】:

            所以您想选择一个区域或类似区域,然后在它周围制作一个框,就像为 cmets 所做的各种模式一样?我相信 emacs-wiki (http://www.emacswiki.org/) 有一些 ascii 线条艺术(以及一个 figlet 工具)可以做到这一点。正在搜索框,相当,线条艺术......

            ############################
            #                           #
            # I AM REGION, WE ARE  MANY #
            #                           #
            ############################
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-02-21
              • 2019-11-16
              • 1970-01-01
              相关资源
              最近更新 更多