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

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

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

Post by John Doe » Mon 04 Aug, 2014 23:58

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

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

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


Актуальная версия: IncSearch2.9.7z

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Sun 26 Oct, 2014 16:30

Latest post of the previous page:

v2
  • В в начале скрипта в переменной options можно задать умолчательные значения для параметров
    WholeWords, RegExp, CaseSensitive, HighLight
    В процессе поиска значения можно изменить шорткатами Alt-W/G/C/H (всё кроме Alt-H работает и без плагина EdtFind).
  • Новый режим поиска: ExtraQuick: каждое нажатие не только прибавляет символ к строке поиска, но и ищет следующее вхождение.
    Активируется параметром ExtraQuick в начале скрипта, или шорткатом Alt-Q.
  • Теперь опционально (useBM) можно активировать установку закладки при начале поиска (при этом по Esc позиция не восстанавливается)
  • При поиске окно всегда позиционируется так, чтобы искомое слово не скрывалось правой границей.
  • Исправлены найденные баги, устранена зависимость от параметров [x] Курсор за пределами строки и [x] Курсор в конце, Tab теперь ищется.

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Tue 04 Nov, 2014 16:12

v2.9 alpha
  • В режиме ExtraQuick нажатие BS восстанавливает предыдущую позицию.
  • Новые шорткаты:
    AltRight расширяет выделение до конца слова
    LCtrl и RCtrl — продолжение поиска назад/вперёд (дублируют имеющиеся шорткаты)
  • Выделение цветом всех вхождений настроено на длину подстроки >=2
    Выделение сбрасывается при завершении поиска, чтобы оставить, можно завершить поиск нажатием Alt.
  • Реализован немодальный поиск:
    • Активируется нажатием RAlt+буква (точнее символ слова: \w), или RAltSpace.
      Набирать текст нужно удерживая RAlt.
      При отпускании RAlt поиск завершается.
    • Даже после отпускания вернуться в позицию "до поиска" можно с помощью макроса на RAltBS.
    • Кроме того, поиск можно активировать нажатием RAlt+LCtrl / RAlt+RCtrl.
      В этом случае продолжается предыдущий поиск (назад / вперёд).
    • Доступны те же шорткаты, что и в обычном режиме, за исключением изменения опций.
      Чтобы работал Esc (т.е. Alt-Esc) — можно воспользоваться XKeys.
Update:
Искомая подстрока теперь может содержать двойные кавычки и бэкслеш.

В шапку пока не кладу, ибо альфа (планирую избавиться от костылей).

Update
Функциональность немодального поиска несколько уменьшилась, т.к. в актуальных билдах фара при нажатом Alt перестали распознаваться клавиши LCtrl/RCtrl..
Attachments
IncSearch2.9.7z
(3.42 KiB) Downloaded 144 times

Maximus5
Posts: 3292
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

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

Post by Maximus5 » Tue 04 Nov, 2014 18:55

Хорошо бы одновременно и русские и английские буквы искать. XLat-ом. Под макролибом у меня так было, удобно.

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Wed 05 Nov, 2014 16:01

>Под макролибом у меня так было, удобно.
Именно в том виде это элементарно, но не учитывается ряд ньюансов.
В планах есть.

А какие мысли по поводу немодального поиска? Например, удобно ли правым альтом?

Maximus5
Posts: 3292
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

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

Post by Maximus5 » Wed 05 Nov, 2014 19:35

На счет нюансов...
При попытке начать поиск с двойной кавычки EdtFind кидает exception

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Thu 06 Nov, 2014 13:22

Maximus5 wrote: начать поиск с двойной кавычки
Исправил, перевыложил

ccaid
Posts: 805
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 9 times
Been thanked: 5 times

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

Post by ccaid » Thu 04 Dec, 2014 12:08

ни релиз, ни альфа не умеют искать строки с кавычкой ("). поправимо?
Фар делают добрые люди

Maximus5
Posts: 3292
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

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

Post by Maximus5 » Thu 04 Dec, 2014 12:22

Я переключил режим на стандартный поиск фара. Ищет. Только задалбывает то, что иногда у макроса не получается снять внезапно появившиеся там флажки "Whole words" и "Case sensitive". Чего происходит пока не понял.

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Thu 04 Dec, 2014 18:16

ccaid wrote: ни релиз, ни альфа не умеют искать строки с кавычкой ("). поправимо?
А я-то пребывал в уверенности, что пофиксил эту проблему.
Найдите строку str)) и замените на str:gsub('"','""'))).
Maximus5 wrote: иногда у макроса не получается снять внезапно появившиеся там флажки
А как повторить?
Maximus5 wrote: "Whole words"
Только что понял, что для инкрементального поиска это странная опция.

ccaid
Posts: 805
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 9 times
Been thanked: 5 times

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

Post by ccaid » Fri 10 Apr, 2015 16:44

Maximus5, при активации быстрого поиска под ConEmu курсор мыши впадает в фоновый режим. не замечал или не происходит? на чистой установке воспроизводится.
Фар делают добрые люди

Maximus5
Posts: 3292
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 4 times
Contact:

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

Post by Maximus5 » Fri 17 Apr, 2015 15:58

Опция "Hourglass if not responding". Во время работы макроса считается что фар занят. Например таб переключить низя, и т.п.

MaxU
Posts: 98
Joined: Tue 31 May, 2005 14:14

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

Post by MaxU » Sun 02 Aug, 2015 13:21

а как вводить все регулярные выражения начинающиеся с "\" (BackSlash)?
например: \w+ \s+
в версии (v2.9 alpha): после ввода BackSlash макрос не позволяет ввести ни одного символа
в версии (v2): после ввода BackSlash макрос выпадает в Far и заменяет первую найденную строку символом: \

как это побороть?

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Sun 02 Aug, 2015 19:23

MaxU wrote: как это побороть?
Сейчас разве что вставить из буфера обмена...
Скрипт заточен на посимвольную обработку введённой строки, и регэкспы сюда не очень вписываются.
В планах конечно есть, вот только не знаю когда я смогу заняться скриптом снова...

Как временный вариант могу предложить добавить в таблицу actions специальные клавиши:

Code: Select all

  CtrlW=function() return append"\\w" end;
  CtrlS=function() return append"\\s" end;
  CtrlBackSlash=function()
    mf.postmacro(Keys,"End")
    str = far.InputBox(nil,"",nil,"IncSearch",str) or str
    return ""
  end;

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

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

Post by Shmuel » Sun 02 Aug, 2015 19:42

Может быть по нажатию какой-то клавиши переходить в режим ввода без поиска, а по повторному её нажатию начинать поиск?

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Sun 02 Aug, 2015 20:14

CtrlBackSlash примерно это и делает, только в диалоге.
(Скорее всего без диалога было бы лучше, но это требует более глубокого ковыряния в коде, чего я себе сейчас позволить не могу).

А в перспективе надеюсь реализовать прозрачную работу, без диалогов, и даже без всяких дополнительных клавиш.

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

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

Post by Shmuel » Sun 02 Aug, 2015 20:27

John Doe wrote: реализовать прозрачную работу, без диалогов, и даже без всяких дополнительных клавиш.
Признаюсь, что данный скрипт я не пробовал, рассуждаю чисто теоретически, но если будут поддерживаться регулярные выражения, то без переключения режима ввода пользователем не обойтись.

User avatar
John Doe
Бюрократ
Posts: 11228
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 80 times

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

Post by John Doe » Sun 02 Aug, 2015 20:34

Shmuel wrote: без переключения режима ввода пользователем не обойтись.
Я (пока тоже теоретически) предполагаю, что режим, о котором вы говорите, можно включать автоматически, обнаружив в строке некорректный регэксп.
Фаровский регэксп должно быть легко проверить на корректность (а вот насчёт lua-паттерна не уверен).

Post Reply

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