IncSearch — быстрый поиск в редакторе

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by John Doe »

Инкрементальный поиск — это поиск без диалогового окна.
Введённый текст отображается в строке статуса и ищется сразу по мере его набора.

Управление:
  • RAlt — включить режим инкрементального поиска.
    Если в текущей строке есть выделенный текст — он подхватывается.
  • BS — удалить последний введённый символ.
    При пустой строке: восстановить предыдущую строку.
  • CtrlBS — очистить строку поиска.
  • ShiftIns/CtrlV — вставить строку из буфера обмена.
  • RCtrl/ShiftF7/F3/Enter — найти следующее вхождение строки.
  • LCtrl/AltF7/ShiftF3/ShiftEnter — найти предыдущее вхождение строки.
  • Нажатие любой алфавитно-цифровой (или символьной) клавиши добавляет символ к искомой строке.
  • Нажатие любой функциональной клавиши отключает режим поиска, клавиша передаётся фару.
    (Это касается клавиш управления курсором, и всех клавиш с модификаторами Ctrl/Alt/Shift).
  • Для прекращения поиска можно также воспользоваться повторным нажатием RAlt.
  • Esc — прекращает поиск и восстанавливает исходную позицию.
  • AltRight — расширяет выделение до конца слова.
Немодальный поиск:
  • Активируется нажатием RAlt+буква (точнее символ слова: \w), или RAltSpace.
    Набирать текст нужно удерживая RAlt.
    При отпускании RAlt поиск завершается.
  • Даже после отпускания вернуться в позицию "до поиска" можно с помощью макроса на RAltBS.
  • Кроме того, поиск можно активировать нажатием RAlt+LCtrl / RAlt+RCtrl.
    В этом случае продолжается предыдущий поиск (назад / вперёд).
  • Доступны те же шорткаты, что и в обычном режиме, за исключением изменения опций.
    Чтобы работал Esc (т.е. Alt-Esc) — можно воспользоваться XKeys.
В данной реализации используются функции встроенного поиска FAR, или функции плагинов LuaFAR Search / EdtFind, если доступны
(можно запретить useLFSearch = false/useEdtFind = false).
Использование указанных плагинов позволяет выделить сразу все вхождения строки в тексте.

Настройка:
  • В начале скрипта в переменной options можно задать умолчания для параметров WholeWords, RegExp, CaseSensitive
    В процессе поиска значения можно изменить шорткатами Alt-W/G/C.
  • Специальный режим поиска: ExtraQuick: каждое нажатие не только прибавляет символ к строке поиска, но и ищет следующее вхождение.
    Активируется параметром ExtraQuick в начале скрипта, или шорткатом Alt-Q.
  • Назначив переменную useBM можно активировать установку закладки при начале поиска (при этом по Esc позиция не восстанавливается)


Актуальная версия:
raw | zip
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by John Doe »

Latest post of the previous page:

Закешировалось видимо. Возьмите тут https://gist.githubusercontent.com/john ... Search.lua
https://t.me/FarManager — Telegram чат
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

IncSearch — быстрый поиск в редакторе

Post by dmitrik »

Я не понимаю логику работы. В тексте есть несколько вхождений строки. Например, слово services. Перехожу в режим быстрого поиска и начинаю набирать. s переводит на первое вхождение в текст этой буквы. Допустим, как раз на первое вхождение services. Ок. Добавляю e. Ожидаю: выделится se в этом же services. Реальность: он перескакивает на следующее вхождение services и уже там выделяет se. И так далее с каждой новой набранной буквой.

Так задумано или это баг?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by John Doe »

@dmitrik
Чтобы было так как вы ожидаете измените опцию ExtraQuick = false,
https://t.me/FarManager — Telegram чат
dmitrik
Posts: 124
Joined: Mon 30 Nov, 2009 21:58
Has thanked: 1 time
Been thanked: 4 times

IncSearch — быстрый поиск в редакторе

Post by dmitrik »

Понял, спасибо.
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

IncSearch — быстрый поиск в редакторе

Post by ccaid »

John Doe, при использовании плагина LFSearch, если у него выключена установка [ ] Select found text, не удается отключить в скрипте сверхбыстрый поиск: на ввод каждого дополнительного символа продвигаемся на следующее вхождение.
Фар делают добрые люди
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

IncSearch — быстрый поиск в редакторе

Post by HaRT »

В сборке Фара 6096 скрипт перестал работать со встроенным поиском — очевидно, из-за реорганизации диалога. Лечится .
Last edited by HaRT on Tue 24 Jan, 2023 20:40, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by John Doe »

v2.14: support AltGr as activator
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by John Doe »

v2.15: CtrlA to show all matches in dialog
https://t.me/FarManager — Telegram чат
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

IncSearch — быстрый поиск в редакторе

Post by ccaid »

John Doe,
строка для продолжения поиска в плагине LuaFAR Search не обновляется поиском в скрипте IncSearch.
открываю диалог поиска плагина, что-то ввожу, ищу и нахожу.
перехожу в начало текста, активирую скрипт, ввожу что-то другое, происходит переход к найденному, нажимаю F3, происходит переход к другому вхождению искомого.
нажимаю стрелку вверх (скрипт деактивируется), активирую продолжение поиска плагина — он находит не то, что я искал скриптом, а то, что искал напрямую из плагина.
с плагином EdtFind и фаровским поиском такого не происходит — что искали в скрипте, то они и продолжают искать.
Фар делают добрые люди
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

IncSearch — быстрый поиск в редакторе

Post by HaRT »

ccaid wrote: Thu 04 May, 2023 21:13 строка для продолжения поиска в плагине LuaFAR Search не обновляется поиском в скрипте IncSearch
А у вас при проверке скрипт точно работал именно через LuaFAR Search, а не через EdtFind?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by John Doe »

ccaid wrote: Thu 04 May, 2023 21:13 строка для продолжения поиска в плагине LuaFAR Search не обновляется поиском в скрипте IncSearch.
Пользуюсь именно им. Убедитесь что у вас актуальные версии плагина и скрипта.
https://t.me/FarManager — Telegram чат
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

IncSearch — быстрый поиск в редакторе

Post by ccaid »

John Doe wrote: Thu 04 May, 2023 22:05 Убедитесь что у вас актуальные версии плагина и скрипта.
перед тем как рапортовать, я так и делал. я взял крайний фар (x86), крайний плагин и скрипт v2.15, сделал чистую локальную дефолтовую конфигурацию — и получил тот же эффект. поиск и продолжение поиска из плагина запускал через меню. потом добавил штатные макросы плагина и использовал комбинацию оттуда — вид сбоку.

а вы пробовали повторить в том порядке, как я описывал?
Last edited by ccaid on Fri 05 May, 2023 05:42, edited 1 time in total.
Фар делают добрые люди
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by John Doe »

ccaid wrote: Fri 05 May, 2023 05:41 а вы пробовали повторить в том порядке, как я описывал?
Попробовал, и понял что вы хотите странного.
Дело в том, что
  • в случае фаровского поиска строка запоминается в силу того факта, что это обычное штатное поведение, поскольку (хоть это и скрыто макросом) поиск производится интерактивно.
  • в случае EditFind поиск не интерактивный, а через апи, но автор плагина по своим соображениям сделать именно так (по совпадению - этот вариант вам нравится больше других).
  • LuaFAR Search решил иначе, и выполнение действий через апи не имеет побочных эффектов, не влияет на интерактивную работу плагина.
И во всех трёх случаях у меня нет средств чтобы повлиять на описанное поведение. А если бы были, то я скорее выбрал бы взял за образец поведение LuaFAR Search.
(Например, связанный случай: при поиске через фар я специально использую Far.DisableHistory, чтобы предотвратить добавление строки поиска в историю).

Вы можете попробовать убедить автором плагина LuaFAR Search добавить некую опцию поиска, чтобы при использовании lfsearch.EditorAction в пользовательских скриптах параметры поиска запоминались и применялись бы при интерактивном "Repeat ...".
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by John Doe »

С другой стороны, можно подумать для чего вам вообще вызывать плагин поиска напрямую.
  • Напомню, что в комплекте есть RAlt+LCtrl / RAlt+RCtrl для продолжения поиска
  • Если активировать (модальный) поиск при отсутствующем выделении, то строка будет пустой.
    Но при нажатии BS восстанавливается строка из предыдущего поиска
  • (только что сделал) при пустой строке попытка поиска вперёд/назад/всех вхождений тоже использует строку из предыдущего поиска.
    Это экономит нам одно нажатие BS.
Если этого для ваших целей недостаточно, и действительно удобнее в каком-то сценарии вызвать плагин, то прошу вас подробнее описать что это за сценарий.
Возможно в этом случае стоит сделать макрос, открывающий диалог плагина, и вставляющий строку поиска.
https://t.me/FarManager — Telegram чат
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

IncSearch — быстрый поиск в редакторе

Post by ccaid »

John Doe wrote: Fri 05 May, 2023 16:38 Попробовал, и понял что вы хотите странного.
ну, с моей-то кочки всё наоборот :)

вот я скриптом обнаружил точки интереса, свободно попереходил между ними (F3, ShiftF3), в окрестностях одной из них что-то поделал, желаю возобновить переходы между этими же точками интереса и «интуитивно» пытаюсь воспользоваться теми же комбинациями, и у меня это получается — в случае EdtFind. то есть два разных инструмента под капотом работают в единой связке, и мне не надо в голове хранит две истории поиска: это я искал тем-то, а вот это искал вот тем-то.
John Doe wrote: Fri 05 May, 2023 16:38 LuaFAR Search решил иначе, и выполнение действий через апи не имеет побочных эффектов, не влияет на интерактивную работу плагина.
с толкованием интерактивности есть нюансы. если после инкрементного поиска посредством EdtFind открыть диалог поиска EdtFind, то увидим ту строку, которую мы искали именно из этого диалога, а не из инкрементного поиска — история не изменилась. то есть по этому критерию — влияния на интерактивную работу EdtFind тоже нет. (хотя, является ли это достоинством — отдельная тема.)

а вот продолжение поиска — само по себе основано на побочном эффекте. мы же не видим — что мы будем [продолжать] искать. и с LFsearch при использовании настройки Pick search string from=Don't pick будет происходит не менее странная история. я что-то поискал из диалога LFsearch — неделю назад — теперь поискал через скрипт+LFsearch, вызываю продолжение поиска того же самого LFsearch, и он начинает находить строку из запроса недельной давности. причем из диалога поиска LFsearch напрямую её не видно, надо сообразить открыть историю.
John Doe wrote: Fri 05 May, 2023 17:47 ...
Если этого для ваших целей недостаточно,
ранее наработанные шаблоны использования IncSearch+EdtFind меня настолько устраивали, что я даже не пытался изучать нововведения IncSearch. буду осваивать — всё это очень полезно.

мой вопрос закрыт. благодарю за исчерпывающий ответ.
Post Reply

Return to “Полезные макросы и скрипты”