Surround.vim是一个漂亮的vim扩展,允许你用括号,括号和几乎任意“环绕”字符包围文本块。它支持段落和单词环绕,但我经常在可视模式下使用它。 我正在玩Emacs并想知道是否有类似的东西;可以让我突出显示某个区域,然后用括号,括号或标签括起来的标记区域(或矩形)。
答案 0 :(得分:28)
也许wrap-region是你需要的。
如果需要用分隔符,标签等包装,smartparens是另一个很好的选择。
答案 1 :(得分:8)
我使用evil-surround。它模仿vim行为,但遗憾的是,大多数emacs用户可能不会这样,因为它需要evil vim模式。 但是,它可能适合您,也可能不适合您,因为您首先引用了surround.vim。
evil-surround似乎支持Surround.vim中的大部分功能,包括修改环境。
答案 2 :(得分:4)
我认为标签没有内置任何东西,但是对于parens你可以做 M - (。对于括号/大括号/引号你可以做:
(global-set-key (kbd "M-[") 'insert-pair)
(global-set-key (kbd "M-{") 'insert-pair)
(global-set-key (kbd "M-\"") 'insert-pair)
请注意,如果您没有突出显示区域,则只需插入一对whatevers并将光标放在它们之间。删除匹配的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 ">"))))
答案 3 :(得分:1)
在Emacs中不知道有什么办法,甚至没有模块。
我的Elisp有点生疏,在这里购买的是一个简单的函数,它将当前区域(标记文本)或带引号的单词(“)包围起来:
(defun insert-quotes () "Inserts quotes (\") around the current region or work." (interactive) (let (start end bounds) (if (and transient-mark-mode mark-active) (setq start (region-beginning) end (region-end)) (progn (setq bounds (bounds-of-thing-at-point 'symbol)) (setq start (car bounds) end (cdr bounds)))) (goto-char start) (insert "\"") (goto-char (+ end 1)) (insert "\"")))
答案 4 :(得分:1)
是的,自1周前开始,环绕着surround.vim的克隆:http://github.com/timcharper/vimpulse-surround.el
它需要vimpulse,这需要vim。它实现了很多surround.vim的功能。
答案 5 :(得分:0)
也许evil-surround正是您所寻找的。 p>
感谢。
答案 6 :(得分:-2)
所以你想选择一个区域或类似区域,然后围绕它创建一个方框,就像各种模式的评论一样?我相信emacs-wiki(http://www.emacswiki.org/)有一些ascii-line艺术(以及一个figlet工具)可以做到这一点。搜索框,相当,线条艺术...
############################
# #
# I AM REGION, WE ARE MANY #
# #
############################