54

我使用 emacs 来查看和编辑代码和其他文本文件。我想知道是否有一种方法可以向前或向后搜索在当前缓冲区中标记的文本。类似于我可以在记事本或写字板中执行的操作。如我可以在缓冲区中标记一些文本并执行 Cs 或 Cr 并能够使用标记的文本进行搜索而无需实际输入整个搜索文本吗?

谢谢,

罗希特

4

8 回答 8

112

@Alex 说得通。

我经常使用的另一个选项是C-s C-w在当前标记之后搜索单词。重复点击C-w会增加附加词的搜索(例如,C-s C-w C-w C-w搜索当前标记之后的 3 个词)。

同样,C-s M-s C-e在当前标记之后搜索该行的其余部分并在该标记C-s C-M-y之后搜索字符。这些都可以以相同的方式重复(前者通过有点尴尬地重复M-s C-eafter C-s)。

于 2008-10-14T22:04:26.747 回答
40

是的。 M-W(获取所选文本的副本)C-s <RET> C-y <RET>。然后根据需要重复C-s。同样对于C-r

于 2008-10-14T21:05:39.550 回答
17

我正在使用以下内容,它不存在必须键入多个连续 C 来查找以后出现的问题:

    (defun search-selection (beg end)
      "search for selected text"
      (interactive "r")
      (kill-ring-save beg end)
      (isearch-mode t nil nil nil)
      (isearch-yank-pop)
    )
    (define-key global-map (kbd "<C-f3>") 'search-selection)

前面代码的缺点是选中的文本被复制到了stretch。下面的代码没有这个问题:

    (defun search-selection (beg end)
      "search for selected text"
      (interactive "r")
      (let (
            (selection (buffer-substring-no-properties beg end))
           )
        (deactivate-mark)
        (isearch-mode t nil nil nil)
        (isearch-yank-string selection)
      )
    )
    (define-key global-map (kbd "<C-f3>") 'search-selection)
于 2012-08-13T07:40:07.887 回答
7

其他答案描述了如何搜索复制的文本,或如何搜索该单词。但它们都没有真正描述如何“使用标记的文本进行搜索”。

添加以下钩子将使当前选择的文本成为用于 isearch 的文本:

(defun jrh-isearch-with-region ()
  "Use region as the isearch text."
  (when mark-active
    (let ((region (funcall region-extract-function nil)))
      (deactivate-mark)
      (isearch-push-state)
      (isearch-yank-string region))))

(add-hook 'isearch-mode-hook #'jrh-isearch-with-region)

提示:这很好地与expand-region配对。

于 2015-08-14T04:07:41.510 回答
5

执行此操作的最短键序列是M- w C- s M- y

于 2008-10-15T09:37:00.873 回答
3

有一个很棒的功能:isearch-forward-symbol-at-point. 它突出显示您的点所在的单词的所有出现 - 无需将点放在单词的开头。然后您可以使用 Cs 或 Cr 移至下一个或上一个。

请注意,它是完全匹配的:例如,如果您在其上使用它,hi则不会匹配chill

我将 if 映射到command-f(mac OSX): (global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point)在 init 文件中。

于 2016-04-21T18:01:56.453 回答
2

上面的答案(包括接受的答案)太麻烦恕我直言。我找到了以下信息,并且更喜欢它:

“Ctrl+s Ctrl+w”。这将搜索当前单词,但您必须先将光标移动到单词的开头。

http://xah-forum.blogspot.com/2009/08/search-word-under-cursor-in-emacs.html

于 2015-03-15T04:51:16.777 回答
0

您可以通过执行 Ch k Cs 找到 Cs 帮助,它说:

键入 DEL 以取消搜索字符串末尾的最后一个输入项。键入 RET 退出,将点留在找到的位置。键入 LFD (Cj) 以匹配行尾。键入 Cs 再次向前搜索,键入 Cr 再次向后搜索。键入 Cw 以提取缓冲区中的下一个单词或字符 到搜索字符串的末尾,然后搜索它。键入 CMw 以从搜索字符串的末尾删除字符。键入 CMy 将 char 从缓冲区拉到搜索字符串的末尾并搜索它。键入 Ms Ce 将剩余的行拉到搜索字符串的末尾并搜索它。键入 Cy 以拉出最后一串被杀死的文本。键入 My 以将刚刚进入搜索提示的字符串替换为在它之前被杀死的字符串。键入 Cq 以引用控制字符进行搜索。键入 Cx 8 RET 以添加一个字符以按 Unicode 名称搜索,并完成。搜索时或搜索失败时的 Cg 取消对已成功找到的内容的输入。搜索成功时 Cg 中止并将点移动到起点。

如果您尝试在搜索字符串仍为空的情况下退出,则会调用非增量搜索。

键入 Mc 以切换搜索是否区分大小写。键入 Ms i 以在不可见文本中切换搜索。键入 Mr 以切换正则表达式模式。键入 Ms w 切换单词模式。键入 Ms _ 以切换符号模式。键入 Ms ' 切换字符折叠。

键入 Ms SPC 以切换空白匹配。在增量搜索中,一个或多个空格通常匹配由变量“search-whitespace-regexp”定义的任何空格;另请参见变量“isearch-lax-whitespace”和“isearch-regexp-lax-whitespace”。

键入 Ms e 以编辑 minibuffer 中的搜索字符串。

还支持前 16 个搜索字符串的搜索环。键入 Mn 以在搜索环中搜索下一项。键入 Mp 以在搜索环中搜索上一项。键入 CMi 以使用搜索环完成搜索字符串。

键入 M-% 以使用要从最后一个搜索字符串替换的字符串运行“查询替换”。键入 CM-% 以使用最后一个搜索字符串运行“query-replace-regexp”。键入 Ms o 以运行显示最后一个搜索字符串的“发生”。键入 Ms hr 以运行突出显示最后一个搜索字符串的“highlight-regexp”。

键入 Ch b 以显示所有 Isearch 键绑定。键入 Ch k 以显示 Isearch 键的文档。键入 Ch m 以显示 Isearch 模式的文档。

于 2019-02-21T17:45:54.573 回答