私が増分検索をemacsで使用するとき、私は完全一致のどこにいるのかわかりません。 Chromeブラウザでは、「2/30」を使用している場所が表示されます。 Emacsでどうしたらいいですか?少なくとも、残念ながらあなたがにしている試合を追跡するために十分にスマートでない場合であっても(試合の合計数を確認するためにisearchingながら"1 of n"がEmacs検索の結果
5
A
答えて
6
これを初めて実装しようとしています。
isearch
が実装している遅延強調表示を使用して、バッファ全体(表示部分だけでなく)を強調表示するようにします。これにより、大きなバッファで検索が遅くなる可能性があります。次に、強調表示された検索結果に対する現在の位置(合計)を含むように表示を更新します。
これは、それが検索され強調表示されているバッファ全体に依存するという欠点があります。また、次の一致までC-sと表示されたときに、ハイライトがはっきりしていても表示が(0 of 1)
に変わることがあります。
しかし、それは合理的な最初のカットと思われる。
大きなカット/ペーストの準備:
(require 'isearch)
(defun lazy-highlight-cleanup (&optional force)
"Stop lazy highlighting and remove extra highlighting from current buffer.
FORCE non-nil means do it whether or not `lazy-highlight-cleanup'
is nil. This function is called when exiting an incremental search if
`lazy-highlight-cleanup' is non-nil."
(interactive '(t))
(if (or force lazy-highlight-cleanup)
(while isearch-lazy-highlight-overlays
(delete-overlay (car isearch-lazy-highlight-overlays))
(setq isearch-lazy-highlight-overlays
(cdr isearch-lazy-highlight-overlays))))
(when isearch-lazy-highlight-timer
(cancel-timer isearch-lazy-highlight-timer)
(setq isearch-message-suffix-add "")
(setq isearch-lazy-highlight-timer nil)))
(defun isearch-lazy-highlight-search()
"Search ahead for the next or previous match, for lazy highlighting.
Attempt to do the search exactly the way the pending Isearch would."
(condition-case nil
(let ((case-fold-search isearch-lazy-highlight-case-fold-search)
(isearch-regexp isearch-lazy-highlight-regexp)
(search-spaces-regexp isearch-lazy-highlight-space-regexp)
(isearch-word isearch-lazy-highlight-word)
(search-invisible nil) ; don't match invisible text
(retry t)
(success nil)
(isearch-forward isearch-lazy-highlight-forward)
(bound (if isearch-lazy-highlight-forward
(min (or isearch-lazy-highlight-end-limit (point-max))
(if isearch-lazy-highlight-wrapped
isearch-lazy-highlight-start
(isearch-window-end)))
(max (or isearch-lazy-highlight-start-limit (point-min))
(if isearch-lazy-highlight-wrapped
isearch-lazy-highlight-end
(isearch-window-start))))))
;; Use a loop like in `isearch-search'.
(while retry
(setq success (isearch-search-string
isearch-lazy-highlight-last-string bound t))
;; Clear RETRY unless the search predicate says
;; to skip this search hit.
(if (or (not success)
(= (point) bound) ; like (bobp) (eobp) in `isearch-search'.
(= (match-beginning 0) (match-end 0))
(funcall isearch-filter-predicate
(match-beginning 0) (match-end 0)))
(setq retry nil)))
success)
(error nil)))
(defun isearch-find-current-overlay()
(let ((total 0)
(count 1)
(olist isearch-lazy-highlight-overlays))
(while olist
(setq total (1+ total))
(if (< (overlay-end (car olist)) (point))
(setq count (1+ count)))
(setq olist
(cdr olist)))
(cons count total)))
(add-hook 'isearch-update-post-hook 'isearch-count-message)
(defun isearch-count-message()
(let ((counts (isearch-find-current-overlay)))
(setq isearch-message-suffix-add (format " (%d of %d)" (car counts) (cdr counts)))))
(defun isearch-window-start()
"force highlight entire buffer"
(point-min))
(defun isearch-window-end()
"force highlight entire buffer"
(point-max))
(defun isearch-lazy-highlight-update()
"Update highlighting of other matches for current search."
(let ((max lazy-highlight-max-at-a-time)
(looping t)
nomore)
(with-local-quit
(save-selected-window
(if (and (window-live-p isearch-lazy-highlight-window)
(not (eq (selected-window) isearch-lazy-highlight-window)))
(select-window isearch-lazy-highlight-window))
(save-excursion
(save-match-data
(goto-char (if isearch-lazy-highlight-forward
isearch-lazy-highlight-end
isearch-lazy-highlight-start))
(while looping
(let ((found (isearch-lazy-highlight-search)))
(when max
(setq max (1- max))
(if (<= max 0)
(setq looping nil)))
(if found
(let ((mb (match-beginning 0))
(me (match-end 0)))
(if (= mb me) ;zero-length match
(if isearch-lazy-highlight-forward
(if (= mb (if isearch-lazy-highlight-wrapped
isearch-lazy-highlight-start
(isearch-window-end)))
(setq found nil)
(forward-char 1))
(if (= mb (if isearch-lazy-highlight-wrapped
isearch-lazy-highlight-end
(isearch-window-start)))
(setq found nil)
(forward-char -1)))
;; non-zero-length match
(let ((ov (make-overlay mb me)))
(push ov isearch-lazy-highlight-overlays)
;; 1000 is higher than ediff's 100+,
;; but lower than isearch main overlay's 1001
(overlay-put ov 'priority 1000)
(overlay-put ov 'face lazy-highlight-face)
(overlay-put ov 'window (selected-window))))
(if isearch-lazy-highlight-forward
(setq isearch-lazy-highlight-end (point))
(setq isearch-lazy-highlight-start (point)))))
;; not found or zero-length match at the search bound
(if (not found)
(if isearch-lazy-highlight-wrapped
(setq looping nil
nomore t)
(setq isearch-lazy-highlight-wrapped t)
(if isearch-lazy-highlight-forward
(progn
(setq isearch-lazy-highlight-end (isearch-window-start))
(goto-char (max (or isearch-lazy-highlight-start-limit (point-min))
(isearch-window-start))))
(setq isearch-lazy-highlight-start (isearch-window-end))
(goto-char (min (or isearch-lazy-highlight-end-limit (point-max))
(isearch-window-end))))))))
(unless nomore
(setq isearch-lazy-highlight-timer
(run-at-time lazy-highlight-interval nil
'isearch-lazy-highlight-update)))))))))
1
ボックスのうち、あなたは oを女史を使用することができます元のバッファ)。
5
私はsawこの他の日:
https://github.com/syohex/emacs-anzu
anzu.elがanzu.vimのEmacsのポートです。 anzu.elはマイナーモードを提供し、現在のマッチとトータルマッチ情報をさまざまな検索モードでモードラインに表示します。
githubページのスクリーンショットは、その機能のgifアニメーションです。
0
emacsのinitファイルに以下を追加してください。カウントマッチの使用にもかかわらず、それは私のラップトップで非常に速く動作します。私は非常に大きなファイルでそれを試していません。
(defun my-isearch-update-post-hook()
(let (suffix num-before num-after num-total)
(setq num-before (count-matches isearch-string (point-min) (point)))
(setq num-after (count-matches isearch-string (point) (point-max)))
(setq num-total (+ num-before num-after))
(setq suffix (if (= num-total 0)
""
(format " [%d of %d]" num-before num-total)))
(setq isearch-message-suffix-add suffix)
(isearch-message)))
(add-hook 'isearch-update-post-hook 'my-isearch-update-post-hook)
関連する問題
- 1. Tour of Heroの検索バーの結果が異なるコンポーネント
- 2. 検索結果と集計結果が1つのビューASP.NETコア
- 3. Javascriptで検索 - 1つの結果エラー
- 4. Tumblr:検索結果が返されない検索結果
- 5. Googleカスタム検索APIの結果が空で、通常の検索の結果が
- 6. 第1回Google検索結果アンドロイドコード
- 7. Ionic - 検索結果の検索バー
- 8. iframeの代替検索結果googleの検索結果
- 9. マルチ(1-n)リレーションテーブルの検索
- 10. PHPでの検索結果のオンオン検索結果
- 11. 検索結果からクリックしたときの検索結果
- 12. Resharperの "検索結果ウィンドウ"でテキスト検索結果を表示
- 13. TiddlyWiki 5:検索結果の末尾による検索結果
- 14. 検索結果ページング
- 15. フィルタ結果リストビュー内の検索結果
- 16. ウェブ検索結果の検索
- 17. H2全文検索の検索結果
- 18. Magento検索結果
- 19. 部分検索結果が返されない部分の検索結果
- 20. ハウツー:ランキングの検索結果
- 21. mvc jqueryページング検索結果が1つのクエリでのみ
- 22. wikipedias APIの検索結果
- 23. Jsoup Google検索の結果
- 24. Javaバイナリ検索の結果が1つ多いですか?
- 25. 1文字検索の結果が表示されない
- 26. クエリ結果のバイナリ検索
- 27. Facebook API検索結果フィルタ
- 28. NPMの検索結果がソート異常
- 29. Googleプレイスの検索結果
- 30. 検索の結果を
ああ、それはかなりきちんとしています。 – phils
isearch-count-message()の '[re] -search- [forward | backward]'をなぜ呼び出さないのですか?このためにオーバーレイをスキャンする必要はありません。 –
'isearch-count-message'が呼び出された時点で、既にバッファ全体で検索が行われているため、検索をもう一度呼び出すと、処理が大幅に遅くなる可能性があります。オーバーレイが存在し、カウント。 検索された語句が頻繁に出現する場合を考えてください。次の出現箇所に50回ジャンプすると、最初から50回目までバッファーをスキャンする必要があります。 '1 + 2 + 3 + ... + 50 = 1275' - 多くの検索で、あなたが50回目に出会ったと判断します。 –