Làm nổi bật văn bản trong bộ đệm / cửa sổ mở (hiển thị) - tìm kiếm văn bản từ bộ đệm này trong bộ đệm khác


8

Ngay bây giờ, tôi có khung Emacs của mình được phân chia theo chiều dọc và đang xem xét hai bộ đệm khác nhau trong hai cửa sổ.

Tôi muốn đi đến một từ trong một bộ đệm, nhấn một số phím và để các phần của từ đó (nếu có) được tô sáng trong bộ đệm khác , cuộn đến nó nếu cần.

Có cách nào làm được việc này không?

Ảnh chụp màn hình để giải thích

Trong ảnh chụp màn hình ở trên, với con trỏ của tôi ngay trước "thanh" trong bộ đệm bên trái, tôi muốn có thể <làm gì đó> và nhanh chóng xem "thanh" nằm ở đâu trong bộ đệm bên phải.


Lưu ý: Điều này có liên quan đến Làm cách nào để tìm văn bản trên nhiều bộ đệm mở? theo nghĩa là, nếu tôi có thể thực hiện tìm kiếm trên bộ đệm "khác", nó sẽ làm những gì tôi muốn. Nhưng không có câu trả lời nào có chính xác những gì tôi muốn:

  • Các occurgiải pháp dựa trên mở một cửa sổ mới hiển thị các dòng khớp, trong khi tôi muốn giữ hai cửa sổ của mình vẫn hiển thị - Tôi thực sự sẽ tìm trong bộ đệm khác cho bối cảnh xung quanh khớp, vì vậy chỉ hiển thị dòng phù hợp không phải là rất hữu ích.
  • multi-isearch-buffersyêu cầu tôi chỉ định danh sách các bộ đệm mỗi lần tôi muốn thực hiện tìm kiếm này (rất nhiều lần), thay vì tự động chọn nó như hai bộ đệm được hiển thị. Quan trọng hơn, khi tôi bắt đầu từ một cửa sổ và thực hiện isearch, khi tìm thấy kết quả khớp trong bộ đệm khác, nó sẽ hiển thị bộ đệm đó trong cửa sổ này, để cả hai cửa sổ hiển thị cùng một bộ đệm (khác). Sau đó, Cg đặt mọi thứ trở lại và tôi không thể thấy từ được tô sáng trong bộ đệm khác nữa.
  • icicle-search có rất nhiều tính năng mà một trong số chúng có thể thực hiện được, nhưng tôi không thể tìm thấy bất cứ thứ gì sau khi xem qua tài liệu.

Ngay bây giờ, những gì tôi làm là Cs Cw Cs (để thực hiện tìm kiếm trong bộ đệm này), chuyển sang bộ đệm khác, làm Cs Cs (để lặp lại cùng một tìm kiếm ở đó), sau đó chuyển trở lại. Đó là bảy tổ hợp phím, mà tôi có thể ghi lại dưới dạng macro mà tôi đoán. Hãy để tôi làm điều đó. Tuy nhiên, quan tâm để biết nếu có giải pháp khác.
ShreevatsaR

FWIW: C-s C-w C-x o C-s C-skhông có vẻ quá tệ với tôi. (Bạn không cần C-squyền ngay sau C-w.)
vẽ

@Drew: Cảm ơn, ý tưởng sử dụng macro chỉ xảy ra sau khi tôi đăng câu hỏi; bây giờ một macro mà C-s C-w C-x o C-s C-s C-x othực sự có vẻ tốt.
ShreevatsaR

Câu trả lời:


5

Bạn có thể sử dụng gói có tên highlight-globaltừ github nhưng không có trên Melpa (khi viết bài này).

Các highlight-frame-togglechức năng quy định tại pacakge này sẽ đánh dấu từ thời điểm hoặc khu vực được lựa chọn ở khắp mọi nơi trong khung (trong tất cả các bộ đệm). Tuy nhiên, điều này sẽ không thực hiện tự động ghi thành từ được tô sáng mà bạn cần. Nó chọn một màu nổi bật khác khi bạn làm nổi bật nhiều từ hơn mà không xóa các đèn sáng trước đó.

Đây là một ảnh chụp màn hình của nó trông như thế nào:

nhập mô tả hình ảnh ở đây Nhấn vào đây để xem tốt hơn của ảnh chụp màn hình


0

helm có các giao diện có thể thực hiện mục tiêu này, tôi đã ghi lại một Gifcast để trình diễn gói helm-swoop :

Sau khi bắt đầu helm-swooptìm kiếm, tôi có thể thu hẹp các ứng cử viên ít hơn bằng cách nhập các mã thông báo được phân tách bằng không gian hoặc nhấn C-pC-nđể chuyển sang mã tiếp theo cuộn trong bộ đệm đích cùng một lúc.


Như tôi đã nói trong câu hỏi, các giải pháp dựa trên sự cố không phải là điều tôi muốn, vì chúng liệt kê các dòng khớp (và tôi phải tiếp tục đến đó và tương tác với danh sách) thay vì giữ nguyên bộ đệm khác và làm nổi bật văn bản trong đó .
ShreevatsaR

Hmm, bộ đệm khác được giữ nguyên và có thể hiển thị cho bạn ngữ cảnh, nhưng nếu những điểm nổi bật là những gì bạn đang theo đuổi, helm-swoop có thể là điều bạn thích hơn.
wasamasa

OK, chỉnh sửa nó để chứng minh helm-swoop.
wasamasa

Tôi ước tôi có thể làm cho mình rõ ràng hơn. Trong toàn bộ quá trình, tôi không muốn các cửa sổ khác để bao giờ hiển thị bất cứ điều gì khác những gì nó đang hiển thị. Tất cả những gì tôi muốn là nhấn một tổ hợp phím và nhìn thấy trong cửa sổ khác, vì đó là sự xuất hiện (đầu tiên, nói) của từ hiện tại trong bộ đệm khác. (Trong ảnh chụp màn hình của tôi, khi con trỏ của tôi ở "thanh" trong bộ đệm bên trái, tôi muốn nhấn một phím và có thể thấy "thanh" xảy ra ở đâu trong bộ đệm bên phải, với bên phải vẫn hiển thị như cũ.) đánh C-s C-w C-x o C-s C-s C-x o(đó là những gì tôi đang sử dụng bây giờ, và có vẻ thực sự tốt).
ShreevatsaR

Nếu helm có thể làm nổi bật tất cả các lần xuất hiện trong bộ đệm khác (trong khi vẫn cuộn để lần đầu tiên hiển thị trên màn hình), thì điều đó sẽ làm cho nó tốt hơn macro được liên kết với chuỗi 8 lần nhấn phím đó. :-)
ShreevatsaR

0

Làm thế nào về việc sử dụng highlight-regexpđể làm nổi bật biểu tượng hiện tại (hoặc từ, vùng, v.v.) trong cửa sổ khác?

Đây là một vài chức năng có thể làm việc. Người đầu tiên sẽ tìm thấy biểu tượng tại điểm, sau đó nhảy sang cửa sổ khác và tô sáng nó. Cái thứ hai nhảy sang cửa sổ khác và loại bỏ những điểm nổi bật.

 (require 'thingatpt)

 (defun highlight-other-window ()
   (interactive)
   (let ((match (thing-at-point 'symbol t)))
     (when match
       (save-excursion
         (other-window 1)
         (highlight-regexp (regexp-quote match))
         (other-window 1)))))

 (defun unhighlight-other-window ()
   (interactive)
   (save-excursion
     (other-window 1)
     (unhighlight-regexp t) 
     (other-window 1)))

Trong cả hai trường hợp, điều này nhảy trở lại để cửa sổ hiện tại vẫn hoạt động ở cuối. Không chắc chắn nếu đó là những gì bạn muốn, nếu không hãy thực hiện other-windowcuộc gọi cuối cùng .

Các chức năng này cũng có thể được cải thiện bằng cách kiểm tra và khớp với vùng hoạt động; đối phó với trường hợp không có cửa sổ khác nhìn thấy; Vân vân.


Các highlight-frame-togglelệnh đề cập trong câu trả lời khác có vẻ là một phiên bản được đánh bóng hơn về điều này, vì vậy tôi đoán bạn không cần phải cuộn của riêng bạn.
glucas
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.