Làm thế nào để đánh dấu tất cả các lần xuất hiện của một từ trong bộ đệm Emacs?


83

Notepad ++ có một tính năng tiện lợi: nếu bạn chọn một từ trong văn bản của mình (không nhất thiết phải là một từ khóa), từ đó sẽ được tô sáng trong toàn văn bản. Điều này có thể được thực hiện trong Emacs không? Và nếu vậy, làm thế nào?

Nó không nhất thiết phải hoạt động chính xác như Notepad ++ (tức là thông qua lựa chọn); lý tưởng nhất, tôi muốn thiết lập một liên kết khóa làm cho tất cả các lần xuất hiện của từ dưới con trỏ được đánh dấu.

Sẽ rất tuyệt nếu các điểm nổi bật là vĩnh viễn, tức là, việc di chuyển điểm ra khỏi từ được đánh dấu sẽ không làm cho phần đánh dấu bị xóa.

Ngoài ra, sẽ hữu ích nếu có một giải pháp giúp bạn có thể điều hướng giữa các điểm nổi bật (sử dụng liên kết khóa tùy chỉnh).

Câu trả lời:


41

Có thể highlight-Symbol.el tại http://nschum.de/src/emacs/highlight-symbol/ là thứ bạn đang tìm kiếm:

văn bản thay thế


1
Tôi đã thử nhưng không thể hoạt động - emacs đã phàn nàn về "Giá trị của biểu tượng khi biến là void: highlight-Symbol-id-delay".
Headcrab

1
Tôi đã có một vấn đề cụ thể. Tôi đã kết thúc nhận xét toàn bộ phần (xóa tùy chỉnh highlight-biểu tượng-nhàn rỗi-độ trễ ...) và di chuyển (làm mờ điểm nổi bật-biểu tượng-nhàn rỗi-độ trễ ...) trước (làm mờ điểm nhấn-biểu tượng-cập nhật-hẹn giờ ... ), điều này sẽ tránh được lỗi.
polyglot

1
Vâng, cuối cùng tôi đã làm điều tương tự.
Headcrab

1
Xin lỗi, nhưng tôi không thấy cần thiết phải thêm gói bên ngoài cho tác vụ này! Xem bài đăng của jrockway.
mefiX

4
@mefiX: chức năng tích hợp rất tốt cho các mục đích sử dụng đơn lẻ. Gói bên ngoài thêm vào sự tiện lợi của (trong số những người khác) đánh dấu từ dưới con trỏ chỉ bằng 1 lần nhấn phím, cũng như tự động thay đổi màu tô sáng cho các từ khác nhau. Có, bạn có thể làm điều đó với chức năng tích hợp, nhưng tại sao lại lãng phí hàng phút và hàng trăm lần gõ phím thay vì chỉ vài giây và các lần nhấn phím, nếu đó là điều bạn thường xuyên làm? Bất kỳ ai phản đối có vẻ thiển cận: ai đó có thể thấy gói này hữu ích, ngay cả khi bạn không.
polyglot

85

Các hi-lockđề xuất là tốt. Tôi nghĩ rằng việc sử dụng các M-xphiên bản sẽ dễ dàng hơn :

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

highlight-phrasechỉ là một chút đường xung quanh highlight-regexpmà bỏ qua chữ hoa chữ thường và dịch một khoảng trắng trong regex để khớp với khoảng trắng tùy ý. Tiện dụng.


23
Để xóa phần nổi bật, hãy sử dụng: M-x unhighligh-regexkey-chord: C-x w r... Ngoài ra, cụm từ đánh dấu không hoàn toàn phân biệt chữ hoa chữ thường. Chỉ viết thường chữ cái đầu tiên (của các từ) ae không phân biệt chữ hoa và chữ thường. (Tôi cho rằng nó được dự định để giải quyết fredvs Fred) .. ví dụ như nó tạo ra một regex như:[Cc]at[ ]+[Dd]og
Peter.O

Cảm ơn, tôi thấy nhận xét của bạn về sự khác biệt rõ ràng hơn so với trợ giúp tích hợp sẵn.
Joshua Goldberg

1
Lưu ý: Đánh máy: Nên unhighlight-regexpthay vì unhighligh-regex(thiếu tp).
Zelphir Kaltstahl 19/02/17

36

Nhập C-s, sau đó nhập từ hoặc loại hiện tại C-w. Như một phần thưởng, bây giờ bạn có thể nhấn C-slại để tìm kiếm từ.

Đây được gọi là tìm kiếm gia tăng .


11
Đối với những gì nó đáng giá, bây giờ tôi nhận ra mục đích của câu hỏi: bạn muốn các lần xuất hiện được đánh dấu "vĩnh viễn" (cho đến khi bạn tắt nó) ngay cả khi bạn làm công việc khác như di chuyển xung quanh, đánh máy, v.v. Đối với điều này, Cs (tìm kiếm gia tăng ) sẽ không hoạt động (đánh dấu là "tạm thời"; bạn có thể di chuyển trong bộ đệm nhưng rất khó để thực hiện công việc chỉnh sửa mới). Tôi sử dụng (và đã ủng hộ) M-x highlight-regexpgiải pháp (và ràng buộc nó với một phím tắt).
ShreevatsaR

15

Những gì tôi sử dụng là nhàn rỗi-highlight

http://www.emacswiki.org/emacs/IdleHighlight

Mx nhàn rỗi-tô sáng đặt bộ hẹn giờ nhàn rỗi đánh dấu tất cả các lần xuất hiện trong vùng đệm của từ dưới điểm.

Để bật nó cho tất cả các chế độ lập trình, trong ~/.emacs.d/init.el:

;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))

Tôi đã có một số mâu thuẫn với các móc bên trong của lambda. Có lẽ hãy xem xét việc gọi một lời nói xấu.
Darryl Hebbes

10

Biểu tượng ánh sáng sẽ làm nổi bật bất kỳ điểm biểu tượng nào kết thúc.

Ngoài ra, bạn có thể sử dụng hàm xảy ra , liệt kê tất cả các dòng khớp với một regexp. Thật hữu ích để xem nhanh tất cả các hàm trong một lớp.


Điều này có vẻ rất hay, nhưng làm thế nào nó biết liệu nó đã tìm thấy cùng một biểu tượng hay một biểu tượng khác có cùng tên?
HelloGoodbye

6

Hãy thử http://www.emacswiki.org/emacs/msearch.el Tất cả các lần xuất hiện của văn bản được chọn bằng con trỏ đều được đánh dấu. Bạn phải kéo qua chuỗi mà bạn muốn đánh dấu. Điều đó cho phép bạn dễ dàng thay đổi lựa chọn mà không cần thay đổi vùng đánh dấu.

Nếu bạn muốn duy trì điểm nổi bật của một chuỗi, bạn có thể đóng băng nó.

Bạn có thể nô dịch một bộ đệm sang một bộ đệm khác. Văn bản được chọn trong bộ đệm chính cũng sẽ được đánh dấu trong bộ đệm phụ. Điều đó rất hữu ích để so sánh các bộ đệm. Nó cũng hữu ích để ghi chú trong một bộ đệm trong khi bạn điều tra văn bản trong một bộ đệm khác. Bạn có thể có một bộ sưu tập các từ khóa trong vùng đệm ghi chú. Kéo qua một từ khóa như vậy và sự xuất hiện của nó trong văn bản được điều tra sẽ được đánh dấu.

Tôi đang sử dụng công cụ này trong nhiều năm nay. Tôi đã thêm việc đóng băng gần đây. Vì vậy, có thể một cái gì đó đã bị hỏng. Nếu đúng như vậy, hãy để lại cho tôi một ghi chú trên http://www.emacswiki.org/emacs/msearch hoặc tại đây.


5

Điều này có thể không tốt đẹp như những gì bạn hy vọng nhưng nếu bạn đặt

(global-hi-lock-mode 1)

trong .emacstệp của bạn, sau đó bạn có thể nhập C-x w h REGEX <RET> <RET>để đánh dấu tất cả các lần xuất hiện REGEXC-x w r REGEX <RET>để đánh dấu lại chúng. Một lần nữa, không trang nhã như bạn có thể muốn, nhưng nó sẽ hoạt động.



5

Không ai đề cập đến symbol-overlaychế độ . Về cơ bản nó là một bản viết lại tốt hơn highlight-symbol-mode. "Tốt hơn" như trong, thiếu lỗi của biểu tượng đánh dấu ban đầu (chẳng hạn như đánh dấu tạm thời bị kẹt hoặc đánh dấu tạm thời biến mất khi di chuyển bên trong từ được đánh dấu; hoặc không thể đánh dấu các biểu tượng như thế *) , được tích hợp và duy trì tốt hơn. Xem đoạn "Ưu điểm" của README của nó.

Bạn có thể cài đặt nó như bình thường, với M-xpackage-install (đảm bảo cập nhật danh sách gói trước với package-list-packages) . Để tham khảo, ở dưới cùng, tôi đã đính kèm mã, tôi sử dụng để bật chế độ và tắt một số tính năng nâng cao hơn mà bạn có thể muốn hoặc có thể không muốn.

Notepad ++ có một tính năng tiện lợi: nếu bạn chọn một từ trong văn bản của mình (không nhất thiết phải là một từ khóa), từ đó sẽ được tô sáng trong toàn văn bản. Điều này có thể được thực hiện trong Emacs không? Và nếu vậy, làm thế nào?

Sau khi bạn bật overlay-symbol, các lần xuất hiện trên màn hình sẽ được hiển thị cho mọi từ mà bạn đặt con trỏ sau khi hết thời gian chờ (thời gian chờ theo mặc định là 0,5 giây, có thể được cấu hình bằng symbol-overlay-idle-timebiến) . Nếu một từ không được đánh dấu, điều này có nghĩa là chỉ có một từ phù hợp trên màn hình (từ mà bạn đặt con trỏ vào) , do đó không cần đánh dấu từ đó.

Sẽ rất tuyệt nếu các điểm nổi bật là vĩnh viễn, tức là, việc di chuyển điểm ra khỏi từ được đánh dấu sẽ không làm cho phần đánh dấu bị xóa.

Để đánh dấu từ dưới con trỏ vĩnh viễn, có một chức năng symbol-overlay-put. Để unhighlight gọi nó một lần nữa.

Trong ví dụ cấu hình của tôi, nó được liên kết với phím Logo+ `.


(require 'symbol-overlay)
(defun enable-symbol-overlay-mode ()
  (unless (or (minibufferp)
              (derived-mode-p 'magit-mode)
              (derived-mode-p 'xref--xref-buffer-mode))
    (symbol-overlay-mode t)))
(define-global-minor-mode global-symbol-overlay-mode ;; name of the new global mode
  symbol-overlay-mode                                ;; name of the minor mode
  enable-symbol-overlay-mode)
(global-symbol-overlay-mode)                         ;; enable it
(global-set-key (kbd "s-`") 'symbol-overlay-put)
(setq symbol-overlay-ignore-functions nil)           ;; don't ignore keywords in various languages
(setq symbol-overlay-map (make-sparse-keymap))       ;; disable special cmds on overlays

symbol-overlay-modechính xác là những gì tôi đang tìm kiếm. Liên kết symbol-overlay-putvới một phím F rất tiện lợi để chuyển đổi vùng đánh dấu của một từ nhất định trên toàn bộ tệp.
Matt Kneiser

2

Các lệnh trong thư viện highlight.el cho phép bạn (bỏ) đánh dấu văn bản phù hợp với regexp (trong trường hợp này là biểu tượng), sử dụng lớp phủ hoặc thuộc tính văn bản. Bạn có thể xoay vòng giữa các lần xuất hiện. Đánh sáng có thể tạm thời hoặc lâu dài. (thông tin thêm) .


2

Hãy thử iedit . Nó đánh dấu từ tại điểm và cho phép bạn chỉnh sửa tất cả các lần xuất hiện của từ đó một cách dễ dàng. Với một tổ hợp phím bổ sung (C- '), nó sẽ ẩn tất cả các dòng không có từ đó trong đó. Rất tiện dụng!


0

Điều này có thể sẽ không làm nổi bật nhưng sẽ tìm kiếm một từ mà bạn không cần phải nhập nó ...

khi bạn đã đạt đến từ bạn muốn tìm kiếm, CS, sau đó đọc toàn bộ từ bằng CW sau đó bạn có thể CS và nó sẽ tìm kiếm từ đó. Trong Emacs của tôi, nó cũng làm nổi bật tất cả các phiên bản trong tài liệu.


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.