Helm: поиск в буфере?


11

Довольно простой вопрос Хелма. Что такое окно / команда / функция Helm, которая позволяет нам искать текст (предпочтительно используя regexp) в буфере любого типа (т. Е. Включая доступный только для чтения, например w3m)?

Другими словами, я ищу Helm-эквивалент нативных команд Emacs для isearch-forward( C-s) / isearch-backward( C-r).

Для иллюстрации: после вызова одной из собственных isearchкоманд ( C-sили C-r) мы можем выйти из режима поиска одним из двух способов:

  1. мы можем выйти и вернуться в исходную точку (через C-g), или

  2. мы можем выйти и продолжить просмотр буфера с текущей точки, т. е. из текущего текста (через, RETсреди прочего).

Я ищу второй из этих двух вариантов.


Вот что я пробовал до сих пор:

  • helm-regexp: это самое близкое к тому, что я ищу, но он выполняет только эквивалент C-s/ C-r+ C-g(т. е. возвращает нас к исходной точке; нет возможности завершить поиск и продолжить просмотр буфера из текущего совпадения точка).

  • helm-do-grep: кажется, что это только для поиска текста в файлах (то есть, не работает на w3m)

  • helm-buffer-run-grep/ -zgrep: выполнение этой команды / функции приводит к появлению сообщения об ошибке в мини-буфере:Running helm command outside of context

  • когда helm-modeвключено, вызывает C-sили C-rвызывает собственную isearchфункцию Emacs (она не заменяется интерфейсом Helm). (может быть, есть настройка, которую мы можем изменить, чтобы Helm мог взять на себя эту команду? то есть, аналогично тому, как Helm принимает собственную команду for write-file( C-x C-w), которую можно использовать для переименования файла в открытом буфере. просто мозговой штурм.)


1
Вы хотите helm-occurс follow-modeвключенным.
Ниспио

Ответы:


16

Вы можете использовать helm-Встречаться как инструмент, который поставляется для этого с основным модулем helm. Но для меня один из лучших инструментов для поиска в буфере на основе руля - это руль Шинго Фукуямы . Вы можете получить его из GitHub и через MELPA. Он обладает необходимыми вам возможностями, чтобы иметь возможность отбросить свою точку в позиции матча (что может быть регулярным выражением). Но вы также можете использовать Cg, чтобы вернуть курсор туда, где вы начали.

На странице helm-swoop github вы найдете целый ряд других полезных функций, предлагаемых этим пакетом (включая поиск в нескольких буферах с помощью helm-multi-swoop и возможность редактирования строк результатов, чтобы изменения применяется к базовому буферу).


Согласен. helm-swoopдействительно улучшенная версия helm-occur.
Ту До

Итак, я немного опоздал на этот фронт. Я пытался helm-swoop... и я никогда не вернусь! Спасибо
айсман

Боже мой, рулевой мах - это что-то не из этого мира.
Лев Уфимцев

5

Вы можете использовать, helm-occurчтобы увидеть все строки, которые содержат совпадения для вашего шаблона поиска. Вы можете использовать C-nи C-pдля навигации по списку, а затем нажмите, RETчтобы закрыть буфер Helm и переместить курсор на соответствующую строку.

Мне нравится включать, helm-follow-modeкогда я использую helm-occurтак, чтобы исходное окно всегда показывало контекст текущего выбранного соответствия. Вы можете включить режим слежения автоматически следующим образом:

(require 'helm-config)

(defvar my-helm-follow-sources ()
  "List of sources for which helm-follow-mode should be enabled")

;; Use helm-follow-mode for the following sources:
(add-to-list 'my-helm-follow-sources 'helm-source-occur)

(defun my-helm-set-follow ()
  "Enable helm-follow-mode for the sources specified in the list
variable `my-helm-follow-sources'. This function is meant to
be run during `helm-initialize' and should be added to the hook
`helm-before-initialize-hook'."
  (mapc (lambda (source)
          (when (memq source my-helm-follow-sources)
            (helm-attrset 'follow 1 (symbol-value source))))
        helm-sources))

;; Add hook to enable helm-follow mode for specified helm 
(add-hook 'helm-before-initialize-hook 'my-helm-set-follow)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.