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

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

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

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

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

Ответы [ 13 ]

74 голосов
/ 09 января 2009

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

М-х highlight-regexp RET <REGEXP>

М-х highlight-phrase RET <REGEXP>

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

37 голосов
/ 23 декабря 2008

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

alt text

36 голосов
/ 22 декабря 2008

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

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

13 голосов
/ 28 апреля 2011

То, что я использую, это выделение вхолостую

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

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

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

;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))
10 голосов
/ 22 декабря 2008

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

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

6 голосов
/ 22 августа 2013

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

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

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

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

5 голосов
/ 22 декабря 2008

Проверка Интерактивная подсветка

Должно быть:

C - x ш ч слово

5 голосов
/ 22 декабря 2008

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

(global-hi-lock-mode 1)

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

2 голосов
/ 31 октября 2011

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

2 голосов
/ 05 сентября 2011

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

...