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:

непривычно, пока наблюдаю
Фар делают добрые люди
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 »

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: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

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.. см. 2.10
Attachments
IncSearch2.9.7z
(3.42 KiB) Downloaded 259 times
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

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

Post by Maximus5 »

Хорошо бы одновременно и русские и английские буквы искать. XLat-ом. Под макролибом у меня так было, удобно.
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 »

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

А какие мысли по поводу немодального поиска? Например, удобно ли правым альтом?
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

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

Post by Maximus5 »

На счет нюансов...
При попытке начать поиск с двойной кавычки EdtFind кидает exception
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 »

Maximus5 wrote: начать поиск с двойной кавычки
Исправил, перевыложил
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

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

Post by ccaid »

ни релиз, ни альфа не умеют искать строки с кавычкой ("). поправимо?
Фар делают добрые люди
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

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

Post by Maximus5 »

Я переключил режим на стандартный поиск фара. Ищет. Только задалбывает то, что иногда у макроса не получается снять внезапно появившиеся там флажки "Whole words" и "Case sensitive". Чего происходит пока не понял.
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: ни релиз, ни альфа не умеют искать строки с кавычкой ("). поправимо?
А я-то пребывал в уверенности, что пофиксил эту проблему.
Найдите строку str)) и замените на str:gsub('"','""'))).
Maximus5 wrote: иногда у макроса не получается снять внезапно появившиеся там флажки
А как повторить?
Maximus5 wrote: "Whole words"
Только что понял, что для инкрементального поиска это странная опция.
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

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

Post by ccaid »

Maximus5, при активации быстрого поиска под ConEmu курсор мыши впадает в фоновый режим. не замечал или не происходит? на чистой установке воспроизводится.
Фар делают добрые люди
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

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

Post by Maximus5 »

Опция "Hourglass if not responding". Во время работы макроса считается что фар занят. Например таб переключить низя, и т.п.
MaxU
Posts: 106
Joined: Tue 31 May, 2005 14:14
Been thanked: 1 time

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

Post by MaxU »

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

как это побороть?
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 »

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: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Может быть по нажатию какой-то клавиши переходить в режим ввода без поиска, а по повторному её нажатию начинать поиск?
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 »

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

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

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