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

谢谢,

罗希特夏尔

有帮助吗?

解决方案

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

其他提示

@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-eC-s之后)。

我正在使用以下内容,而不必再输入一个连续的C-s来查找以后出现的问题:

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

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

添加以下钩子将使得当前选择的文本是用于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)

提示:这与扩展区域很好地配对。

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

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

请注意,它是完全匹配的:如果您在hi上使用它,它将与chill匹配。

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

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

  

<!>#8220; Ctrl + s Ctrl + w <!>#8221;。这将搜索当前单词,但您必须移动   将光标放在第一个单词的开头。

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

你可以通过C-h k C-s找到C-s的帮助,它说:

  

键入DEL以从搜索字符串末尾取消最后一个输入项。输入RET   退出,在找到的位置留下点。输入LFD(C-j)以匹配结束   线。键入C-s再次搜索,C-r再次搜索   向后。 键入C-w将缓冲区中的下一个单词或字符 拖到   搜索字符串的结尾,并搜索它。键入C-M-w以删除   搜索字符串末尾的字符。键入C-M-y以从中抽出char   缓冲到搜索字符串的末尾并搜索它。键入M-s C-e到   将其余行放入搜索字符串的末尾并搜索它。类型   C-y猛拉最后一串被杀死的文字。键入M-y以替换字符串   刚刚进入搜索提示,其中字符串被杀死。键入C-q   引用控制字符来搜索它。键入C-x 8 RET添加a   要完成,按Unicode名称搜索的字符。 C-g而   搜索或搜索失败时取消输入回原点   被发现成功了。搜索成功时的C-g中止和   移动指向起点。

     

如果您尝试退出时搜索字符串仍然为空,则会调用它   非增量搜索。

     

键入M-c以切换搜索区分大小写。键入M-s i切换   搜索隐形文字。键入M-r以切换正则表达式模式。   键入M-s w切换字模式。键入M-s _切换符号模式。类型   M-s'切换字符折叠。

     

键入M-s SPC以切换空白匹配。在增量搜索中,a   空格或空格通常匹配由。定义的任何空格   变量<!>#8216; search-whitespace-regexp <!>#8217 ;;另见变量   <!> 8216#; ISEARCH-不严空白#8217 <!>;和<!>#8216; isearch-regexp-lax-whitespace <!>#8217;。

     

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

     

还支持前16个搜索字符串的搜索环。   键入M-n以搜索搜索环中的下一个项目。键入M-p到   搜索搜索环中的上一个项目。键入C-M-i到   使用搜索环完成搜索字符串。

     

键入M-%以运行<!>#8216; query-replace <!>#8217;用字符串替换上一个   搜索字符串。键入C-M-%以运行<!>#8216; query-replace-regexp <!>#8217;与最后一个   搜索字符串。键入M-s o以运行<!>#8216;发生<!>#8217;显示最后一次搜索   串。输入M-s h r运行<!>#8216; highlight-regexp <!>#8217;这突出了   最后一个搜索字符串。

     

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top