Как выделить все вхождения слова в буфер Emacs? - PullRequest
70 голосов
/ 22 декабря 2008

Notepad ++ имеет удобную функцию: если вы выбираете слово в тексте (не обязательно ключевое слово), слово выделяется по всему тексту. Можно ли это сделать и в Emacs? И если да, то как?

Это не обязательно должно работать точно так же, как Notepad ++ (т.е. через выборку); в идеале я хотел бы установить привязку клавиш, которая позволяет выделять все вхождения слова под курсором.

Было бы замечательно, если бы выделение было постоянным, то есть перемещение точки от выделенного слова должно , а не вызывать удаление выделения.

Кроме того, было бы полезно, если бы существовало решение, позволяющее перемещаться между выделениями (используя пользовательские привязки клавиш).

Ответы [ 13 ]

0 голосов
/ 23 апреля 2019

Никто не упомянул symbol-overlay режим . Это в основном лучше переписать highlight-symbol-mode. «Лучше», как в случае, отсутствуют ошибки оригинального символа выделения (например, застревание временного выделения или исчезновение временного выделения для перемещения внутри выделенного слова; или невозможность выделить символы, подобные *) , лучше интегрировано и поддерживается. См. Пункт «Преимущества» в README.

Вы можете установить его как обычно, с помощью M-x package-install (предварительно обновите список пакетов с помощью package-list-packages) . Для справки внизу поста есть код из моего конфига для включения режима.

Notepad ++ имеет удобную функцию: если вы выбираете слово в тексте (не обязательно ключевое слово), слово выделяется по всему тексту. Можно ли это сделать и в Emacs? И если да, то как?

После включения overlay-symbol вхождения на экране будут отображаться для каждого слова, на которое вы наведете курсор после тайм-аута (тайм-аут по умолчанию равен 0,5 с, может быть настроен с переменной symbol-overlay-idle-time) . Если слово не выделено, это означает, что на экране есть только одно совпадение (то, на которое вы навели курсор) , следовательно, нет необходимости выделять его.

Было бы замечательно, если бы выделение было постоянным, то есть перемещение точки от выделенного слова не должно приводить к удалению выделения.

Для постоянного выделения слова под курсором есть функция symbol-overlay-put. Чтобы выделить его, позвоните еще раз.

В моем примере конфигурации он связан с Logo + ` key.


(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-map (make-sparse-keymap))       ;; disable special cmds on overlays
0 голосов
/ 23 октября 2018

Этот пакет доступен в Melpa works, вы также можете настроить стиль подсветки.

https://github.com/ignacy/idle-highlight-in-visible-buffers-mode

0 голосов
/ 20 февраля 2018

Это, возможно, не будет выделено, но будет искать слово без необходимости его набирать ...

когда вы достигли слова, которое вы хотите найти, C-S, затем прочитайте полное слово с помощью C-W, тогда вы можете C-S, и оно будет искать его. В моем Emacs он также выделяет все экземпляры в документе.

...