在Emacs中用封闭字符包裹所选文本

29
在 Textmate 中,我可以通过选择文本并按下开放字符('(','[','"'等)来将包围字符('(','[','"'等)绕在文本周围。例如,如果我选择word并按下(,它会变成(word)。Emacs 如何称呼此功能并如何启用它?
9个回答

28

对于括号,你可以使用M-(。 对于方括号/大括号/引号,你可以使用:

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

请注意,如果您没有选择一个区域,它将仅插入一对“东西”,并将光标放在它们之间。还可以方便地删除匹配的“东西”。

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

编辑:

评论中提到了一个好的观点,即覆盖backward-paragraph。你可以将其绑定到C-{,这可能会干扰某个主要模式中的某些内容。 insert-pair获取最后一个键并查找要插入的配对,因此如果您不想将其绑定到something-{,则可以将其绑定到此函数。

(defun my-insert-braces ()
  (interactive)
  (if (region-active-p)
      (insert-pair 1 ?{ ?})
    (insert "{}")
    (backward-char)))

3
唯一的问题是 M-{ 不能再用于向后段落 =) - hekevintran
有趣的错误/奇怪的行为:如果我启用(global-set-key (kbd "M-[") 'insert-pair),那么每当我执行鼠标操作时,Emacs都会插入转义字符垃圾(但这只适用于'M-[')。 - rien333

7

7

Autopair 是这些工具中最好的一个。


7
自从Emacs 24.1(发布于2012-06)以来,将以下内容放入您的emacs init中:(electric-pair-mode 1)。现在,如果您选择一个单词并按下"("键,则它将变成(word)。引号、方括号、花括号等同理。

5

5

2

有一个叫做textmate-mode的东西。

来自Emacswiki:

查看textmate-mode,尝试实现TextMate对括号和引号的行为(自动关闭、覆盖、智能删除)。

http://code.google.com/p/emacs-textmate/


2
现在还有Corral。它的“做我想要的”行为使这个过程比手动选择文本并按键快得多。

(免责声明:我是作者)


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接