Как выделить все вхождения слова в буфер Emacs?

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

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

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

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

12 ответов

Решение

Может быть, highlight-symbol.el на http://nschum.de/src/emacs/highlight-symbol/ - это то, что вы ищете:

альтернативный текст

hi-lock предложения хорошие. Я думаю, что проще использовать версии Mx:

Mx highlight-regexp RET <REGEXP>

Mx highlight-phrase RET <REGEXP>

highlight-phrase просто немного сахара вокруг highlight-regexp это игнорирует регистр и переводит пробел в регулярное выражение для совпадения с произвольным пробелом. Handy.

Тип C-sзатем введите текущее слово или тип C-w, В качестве бонуса, теперь вы можете нажать C-s снова искать слово.

Это называется пошаговым поиском.

То, что я использую, это холостой ход

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

Mx idle-highlight устанавливает таймер простоя, который подсвечивает все вхождения в буфере слова под точкой.

Чтобы включить его для всех режимов программирования, в ~/.emacs.d/init.el:

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

Световой символ будет подсвечивать любую точку символа, которая закончена.

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

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

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

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

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

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

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

В моем примере конфигурации это связано с ключом 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-map (make-sparse-keymap))       ;; disable special cmds on overlays

Проверьте интерактивное выделение

Должно быть:

C-x w h word

Попробуйте http://www.emacswiki.org/emacs/msearch.el Все вхождения текста, выделенного курсором, подсвечиваются. Вы должны перетащить на строку, которую вы хотите выделить. Это позволяет вам легко изменять выбор без изменения выделения.

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

Вы можете поработить буфер с другим буфером. Текст, выбранный в главном буфере, также будет выделен в ведомом буфере. Это полезно для сравнения буферов. Это также полезно для заметок в одном буфере, когда вы исследуете текст в другом. Вы можете иметь коллекцию ключевых слов в буфере заметок. Перетащите такое ключевое слово, и его вхождения в исследуемом тексте будут выделены.

Я использую этот материал в течение многих лет. Я добавил замораживание совсем недавно. Так что, может быть, что-то сломано. Если это так, оставьте мне записку на http://www.emacswiki.org/emacs/msearch или здесь.

Это может быть не так хорошо, как вы надеялись, но если вы положите

(global-hi-lock-mode 1)

в вашем .emacs файл, то вы можете ввести C-x w h REGEX <RET> <RET> выделить все вхождения REGEX, а также C-x w r REGEX <RET> чтобы снова выделить их. Опять же, не так элегантно, как хотелось бы, но это сработает.

Попробуй иедить. Он выделяет слово в точке и позволяет легко редактировать все его вхождения. С дополнительным нажатием клавиши (C-') он скрывает все строки без этого слова. Очень кстати!

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

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

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

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

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

Другие вопросы по тегам