假设我们有以下文字:
(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的新手。谢谢,请原谅我破碎的英语! :)
答案 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)