5

假设我们有以下文本:

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

光标位于字符“h”和“i”之间的单词“this”中。

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

C-w是'是-是',

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

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

再次C-w是'是文本''......

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

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

再次在单词“this”中的字符“h”和“i”之间移动光标,我的目标是:

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

再次将是“this-is-a-text”,

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

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

再次将是 '(print "this-is-a-text")',

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

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

4

2 回答 2

3

有一个非常简单的包叫做thingopt,它使用thingatpt 来做一些类似于expand-region 的事情。我已经使用修改版很长一段时间了,它增加了 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
        ))

我尝试过expand-region,我想我会更喜欢它,但它看起来要复杂得多,在我开始使用它之前我必须添加isearch支持。希望有一天我会(或其他人会)解决它。

于 2012-06-15T23:11:52.403 回答
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)
于 2012-06-15T17:52:38.847 回答