Поиск отмеченного (выделенного) текста в Emacs - PullRequest
44 голосов
/ 15 октября 2008

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

Спасибо,

Рохит

Ответы [ 8 ]

98 голосов
/ 15 октября 2008

@ Алекс гвоздями.

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

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

31 голосов
/ 15 октября 2008

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

17 голосов
/ 13 августа 2012

Я использую следующее, для которого не нужно вводить более одного последовательного C, чтобы найти более поздние случаи:

    (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)
6 голосов
/ 14 августа 2015

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

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

5 голосов
/ 15 октября 2008

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

3 голосов
/ 21 апреля 2016

Для этого есть отличная функция: isearch-forward-symbol-at-point. Он выделяет все вхождения слова, где находится ваша точка - нет необходимости помещать точку в начале слова. Затем вы можете перейти к следующему или предыдущему с помощью C-s или C-r.

Обратите внимание, что это точное совпадение: если вы используете его на hi, оно не будет совпадать, например, chill.

Я сопоставил, если command-f (Mac OSX): (global-set-key (kbd "s-f") 'isearch-forward-symbol-at-point) в файле инициализации.

2 голосов
/ 15 марта 2015

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

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

http://xah -forum.blogspot.com / 2009/08 / поиск слово-под курсором-в-emacs.html

0 голосов
/ 21 февраля 2019

Вы можете найти помощь C-s, выполнив C-h k C-s, и там написано:

Введите DEL, чтобы отменить последний элемент ввода в конце строки поиска. Тип RET выйти, оставив точку в найденном месте. Введите LFD (C-j), чтобы соответствовать концу линии. Введите C-s для поиска снова вперед, C-r для поиска снова в обратном направлении. Введите C-w, чтобы восстановить следующее слово или символ в буфере на конец строки поиска и поиск по ней. Введите C-M-w для удаления символ с конца строки поиска. Наберите C-M-y, чтобы вытащить чар из поместите буфер в конец строки поиска и найдите его. Тип M-s C-e для вставьте остаток строки в конец строки поиска и найдите ее. Тип C-y, чтобы вырвать последнюю строку убитого текста. Введите M-y, чтобы заменить строку просто дернул в строку поиска с убитой строкой перед ним. Тип C-q процитировать контрольный символ для его поиска. Введите C-x 8 RET, чтобы добавить символ для поиска по имени Unicode, с завершением. С-г пока поиск или при неудачном поиске отменяет ввод обратно к тому, что имеет был найден успешно. C-g при успешном поиске прерывается и перемещает точку в начальную точку.

Если вы попытаетесь выйти с пустой строкой поиска, она вызовет необязательный поиск.

Введите M-c для переключения чувствительности поиска к регистру. Введите M-s i для переключения поиск по невидимому тексту. Введите M-r, чтобы включить режим регулярного выражения. Введите M-s w, чтобы переключить режим слова. Введите M-s _ для переключения режима символов. Тип M-s для переключения свертывания символов.

Введите M-s SPC для переключения поиска пробелов. В дополнительных поисках пробел или пробелы обычно соответствуют любому пробелу, определенному переменная «search-whitespace-regexp»; см. также переменные «Isearch-lax-whitespace» и «isearch-regexp-lax-whitespace».

Введите M-s e для редактирования строки поиска в минибуфере.

Также поддерживается кольцо поиска из предыдущих 16 строк поиска. Введите M-n, чтобы найти следующий элемент в поисковом кольце. Тип М-р до поиск предыдущего элемента в поисковом кольце. Тип C-M-i для заполните строку поиска, используя поисковое кольцо.

Введите M-% для запуска «query-replace» со строкой для замены из последней строка поиска. Введите C-M-% для запуска run query-replace-regexp ’с последним строка поиска. Наберите M-s o, чтобы запустить «происходит», который показывает последний поиск строка. Введите M-s hr для запуска «highlight-regexp», который выделяет последняя строка поиска.

Введите C-h b, чтобы отобразить все привязки ключей Isearch. Введите C-h k для отображения документация по ключу Isearch. Введите C-h m для отображения документации Режим поиска.

...