Chọn (nghĩa là theo vùng), kết quả khớp hiện tại trong tìm kiếm gia tăng


9

Khi tìm kiếm một chuỗi với C-s, tôi muốn có thể nhấn một số phím để thoát chế độ tìm kiếm nhưng vẫn duy trì lựa chọn đối sánh. Bằng cách đó tôi có thể ngay lập tức bắt đầu gõ và thay thế trận đấu cuối cùng.

Ví dụ: giả sử tôi có tài liệu sau:

The quick brown fox jumps over the lazy dog.

Nếu tôi tìm kiếm "lười biếng", emacs sẽ chọn từ đó như vậy (dấu ngoặc vuông là lựa chọn, ống là con trỏ):

The quick brown fox jumps over the [lazy|] dog.

Bây giờ, nếu tôi nhấn return, emacs sẽ duy trì vị trí con trỏ của tôi, nhưng nó sẽ bỏ chọn "lười biếng":

The quick brown fox jumps over the lazy| dog.

Thay vì điều này, tôi muốn một phím tắt sẽ thoát khỏi chế độ tìm kiếm nhưng duy trì lựa chọn đối sánh hiện tại, như ở trạng thái thứ hai ở trên.


Không phải là M-x query-replacenhững gì bạn đang tìm kiếm?
Nsukami _

1
@Nsukami_ Tôi không phải lúc nào cũng biết truy vấn của mình là gì hoặc thậm chí là những gì tôi muốn thay thế nó trước khi tôi tìm kiếm. Việc đánh C-svà nhập những gì tôi nghĩ tôi muốn tìm kiếm sẽ dễ dàng hơn nhiều , sau đó thay đổi truy vấn w / backspace thành 0 trong điều tôi muốn thay đổi. Sau đó, tôi chơi xung quanh với chính xác những gì tôi muốn thay thế nó. M-%quá "trang trọng".
Ben

Giải pháp này có ích cho tôi, như khi tôi tìm kiếm một từ để giết nó và sau đó kéo nó đến một nơi khác. query-replacekhông giải quyết điều này.
GergelyPolonkai

Câu trả lời:


7

Đây là một cách tiếp cận:

(defun isearch-exit-mark-match ()
  "Exit isearch and mark the current match."
  (interactive)
  (isearch-exit)
  (push-mark isearch-other-end)
  (activate-mark))

(define-key isearch-mode-map (kbd "<C-return>") #'isearch-exit-mark-match)

Điều này liên kết một khóa khác (trả về C) để thoát khỏi tìm kiếm hiện tại và cũng để lại kết quả khớp cuối cùng được chọn. Điều này sẽ làm việc với isearch-forward-regexplà tốt, đó là tiện dụng.


1
Tôi nhận được "Định nghĩa hàm của Symbol là void: bind-key." Nơi bind-keyđến từ đâu?
Ben

1
Xin lỗi, bind-keyđến từ một thư viện khác. Thay vào đó, tôi đã thay đổi câu trả lời để sử dụng define-keychức năng tích hợp sẵn.
glucas

4

Library Isearch + cho phép bạn thực hiện điều đó một cách dễ dàng và thậm chí bật / tắt nó khi đang di chuyển.

  • Tùy chọn không phải isearchp-set-region-flagtự động đặt khu vực (lựa chọn) xung quanh mục tiêu tìm kiếm cuối cùng khi bạn thoát khỏi tìm kiếm.

  • Lệnh isearchp-toggle-set-region, bị ràng buộc M-s M-SPCtrong tùy chọn bật tắt tìm kiếm isearchp-set-region-flag.

  • Lệnh set-region-around-search-targettự đặt vùng xung quanh mục tiêu tìm kiếm cuối cùng. (Vì vậy, ngay cả khi tùy chọn không được đặt, vì vậy bạn không có lựa chọn tự động, bạn có thể thực hiện thủ công.)


Thư viện Replace + cho phép bạn làm điều tương tự cho query-replacevv Nó đưa khu vực xung quanh (ví dụ, lựa chọn) thay thế cuối cùng xảy ra. Nó sử dụng cùng một tùy chọn, isearchp-set-region-flagđể kiểm soát điều này và lệnh set-region-around-search-targetcó tác dụng tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.