Ответ 1
Да. M-W
(чтобы получить копию выделенного текста) C-s <RET> C-y <RET>
. Затем повторите C-s
по мере необходимости. Аналогично для C-r
.
Я использую emacs для просмотра и редактирования кода и других текстовых файлов. Я хотел знать, есть ли способ поиска вперед или назад для текста, который помечен в текущем буфере. Подобно тому, что я могу сделать в блокноте или на клавиатуре. Как и в я могу отметить некоторый текст в буфере и сделать C-s или C-r и иметь возможность выполнять поиск с отмеченным текстом без фактического ввода всего текста поиска?
Спасибо,
Рохит
Да. M-W
(чтобы получить копию выделенного текста) C-s <RET> C-y <RET>
. Затем повторите C-s
по мере необходимости. Аналогично для C-r
.
@Alex называет это.
Другим вариантом, который я использую довольно часто, является C-s C-w
для поиска слова после текущей метки. Нажатие C-w
многократно увеличивает поиск с помощью дополнительных слов (например, C-s C-w C-w C-w
выполняет поиск трех слов после текущей метки).
Аналогично, C-s C-y
выполняет поиск остальной части строки после текущей метки и C-s C-M-y
выполняет поиск символа после метки. Они повторяются одинаково.
Я использую следующее, у которого нет необходимости вводить более одного последовательного C-s, чтобы найти более поздние вхождения:
(defun search-selection (beg end)
"search for selected text"
(interactive "r")
(kill-ring-save beg end)
(isearch-mode t nil nil nil)
(isearch-yank-pop)
)
(define-key global-map (kbd "<C-f3>") 'search-selection)
Недостатком предыдущего кода является то, что выделенный текст копируется на растяжку. Следующий код не имеет этой проблемы:
(defun search-selection (beg end)
"search for selected text"
(interactive "r")
(let (
(selection (buffer-substring-no-properties beg end))
)
(deactivate-mark)
(isearch-mode t nil nil nil)
(isearch-yank-string selection)
)
)
(define-key global-map (kbd "<C-f3>") 'search-selection)
Самая короткая последовательность клавиш для этого - M - w C - s M - y.
Другие ответы описывают поиск скопированного текста или поиск слова в точке. Но ни один из них на самом деле не описывает, как "искать с отмеченным текстом".
Добавление следующего крючка сделает его таким, чтобы выделенный в данный момент текст являлся текстом, используемым для isearch:
(defun jrh-isearch-with-region ()
"Use region as the isearch text."
(when mark-active
(let ((region (funcall region-extract-function nil)))
(deactivate-mark)
(isearch-push-state)
(isearch-yank-string region))))
(add-hook 'isearch-mode-hook #'jrh-isearch-with-region)
Совет. Это хорошо сочетается с expand-region.
Для этого существует отличная функция: isearch-forward-symbol-at-point
. В нем освещаются все вхождения слова, в котором находится ваша точка, - нет необходимости размещать точку в начале слова. Затем вы можете перейти к следующему или предыдущему с помощью C-s или C-r.
Обратите внимание, что это точное совпадение: если вы используете его на hi
, оно не будет соответствовать chill
, например.
Я отобразил if на command-f
(mac OSX): (global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point)
в файле инициализации.
Ответы выше (в том числе принятые) слишком громоздки ИМХО. Я нашел следующую информацию и понравился лучше:
"Ctrl + s Ctrl + w". Это будет искать текущее слово, но вы должны двигаться сначала наведите курсор на начало слова.
http://xah-forum.blogspot.com/2009/08/search-word-under-cursor-in-emacs.html