我使用emacs查看和编辑代码和其他文本文件.我想知道是否有一种向前或向后搜索当前缓冲区中标记的文本的方法.类似于我在记事本或wordpad中可以做的事情.我可以在缓冲区中标记一些文本并执行Cs或Cr并且能够使用标记的文本进行搜索而无需实际输入整个搜索文本吗?
谢谢,
罗希特
@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-e
之后C-s
).
是. M-W
(获取所选文本的副本)C-s
.然后C-s
根据需要重复.同样的C-r
.
我使用以下,没有必须输入多个连续的Cs以找到以后出现的问题:
(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 "") '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 "") '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- y.