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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 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
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

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

Post by ccaid »

Latest post of the previous page:

John Doe wrote: Что если изменить на local k=akey(1,1)
в этом случае проблемы нет.
коррекцией AltScreens я тоже решил проблему (другим, менее эффективным путем).
но что не так с akey(1)? скрипты не могут свободно его использовать? или в AltScreens он был применен неправильно? или «мы просто нашли дыру»?
Фар делают добрые люди
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

ccaid wrote: но что не так с akey(1)
Тонкости проявляются при вызове вложенного макроса через eval(macrokey,2)
В этом случае akey(1,1) вернёт нужную нам клавишу macrokey, а akey(1) же вернёт клавишу, которой выл вызван изначальный макрос, в данном случае RAlt.
Вывод: общем случае надо всегда использовать akey(1,1).

А akey(1) может понадобиться разве что в каком-то очень специальном случае.
Это имело смысл ещё до lua, когда подпрограммы можно было реализовать только через вложенные макросы.
А сейчас, имхо, только путает.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

John Doe, воспроизводится ли у Вас поведение, описанное в первой части моего сообщения?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

То ли не воспроизводится, то ли я не уловил суть проблемы.
Давайте по частям:

(1) У меня любой символ стирается сразу.
То что вы описываете похоже на неперерисовку редактора. Версия фар последняя ночная?

(2) А при стирании последнего символа действительно можно было бы ожидать перехода в исходную позицию, как до начала поиска.
В данный момент этого не происходит. Запишу в todo, но не уверен что вернусь к этому в ближайшее время.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

John Doe wrote: можно было бы ожидать перехода в исходную позицию, как до начала поиска.
В данный момент этого не происходит. Запишу в todo
И на том спасибо.
Ну и я заметил ряд более мелких недостатков, но, похоже, сейчас нет смысла их описывать.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

HaRT wrote: похоже, сейчас нет смысла их описывать.
Отчего же) Вдруг как раз это сдвинет чашу весов.
В своё время занялся этим скриптом как раз потому, что раздражали недостатки существующего.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

John Doe wrote: при стирании последнего символа действительно можно было бы ожидать перехода в исходную позицию
Посмотрел, и всё оказалось просто.
Надо BS = {} заменить на BS = {[""]=OriginalPos}
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

John Doe wrote: всё оказалось просто
Спасибо, починилось.
John Doe wrote: Отчего же)
Извольте, блоха: если в поиске — как модальном, так и нет — после ввода нескольких „продуктивных“ символов (по которым находится вхождение) ввести „непродуктивный“, то каретка перескакивает из конца в начало последнего найденного фрагмента. (У меня это особенно заметно, поскольку включен крест во всё окно).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Сейчас экспериментировал, пытаясь изолировать проблему с поиском слэша, и напоролся на падение плагина. Вот минимальный сценарий:
1. Запускаю Фар без прочих плагинов и макросов. (Титульный макрос v2.9 немодифицированный.)
2. Открываю в редакторе какой-нибудь файл — хоть пустой, хоть новый.
3. Запускаю модальный поиск ([b]RAlt[/b]), пытаюсь переключить одну из опций: Alt-W/G/C.
Ожидаю, что макрос продолжит работу (останется в режиме поиска).
Вместо этого макрос .

Если опции переключать при непустой строке ввода, то ничего не падает, окошечко опции кратковременно показывается (полностью ли правильный в нём текст, понять не успеваю), однако на то, что находится (разумеется, когда файл содержательный), опция влияния не оказывает. Например, ищу одну букву F, включаю Case Sensitive — находятся всё равно и строчные, и заглавные. Повторюсь, это без EdtFind.
Фар есть инструмент, а не нянька. © 2009 DrKnS
fps
Posts: 267
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 27 times
Been thanked: 14 times

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

Post by fps »

Если искомая строка присутствует в файле только выше текущей позиции, то во-первых она не находитя, во-вторых промаргивает диалог

Code: Select all

╔═════════ Search ══════════╗
║ Could not find the string ║
║            "z"            ║
╟───────────────────────────╢
║          { OK }           ║
╚═══════════════════════════╝
Первое так и задумано? К примеру поиск во вьювере предлагает поискать с начала файла, если ничего не находит. На мой взгляд так было бы более логично.
Второе просто как-то неаккуратненько. Нельзя без этого?
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

fps wrote: поискать с начала файла, если ничего не находит
Присоединяюсь, это было бы неплохо оформить ещё одной опцией: “Wrap around” (например, по [b]AltR[/b]).
fps wrote: промаргивает диалог
Может, в такой форме это и не лучший вариант, но ненавязчивая индикация, что поиск перевалил через конец/начало файла в любом случае полезна.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Приходится учитывать что в данной форме скрипт отягощён ограничениями, накладываемыми тем фактом, что не реализуя собственного поиска скрипт паразитирует на встроенном (или EditFind).
Работая над ним, я уже как раз планировал уйти от этого, но прям моментально не вышло (кажется споткнулся на поиске назад), а потом просто кончился запал, т.к. всё в общем и так работало..

Так вот, к чему это я.
Предлагать искать с начала когда строка не нашлась впереди можно и сейчас, если используется EditFind.
Встроенный поиск такой возможностью не обладает.
Прикрутить её "сверху" тоже реально, но имхо это будет неоправданно, ибо получится каскад костылей.

P.S.
Баг конечно исправлю, другие упомянутые недостатки тоже посмотрю и прокомментирую отдельно.
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

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

Post by ccaid »

если данный скрипт расположить в одной папке с http://forum.farmanager.com/viewtopic.php?t=8128, то при запуске падает плагин LuaMacro и тянет за собой Far. если скрипты разнести по разным (под)папкам, проблемы нет.
Фар делают добрые люди
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

ccaid, если падает LuaMacro, то почему Вы пишете об этом тут?! (А также там: viewtopic.php?f=60&t=8128&p=143287#p143287.)
Кроме того, лично у меня оба скрипта лежат в одной папке, и ничего не падает. Что-то Вы недоговариваете.
Фар есть инструмент, а не нянька. © 2009 DrKnS
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

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

Post by ccaid »

HaRT, походу устал думать к вечеру. исправляюсь
Фар делают добрые люди
DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

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

Post by DeeZ »

Если при поиске, после очередного символа строка уже не находится - проскакивает окно "не найдено". тут ок. стираем 1 символ, и пробуем поискать следующее вхождени - проскакивает окно не найденно. хотя эта строка уже есть, но плагин ищет еще старую.
Например, открыть файл IncSearch.lua
Поскать s - надет
дописать вторую ss - найдет
sss - выдаст что не найдено.
Удаляем одну S. в строке поиска становится ss. не находит (хотя находил).
Ждем F3 что бы повторить поиск - ошибка.

Если стереть еще одну s и дописать ее снова (что бы опять стало ss) - все работает как надо.
Post Reply

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