使用扩展区域更好地搜索emacs

时间:2012-06-15 17:29:58

标签: search emacs elisp expand region

假设我们有以下文字:

(print "thIis-is-a-text")

,光标位于char“h”和“i”之间的“this”字样。

在emacs中,如果我输入 C-s C-w ,搜索的文字是'是',

再次 C-w 是'is-is',

再次 C-w 是'is-is-a',

再次 C-w 是'is-is-a-text',

再次 C-w 是'is-is-a-text''...

还有一个emacs插件expand region:“扩展区域按语义单位增加所选区域。只需按住键直到它选择你想要的内容。”

所以我想让 C-s C-w 变得更聪明:与扩展区域结合。

再次在'this'这个词中'char'h'和'i'之间的光标,我的目标是:

当我输入 C-s C-w 时,“this”这个词将成为要搜索的文字,

再次将是'this-is-a-text',

再次将是'“这是一个文本”',

再次将'打印'这是一个文本“',

将再次''(打印“this-is-a-text”)',

....(表现得像扩展区域,也许这不是一个好例子......)

我发现有时扩展区域在搜索文本时非常有用,我希望有人可以编写一些代码来实现这一点,因为我是emacs和elisp的新手。谢谢,请原谅我破碎的英语! :)

2 个答案:

答案 0 :(得分:3)

有一个非常简单的名为thingopt的包,它使用thingatpt来做类似于expand-region的事情。我已经使用modified version了很长一段时间,这增加了isearch的支持。这个问题提醒我分叉并提出拉动请求。我在init.el中有以下内容:

(define-key isearch-mode-map (kbd "C-S-s") 'upward-isearch-thing)
(define-key isearch-mode-map (kbd "M-3") 'upward-isearch-thing)

(global-set-key (kbd "C-S-s") 'upward-mark-thing)
(global-set-key (kbd "M-3") 'upward-mark-thing)

(setq upward-mark-thing-list
      '(email
        url
        word
        symbol
        string
        (up-list . *)
        paragraph
        ))

我尝试过扩展区域,我认为我会更喜欢它,但它看起来要复杂得多,而且在我开始使用之前我必须添加isearch支持。希望有一天我会(或其他人会)接触它。

答案 1 :(得分:1)

(defadvice isearch-yank-word-or-char (before move-to-beginning-of-word)
  (unless (eq last-command this-command)
    (goto-char (car (bounds-of-thing-at-point 'word)))))
(ad-activate 'isearch-yank-word-or-char)