【问题标题】:giving region to search in emacs给区域在emacs中搜索
【发布时间】:2014-02-26 10:58:16
【问题描述】:

有没有办法为 isearch 提供区域?

我想重载 isearch 以便:

C-s -> 1. 如果没有选择区域,则 isearch 照常进行,或者 2. isearch 以 region 为待搜索字符串

示例:我“选择”单词“no exit”,然后 C-s 应该在缓冲区中搜索“no exit”。 在某种程度上,当光标位于“no”开头时,可以使用 C-s C-w C-w 来完成。 我想知道是否有办法扭转这种情况,所以首先选择(某种方式),然后使用选择进行搜索

【问题讨论】:

  • 也许先“缩小到区域”?
  • @Dave narrow-to-region 听起来是个好主意,但这可能是一个不错的功能。不幸的是,我不能仅仅在isearch 之上破解它,因为当该区域处于活动状态时它已经做了有用的事情。也许isearch-*-region 会是一个不错的补充。

标签: emacs isearch


【解决方案1】:

您可能会发现命令 narrow-to-regionwiden 很有用,请执行 C-hfnarrow-to-regionRETC-h fwidenRET了解更多

更新

这里有一些快速而肮脏的代码来做你想做的事,为了简单起见,我没有处理一些案例,但这应该给出一个想法

(add-hook 'isearch-mode-end-hook (lambda ()
                                   (when (buffer-narrowed-p)
                                     (widen))))

(defun my-isearch(&optional start end)
  (interactive "r")
  (when (region-active-p)
      (narrow-to-region start end))
    (call-interactively 'isearch-forward-regexp))

更新 2

尝试以下功能,这应该可以满足您的需求

(defun my-isearch(&optional start end)
  (interactive "r")
  (if (region-active-p)
      (progn
        (let ((string (buffer-substring-no-properties start end)))
          (deactivate-mark)
          (isearch-resume string nil nil t string nil)))
    (call-interactively 'isearch-forward-regexp)))

【讨论】:

  • 感谢您的快速回答。我认为我的观点没有得到很好的解释。您的解决方案在该可选区域内搜索。我想要做的是使用该区域的内容作为要搜索的字符串。在伪代码中类似于:在当前“文件/缓冲区”中查找字符串“区域”的出现
【解决方案2】:

这正是Isearch+ (isearch+.el) 提供的功能。搜索是否限制在活动区域​​由布尔选项isearchp-restrict-to-region-flag控制。

你可以使用C-x n(命令 isearchp-toggle-region-restriction) 在搜索期间切换此行为。

第二个布尔选项 isearchp-deactivate-region-flag 控制是否在搜索期间停用该区域(例如,以便您更好地查看搜索区域)。

默认情况下,这两个选项都为真(搜索仅限于活动区域,并且在搜索期间该区域被停用)。

(为了将 Isearch 限制在 Info 中的活动区域,您还必须使用库 Info+ (info+.el)。


更新

嗯,它正是你描述的最初。您后来对 cme​​ts 的回复表明您实际上并不想搜索该地区的文字;您想搜索 区域中的文本,在缓冲区的其他地方。这是前者,而不是后者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多