расширение поиска emacs на другие буферы

Я пытаюсь улучшить функции поиска в моем emacs и разрешить ему поиск в другом окне (когда открыто несколько окон), поиск слова, в котором я сейчас нахожусь, и поиск по щелчку мыши. Для создания следующие функции:

(defun seek-other-tab ()
  (interactive)
   (setq unit (elt (unit-at-cursor 'word) 0) // gets the word at which the cursor is
   (other-window 1) // get to the next window
   (search-forward unit nil nil)))  // search...

и

(defun seek-buffer ()
 (interactive)
 (search-forward (elt (unit-at-cursor 'word) 0))

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

Что касается использования мыши в качестве средства поиска (я подумал о чем-то вроде Alt-mouse для выбора слова и поиска всех его экземпляров - например, Shift-mouse1 в GVIM), я даже не знаю, как назначить щелчок мышью :(

Итак, мои вопросы: как я могу улучшить свои функции, чтобы иметь обходной поиск и выделить выделение \ заставить isearch запомнить поиск, чтобы, по крайней мере, я мог продолжить поиск с помощью C-s? Как я могу сделать третью функцию, которая выбирает слово, затронутое мышью, и ищет экземпляры (желательно, также выделяя)

обновление: режим highlight_symbol - это почти то, что я хотел для использования мыши в качестве поискового устройства:

 (global-set-key [(control shift mouse1)] 'highlight-symbol-at-point)

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


person user2141046    schedule 01.07.2013    source источник


Ответы (2)


Существует multi-isearch в misearch.el, что, вероятно, является хорошей отправной точкой, если не предоставляет все, что вы ищете.

person Andreas Röhler    schedule 01.07.2013
comment
не совсем, это не дает мне того, что мне нужно - неправильный поиск переходит в следующий буфер, только если он не может быть найден в текущем буфере, это не то, что мне нужно. удалось найти режим highlight-symbol, но он также немного уступает функциональности gvim, потому что чужд стандартному isearch. - person user2141046; 02.07.2013
comment
Я думаю, что он дает именно то, что вы хотите - проверьте M-x multi-isearch-buffers и посмотрите ibuffer-do-isearch, чтобы увидеть пример вызова непосредственно из lisp. - person assem; 04.07.2013
comment
Кстати, IBuffer имеет множество отличных функций, вы можете пометить все буферы определенного режима или регулярного выражения, затем запустить isearch, replace-regexp, выполнить и многое другое на них. Я рекомендую (defalias 'list-buffers 'ibuffer), а затем вызываю w / C-x C-b - person assem; 04.07.2013

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

(defalias 'search-other-window (read-kbd-macro "M-b C-s C-w C-x o C-s C-s"))
(global-set-key (kbd "C-=") 'search-other-window)

и получите желаемое, нажав Ctrl- =. он также сохраняет результаты поиска в памяти isearch, так что непрерывные C-s будут продолжать поиск.

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

person user2141046    schedule 03.07.2013