Подтвердить что ты не робот

Поиск отмеченного (выбранного) текста в Emacs

Я использую emacs для просмотра и редактирования кода и других текстовых файлов. Я хотел знать, есть ли способ поиска вперед или назад для текста, который помечен в текущем буфере. Подобно тому, что я могу сделать в блокноте или на клавиатуре. Как и в я могу отметить некоторый текст в буфере и сделать C-s или C-r и иметь возможность выполнять поиск с отмеченным текстом без фактического ввода всего текста поиска?

Спасибо,

Рохит

4b9b3361

Ответ 1

Да. M-W (чтобы получить копию выделенного текста) C-s <RET> C-y <RET>. Затем повторите C-s по мере необходимости. Аналогично для C-r.

Ответ 2

@Alex называет это.

Другим вариантом, который я использую довольно часто, является C-s C-w для поиска слова после текущей метки. Нажатие C-w многократно увеличивает поиск с помощью дополнительных слов (например, C-s C-w C-w C-w выполняет поиск трех слов после текущей метки).

Аналогично, C-s C-y выполняет поиск остальной части строки после текущей метки и C-s C-M-y выполняет поиск символа после метки. Они повторяются одинаково.

Ответ 3

Я использую следующее, у которого нет необходимости вводить более одного последовательного 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)

Ответ 4

Самая короткая последовательность клавиш для этого - M - w C - s M - y.

Ответ 5

Другие ответы описывают поиск скопированного текста или поиск слова в точке. Но ни один из них на самом деле не описывает, как "искать с отмеченным текстом".

Добавление следующего крючка сделает его таким, чтобы выделенный в данный момент текст являлся текстом, используемым для 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.

Ответ 6

Для этого существует отличная функция: 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) в файле инициализации.

Ответ 7

Ответы выше (в том числе принятые) слишком громоздки ИМХО. Я нашел следующую информацию и понравился лучше:

"Ctrl + s Ctrl + w". Это будет искать текущее слово, но вы должны двигаться сначала наведите курсор на начало слова.

http://xah-forum.blogspot.com/2009/08/search-word-under-cursor-in-emacs.html