首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Isearch区域,如果活动emacs

Isearch区域,如果活动emacs
EN

Stack Overflow用户
提问于 2012-10-27 06:43:07
回答 1查看 580关注 0票数 2

有没有办法告诉isearch搜索活动区域,如果有的话?否则,请定期提示输入字符串。

编辑: 27.10.12

我最终使用了以下函数:

代码语言:javascript
复制
(defun er/isearch-word-at-point ()
  (interactive)
  (call-interactively 'isearch-forward-regexp))

(defun er/isearch-yank-word-hook ()
  (when (equal this-command 'er/isearch-word-at-point)
    (let ((string (concat "\\<"
                          (buffer-substring-no-properties
                           (progn (skip-syntax-backward "w_") (point))
                           (progn (skip-syntax-forward "w_") (point)))
                          "\\>")))
      (if (and isearch-case-fold-search
               (eq 'not-yanks search-upper-case))
          (setq string (downcase string)))
      (setq isearch-string string
            isearch-message
            (concat isearch-message
                    (mapconcat 'isearch-text-char-description
                               string ""))
            isearch-yank-flag t)
      (isearch-search-and-update))))

(defun er/isearch-yank-region ()
  (interactive)
  (isearch-yank-internal (lambda () (mark))))

(define-key isearch-mode-map (kbd "C-r") 'er/isearch-yank-region)
(define-key isearch-mode-map (kbd "C-t") 'er/isearch-word-at-point)

第一个是我在网上某个地方找到的一个函数,将光标下的单词标记为搜索词(类似于vim中的*和#),然后直接跳到下一个出现的地方,第二个是@Oleg的答案。

编辑#2

实际上,为什么不把它们结合在一起来获得超甜味呢?好的!

代码语言:javascript
复制
(defun er/isearch-word-or-region-at-point ()
  (interactive)
  (if (region-active-p)
      (isearch-yank-internal (lambda () (mark)))
  (call-interactively 'isearch-forward-regexp)))

(defun er/isearch-yank-word-hook ()
  (when (equal this-command 'er/isearch-word-or-region-at-point)
    (let ((string (concat "\\<"
                          (buffer-substring-no-properties
                           (progn (skip-syntax-backward "w_") (point))
                           (progn (skip-syntax-forward "w_") (point)))
                          "\\>")))
      (if (and isearch-case-fold-search
               (eq 'not-yanks search-upper-case))
          (setq string (downcase string)))
      (setq isearch-string string
            isearch-message
            (concat isearch-message
                    (mapconcat 'isearch-text-char-description
                               string ""))
            isearch-yank-flag t)
      (isearch-search-and-update))))
(add-hook 'isearch-mode-hook 'er/isearch-yank-word-hook)
(define-key isearch-mode-map (kbd "C-r") 'er/isearch-word-or-region-at-point)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-27 12:26:06

问得好。

似乎在Emacs中没有这样的可能性。您可以自己实现它

代码语言:javascript
复制
(defun isearch-yank-region ()
  (interactive)
  (isearch-yank-internal (lambda () (mark))))


(define-key isearch-mode-map "\C-r" 'isearch-yank-region)

现在您选择一个区域,调用incremental search C-s并拖动区域C-r。然后,您可以继续增量搜索C-s

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13095405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档