Инкрементальный поиск — это поиск без диалогового окна.
Введённый текст отображается в строке статуса и ищется сразу по мере его набора.
Управление:
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 позиция не восстанавливается)
Идея использования EdtFind позаимствована в теме Быстрый поиск в редакторе (автор ccaid).
Мелкие но неприятные недостатки исходной реализации побудили меня сделать "ещё один быстрый поиск".
John Doe, вспомнил я про ещё одну неприятность при работе через стандартный поиск: при модальном поиске (немодальный я не пробовал), как только вводишь «непродуктивный» символ (т.е. которого следом уже нет), каретка оказывается не за концом найденного (как при вводе «продуктивных» символов), а в начале найденного. Это и визуально смущает (особенно при включённом «кресте»), и на практике неудобно своим неединообразием (если решишь выйти из поиска «на этой остановке»). Сложно ли это исправить?
John Doe wrote: ↑Thu 24 Jan, 2019 09:02[ ] Cursor at the end не подойдёт?
Кстати, спасибо за напоминание. При обычном поиске мне как раз удобнее, когда эта настройка включена. Мешало же мне в основном отсутствие единообразия в пределах одного поиска. Я бы предпочёл, чтобы и инкрементный поиск подчинялся значению этой настройки.
John Doe wrote: ↑Thu 24 Jan, 2019 10:49
настройку сделал
John Doe, в текущей версии (прошлые не смотрел) режим ExtraQuick имеет недочет. после того как мы достигаем последней подходящей подстроки, начинаются проблемы: то не выделяется очередной введенный символ, то очередной символ не вводится в строку поиска.
Last edited by ccaid on Thu 14 Feb, 2019 14:22, edited 1 time in total.
ccaid wrote: ↑Thu 14 Feb, 2019 14:18
то не выделяется очередной введенный символ, то очередной символ не вводится в строку поиска
Поведение и впрямь какое-то странное: по достижении последнего вхождения, чтобы добиться выделения дальнейших символов, находящихся в нём, приходится вводить каждый из них дважды — в первый раз он добавляется в строку поиска, а во второй выделяется (использую встроенный поиск). Удобнее, наверно, было бы и впрямь, если впереди уже ничего не находится, продолжить выделять в текущем вхождении (возможно, с промаргиванием диалога «Не найдено»).
citRiks wrote: ↑Sat 07 Aug, 2021 16:07
а нельзя ли сделать так
Для EditFind: изменить значение на Loop:1
Для lfsearch: добавить bWrapAround=true
EditFind выводит предупреждение о том что поиск начнётся с начала, и это удобно
А lfsearch в этой ситуации к сожалению не даёт обратной связи: в интерфейсе диалога такая опция предусмотрена, а в скриптовом режиме - нет.
..тоже настраивается!
Last edited by John Doe on Sat 07 Aug, 2021 17:33, edited 1 time in total.
при старте поиска искомая строка показывается в шапке редактора;
если искомое не найдено, выводится сообщение и строка остаётся. Т.е Вы можете:
2.1. изменить искомую строку (BackSpace-ом);
2.2. продолжить писк в другом направлении
2.3. прекратить поиск.
buniak_a_h wrote: ↑Sat 07 Aug, 2021 16:56citRiks, у меня сделано так:
при старте поиска искомая строка показывается в шапке редактора;
если искомое не найдено, выводится сообщение и строка остаётся. Т.е Вы можете:
2.1. изменить искомую строку (BackSpace-ом);
2.2. продолжить писк в другом направлении
2.3. прекратить поиск.
По-моему, это оптимально.
"у вас" - это где? если это ваш другой скрипт, то где ссылка?
в оригинальном же скрипте не соображаю как это сделать