Инкрементальный поиск — это поиск без диалогового окна.
Введённый текст отображается в строке статуса и ищется сразу по мере его набора.
Управление:
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).
Мелкие но неприятные недостатки исходной реализации побудили меня сделать "ещё один быстрый поиск".
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. прекратить поиск.
По-моему, это оптимально.
"у вас" - это где? если это ваш другой скрипт, то где ссылка?
в оригинальном же скрипте не соображаю как это сделать
John Doe, да, так интуитивно понятнее, СПАСИБО
Вместе с этим, в идеале хотелось бы, чтобы искал выше по тексту автоматически (или с подтверждением от пользователя, диалогом), так как в большинстве случаев мы хотим найти ближайшее значение, а не первое или последнее во всем файле. чтобы автоматически переключался (или предлагал переключится в реверс) в реверс если не находил далее по тексту, мне кажется что эта логика не внесет сумятицу, но будет интуитивнее.
Т.е., практически как сейчас, только чтобы в диалоге В ДОБАВОК к тому выбору что есть ("Изволите ли искать сначала?"), предлагалось бы еще и переключится в реверс (найти ближайшее выше)
buniak_a_h wrote: ↑Sat 07 Aug, 2021 18:55
Сейчас посмотрел - переделка довольно большая. Я не публиковал; если надо - пришлю (сюда или в личку)
я думаю общественно полезнее будет в теме СимСу добавить ваш вариант, а так выглядит разумно то что вы добавили, выгкядит как практически то что я хотел.
что не отменяет желательности допиливания и обсуждаемого скрипта от @John Doe
John Doe wrote: ↑Sat 07 Aug, 2021 17:33
v2.12
При достижении конца файла предлагается продолжить поиск с начала. И наоборот.
У меня при использовании встроенного поиска это не происходит — ни через начало, ни через конец. Просто промаргивает диалог, что искомое не найдено, и поиск не продолжается. Воспроизводится ли это ещё у кого-то? Если да, сложно ли это исправить?
Макрос "паразитирует" на плагинах (или опционально на стандартном диалоге замены) поэтому ничего странного нет в том что его возможности тесно связаны с наличием той или иной фичи у соответствующего плагина.
Разумеется возможно реализовать отсутствующее и собственными силами, но это уже будут костыли на костылях.
По-хорошему давно стоило всё переделать прямым образом, и обходиться без плагинов, но руки не доходят. Не в последнюю очередь потому что меня на 99% устраивает и текущая функциональность.
посредством набора костылей.