如何在Emacs中标记括号中的文本?

23

有这样的函数或elisp脚本吗?我想要在emacs中实现与vim中“vi”序列相同的功能。


http://www.emacswiki.org/emacs/ParenthesisMatching - Bruce Stephens
以下是另一个对我更有效的版本:http://xahlee.org/emacs/syntax_tree_walk.html - Kevin Wright
3个回答

27

尝试按下键序列C-M-u C-M-SPC(即,同时按住ControlMeta键,依次按下uSpace),这将执行命令backward-up-sexpmark-sexp

编辑:

我犯了一个错误:backward-up-sexp在标准Emacs中不存在。我之所以写它,正是因为lkahtz的评论中提到的问题,即当光标位于双引号之间时,现有的函数backward-up-list无法工作。

(defun backward-up-sexp (arg)
  (interactive "p")
  (let ((ppss (syntax-ppss)))
    (cond ((elt ppss 3)
           (goto-char (elt ppss 8))
           (backward-up-sexp (1- arg)))
          ((backward-up-list arg)))))
(global-set-key [remap backward-up-list] 'backward-up-sexp)

有一件事...这似乎只适用于括号。至于双引号,它会标记到下一个双引号的位置。我必须按C-M-b键才能完成标记...有什么办法可以克服这个问题吗?(我真的很期待一个脚本,如果没有更好的想法,我稍后会自己编写一个)... - lkahtz

10

1

Xah Lee撰写了一个名为xah-select-text-in-quote的emacs-lisp函数,可以实现此功能。该函数可从他的网站上获得:

选择最近左右定界符之间的文本。 定界符包括以下字符:\"<>(){}[]“”‘’‹›«»「」『』【】〖〗《》〈〉〔〕()。 此命令无法正确处理嵌套括号。


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