代码之家  ›  专栏  ›  技术社区  ›  Rohit

在Emacs中搜索已标记(选定)的文本

  •  43
  • Rohit  · 技术社区  · 16 年前

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

    非常感谢。

    罗希特

    7 回复  |  直到 13 年前
        1
  •  111
  •   Charles Duffy    6 年前

    @亚历克斯搞定了。

    我经常使用的另一个选择是 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-e 之后 C-s ).

        2
  •  38
  •   Alex Coventry    16 年前

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

        3
  •  17
  •   Marc Haesen    12 年前

        (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)
    

    前面代码的缺点是将选定的文本复制到拉伸中。以下代码没有此问题:

        (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)
    
        4
  •  7
  •   Jackson Ray Hamilton    9 年前

    其他答案描述了如何搜索复制的文本,或者如何在某个点搜索单词。但它们实际上都没有描述如何“用标记的文本进行搜索”

    添加以下钩子将使当前选定的文本成为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 .

        5
  •  5
  •   dpr    7 年前

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

        6
  •  3
  •   laurentmeyer    8 年前

    这有一个很好的功能: isearch-forward-symbol-at-point . 它突出显示您的点所在的单词的所有出现处-无需将点放置在单词的开头。然后您可以使用C-s或C-r移动到下一个或上一个。

    请注意,它是完全匹配的:如果您在 hi 这不相配 chill 例如。

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

        7
  •  2
  •   WestCoastProjects    10 年前

    上面的答案(包括公认的答案)太麻烦了。我发现了以下信息,并且更喜欢它:

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

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

        8
  •  0
  •   Helin Wang    6 年前

    你可以通过做C-h k C-s找到C-s帮助,上面写着:

    键入DEL以取消搜索字符串末尾的最后一个输入项。类型RET 要退出,请在找到的位置离开点。类型LFD(C-j)以匹配端部 当然可以。键入C-s再次向前搜索,键入C-r再次搜索 向后的 上 结束搜索字符串,然后搜索它。键入要删除的C-M-w 搜索字符串末尾的字符。输入C-M-y,将字符从 缓冲到搜索字符串的末尾并搜索它。类型M-s C-e至 将行的其余部分拉到搜索字符串的末尾并搜索它。类型 C-y来拖动最后一串被终止的文本。键入M-y以替换字符串 只是猛拉到搜索提示中,在它之前字符串被杀死了。C-q型 引用控制字符以搜索它。键入C-x 8 RET以添加 按Unicode名称搜索的字符,带完成符。C-g同时 搜索或当搜索失败时,取消返回到已搜索内容的输入 已成功找到。搜索成功时,C-g将中止并

    非增量搜索。

    键入M-c以切换搜索区分大小写。键入M-s i以切换 在不可见文本中搜索。键入M-r以切换正则表达式模式。 键入M-s w以切换单词模式。键入M-s以切换符号模式。类型 M-s'切换字符折叠。

    键入M-s SPC以切换空白匹配。在增量搜索中,一个 一个或多个空格通常与 变量–search whitespace regexp–search;另请参见变量 isearch lax空格和isearch regexp lax空格。

    键入M-s e以编辑微型缓冲区中的搜索字符串。

    还支持前16个搜索字符串的搜索环。 在搜索环中搜索上一项。C-M-i型至 使用搜索环完成搜索字符串。

    键入M-%以运行查询替换,并从上一个字符串替换 搜索字符串。键入C-M-%以使用最后一个 搜索字符串。键入M-s o以运行显示上次搜索的事件 一串键入M-s h r以运行高亮显示 最后一个搜索字符串。

    键入C-h b以显示所有Isearch键绑定。输入C-h k以显示 Isearch密钥的文档。键入C-h m以显示文档 i搜索模式。