Инкрементальный поиск — это поиск без диалогового окна.
Введённый текст отображается в строке статуса и ищется сразу по мере его набора.
Управление:
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).
Мелкие но неприятные недостатки исходной реализации побудили меня сделать "ещё один быстрый поиск".
Shmuel wrote: без переключения режима ввода пользователем не обойтись.
Я (пока тоже теоретически) предполагаю, что режим, о котором вы говорите, можно включать автоматически, обнаружив в строке некорректный регэксп.
Фаровский регэксп должно быть легко проверить на корректность (а вот насчёт lua-паттерна не уверен).
IncSearch — быстрый поиск в редакторе
Posted: Sun 02 Aug, 2015 21:16
by Shmuel
Дело в том, что начальная часть регекспа может быть и корректной, но для пользователя может не иметь смысла делать по ней инкрементальный поиск - лишнее мелькание и утомление глаз. Поэтому здесь искуственный интеллект не способен угадать, чего надо пользователю.
IncSearch — быстрый поиск в редакторе
Posted: Mon 18 Apr, 2016 18:48
by buniak_a_h
Надо бы поправить мелочь: функция far.InputRecordToName при нажатии на "\" возвращает Key=BackSlash ... В результате поиск с ним тут же прекращается.
IncSearch — быстрый поиск в редакторе
Posted: Fri 22 Jul, 2016 14:48
by John Doe
buniak_a_h wrote: Надо бы поправить мелочь: функция far.InputRecordToName при нажатии на "\" возвращает Key=BackSlash ... В результате поиск с ним тут же прекращается.
Если не хотите трогать раскладку, то нужно изменить клавишу активации на другую.
IncSearch — быстрый поиск в редакторе
Posted: Wed 03 Aug, 2016 14:35
by aflexus
John Doe wrote: Вероятно особенность раскладки, см. Правый Alt не работает в русской раскладке
Да, так и оказалось. Удалил KB2970228 - все ок. Спасибо.
IncSearch — быстрый поиск в редакторе
Posted: Wed 14 Dec, 2016 18:17
by ccaid
натолкнулся на непонятки.
как воспроизвести (проверялось под Win10 x64):
чистый фар, конкретно: Far30b4869.x86.20161214.7z — делаем локальный профиль. добавляем в скрипты AltScreens.lua из Addons и IncSearch2.9.7z
запускаем Far.exe, открываем в редакторе файл (changelog), активируем IncSearch нажатием RAlt, а теперь жмём LAlt1 с целью перейти в панели. Скрипт AltScreens получает управление, но akey(1) выдаёт ему клавишу RAlt вместо LAlt1.
для визуализации эффекта скрипт AltScreens можно изменить, например, так:
local k=akey(1)
msgbox('AltScreens',k)
Keys('F12', k:sub(-1))
с одной стороны, в моем скрипте быстрого поиска такого эффекта нет. с другой стороны, как вызвать скрипт и подменить ему клавишу вызова непонятно, если это не баг. с третьей стороны, я и не пытался найти легальный (через доступное АПИ) способ добиться этого эффекта.
IncSearch — быстрый поиск в редакторе
Posted: Wed 14 Dec, 2016 19:15
by John Doe
Что если изменить на local k=akey(1,1)
IncSearch — быстрый поиск в редакторе
Posted: Wed 14 Dec, 2016 20:30
by HaRT
Попробовал этот скрипт — удобно, спасибо! (Пока пользуюсь безEdtFind.)
Однако в поиске — и модальном, и немодальном — в режиме ExtraQuick при последовательном стирании введённых символов по [b]BS[/b] самый первый (левый) символ сперва не стирается (соответственно, переход на позицию начала поиска не происходит), а при повторной попытке он-таки стирается, но вновь без перехода (и дальнейшие нажатия [b]BS[/b] ожидаемо ничего не меняют). По [b]Esc[/b] возврат происходит нормально.
А в немодальном поиске каждая новая буква (скажем, строчная) почему-то не добавляется к искомому, а ищется вперёд как таковая.
Правда, поскольку [b]RAlt[/b] у меня почему-то не распознаётся (даже при английском языке ввода — может, клавиатура ущербная, не изучал), матчинг кнопок пришлось
local key = akey(1,1):match"^R?Alt(%w)$" --todo ??append instead
@@ -389,7 +389,7 @@
}
Macro {
- area="Editor"; key="RAltBS";
+ area="Editor"; key="[LR]?AltBS";
uid="0CA47A7D-BB21-44DA-8FC0-1ACF5673F3DB";
action=function()
editor.SetPosition(nil,OriginalPos) --todo
. Но вроде бы это не должно так влиять. Именно оно и влияло. А [b]RAlt[/b] у меня ломает KeyMan.
Win 8.1 Ent x64, Far Manager v3.0 build 4868 x86 (2016-12-12) без прочих плагинов и макросов.
IncSearch — быстрый поиск в редакторе
Posted: Thu 15 Dec, 2016 05:30
by ccaid
John Doe wrote: Что если изменить на local k=akey(1,1)
в этом случае проблемы нет.
коррекцией AltScreens я тоже решил проблему (другим, менее эффективным путем).
но что не так с akey(1)? скрипты не могут свободно его использовать? или в AltScreens он был применен неправильно? или «мы просто нашли дыру»?
IncSearch — быстрый поиск в редакторе
Posted: Thu 15 Dec, 2016 10:14
by John Doe
ccaid wrote: но что не так с akey(1)
Тонкости проявляются при вызове вложенного макроса через eval(macrokey,2)
В этом случае akey(1,1) вернёт нужную нам клавишу macrokey, а akey(1) же вернёт клавишу, которой выл вызван изначальный макрос, в данном случае RAlt.
Вывод: общем случае надо всегда использовать akey(1,1).
А akey(1) может понадобиться разве что в каком-то очень специальном случае.
Это имело смысл ещё до lua, когда подпрограммы можно было реализовать только через вложенные макросы.
А сейчас, имхо, только путает.
IncSearch — быстрый поиск в редакторе
Posted: Thu 15 Dec, 2016 12:41
by HaRT
John Doe, воспроизводится ли у Вас поведение, описанное в первой части моего сообщения?