在增量搜索中选择(即作为区域)当前匹配项


9

当使用搜寻字串时C-s,我希望能够按下某些键以退出搜寻模式,但仍保持对匹配项的选择。这样,我可以立即开始输入并替换最后一个匹配项。

例如,说我有以下文档:

The quick brown fox jumps over the lazy dog.

如果我搜索“ lazy”,emacs将像这样选择该单词(方括号是选择,管道是光标):

The quick brown fox jumps over the [lazy|] dog.

现在,如果我按return,emacs将保持我的光标位置,但是它将取消选择“ lazy”:

The quick brown fox jumps over the lazy| dog.

取而代之的是,我想要一个快捷方式,该快捷方式将退出搜索模式,但仍保持当前的比赛选择,就像在上面的第二种状态一样。


不是M-x query-replace您要找的东西吗
Nsukami _

1
@Nsukami_在搜索之前,我并不总是知道我要查询的内容,甚至不是我要替换的内容。只需单击C-s并键入我想搜索的内容,然后将要更改的内容更改为零即可轻松得多。然后,我尝试使用确切要替换的内容。M-%太“正式”了。

该解决方案对我来说很方便,例如当我搜索一个单词杀死它然后将其拖到另一个地方时。query-replace不能解决这个问题。
GergelyPolonkai

Answers:


7

这是一种方法:

(defun isearch-exit-mark-match ()
  "Exit isearch and mark the current match."
  (interactive)
  (isearch-exit)
  (push-mark isearch-other-end)
  (activate-mark))

(define-key isearch-mode-map (kbd "<C-return>") #'isearch-exit-mark-match)

这将绑定另一个键(C键)以退出当前的isearch,并保留最后选择的匹配项。这也可以使用isearch-forward-regexp,非常方便。


1
我得到“符号的函数定义无效:bind-key。” 哪里bind-key来的?

1
抱歉,bind-key来自另一个图书馆。我更改了答案,改为使用内置define-key功能。
glucas

4

Isearch +库使您可以轻松做到这一点,甚至可以即时打开/关闭它。

  • isearchp-set-region-flag退出isearch时,“非零” 选项会自动设置上一个搜索目标周围的区域(选择区域)。

  • 命令isearchp-toggle-set-regionM-s M-SPC在isearch切换选项期间绑定到isearchp-set-region-flag

  • Command set-region-around-search-target手动设置最后一个搜索目标周围的区域。(因此,即使未设置该选项,也不会自动选择,您可以手动执行。)


Replace +可让您对etc 做同样的事情query-replace。它将区域放置(即选择)最后一次替换。它使用相同的选项isearchp-set-region-flag来控制此功能,并且命令set-region-around-search-target具有相同的效果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.