Page 9 of 14

Find & Go - Поиск с предпросмотром и переходом

Posted: Sun 25 Aug, 2019 17:16
by buniak_a_h
Мне надоело после окончания поиска файлов, содержащих строки, открывать найденные файлы и повторять поиск (особенно, если поиск в файлах по регэкспу с помощь. плагинов, а поиск в файле настроен не через эти плагины. А также если имеется несколько строк, удовлетворяющих критерию поиска, и надо перейти на конкретную). В результате родился предлагаемый к обсуждению макрос.
Его отличия от поиска по CtrlF7:
  1. Образец может быть регэкспом в формате LUA или Perl
  2. В результатах показывается найденная строка (как GREP), а также 3 строки выше и ниже найденной
  3. При переходе на выбранную строку редактор сразу позиционируется на неё.
  4. Можно отметить несколько найденных строк (по одной в каждом файле), и тогда в редакторе будут открыты все отмеченные файлы (также с позиционированием на отмеченных строках)
  5. Из результатов поиска можно удалять "мешающие" строки
  6. Можно сворачивать - разворачивать строки, принадлежащие одному файлу
Окно поиска:
Image
Процесс поиска:
Image
Результат:
Image
Обратите внимание: в результате строки файлов BaseLoad.pas b CHECK2TU.PAS "схлопнуты" (Condensed); несколько строк помечены. Внизу окна выведены 7 строк возле текущей (3 выше и 3 ниже)
Find_n_Go.1_1_7.7z
(31.34 KiB) Downloaded 29 times

Find & Go - Поиск с предпросмотром и переходом

Posted: Sat 09 May, 2020 10:33
by buniak_a_h

Latest post of the previous page:

citRiks wrote: Sat 09 May, 2020 10:17 в связи последними проблем со строками,
Я в теме, посвящённой этой проблеме, опубликовал простой и надёжный выход. Бороться с Shmuel-ем и zg больше не буду. За оптимизацию отдельное спасибо jd.

Code: Select all

В _macroinit.lua вставил такой блок:
for _,v in ipairs({'len','match','find','gmatch','gsub','lower','upper'}) do
 local savedName = 'Utf8_'..v
 if not utf8[savedName] then
  utf8[savedName] = utf8[v]
  utf8[v] = function(s,...)
   return (utf8.utf8valid(s) and utf8[savedName] or string[v])(s,...)
  end
 end
end
Т.к. там всё правильно, то мы имеем дело с одним из следствий закона Мерфи: блок, предназначенный для защиты всей системы от повреждения, выходит из строя первым и выводит из строя всю систему.

Find & Go - Поиск с предпросмотром и переходом

Posted: Sat 09 May, 2020 10:59
by buniak_a_h
P/S.
Тем более, что я не уверен, что замена utf8.len на string.len возможна и корректна везде. Я даже больше скажу! В данном случае (я имею в виду far_Menu.lua) нужна именно длина строки в символах (для определения ширины окна). Ну а если это не строка utf8, то как компромисс можно посчитать и в байтах. Будет слишком широко, но что ж делать…

Find & Go - Поиск с предпросмотром и переходом

Posted: Sat 09 May, 2020 11:23
by John Doe
Некорректную строку можно 'исправить'.

Find & Go - Поиск с предпросмотром и переходом

Posted: Sat 09 May, 2020 12:46
by buniak_a_h
John Doe wrote: Sat 09 May, 2020 11:23 Некорректную строку можно 'исправить'.
Видимо, не в этой теме. Вас то не забанят, а мне оно надо?

Find & Go - Поиск с предпросмотром и переходом

Posted: Sat 09 May, 2020 14:01
by John Doe
buniak_a_h wrote: Sat 09 May, 2020 12:46 а мне оно надо?
А вы напишите в "ту", видимо.

Find & Go - Поиск с предпросмотром и переходом

Posted: Sat 09 May, 2020 14:04
by buniak_a_h
John Doe wrote: Sat 09 May, 2020 14:01
buniak_a_h wrote: Sat 09 May, 2020 12:46 а мне оно надо?
А вы напишите в "ту", видимо.
Уже и написал, и Вас процитировал.

Find & Go - Поиск с предпросмотром и переходом

Posted: Mon 20 Jul, 2020 21:16
by citRiks
У меня есть идея, реализуется вроде не очень сложно
Сделать поиск по файлам depth-first

Еще наверное надо бы чтобы пустая строка в маске файла трактовалась как "любой файл", или звездочка
Сейчас при этом пустом поле просто ничего не находится, что может смущать умы

Find & Go - Поиск с предпросмотром и переходом

Posted: Mon 20 Jul, 2020 21:46
by buniak_a_h
citRiks, я уже старенький, вашего молодёжного сленга не понимаю…
Что такое поиск по файлам depth-first? Ограничит глубину поиска при поиске по подкаталогам? Немного усложнит диалог задания поиска.
С пустой строкой - согласен.

Find & Go - Поиск с предпросмотром и переходом

Posted: Mon 20 Jul, 2020 22:01
by citRiks
buniak_a_h,
(ой, я имел в виду наоборт bredth first)

ну вопчем звиняюсь за сленг, а значит это вот что
Поиск в иерархиях (или деревьях, или графах) можно разделить на два типа:

1.) Depth first - Рекурсивно заходим в каждый попавшийся каталог (ветку) пока не исчерпали всю его глибину,
когдаисчерпали - только переходим к следующему.

2.) Breadth first - заходим во все каталоги первого уровня по очереди, не углублясь
Когда обшарили первый уровень - только тогда переходим ко второму по глубине и так далее, до исчерпания

Breadth first имеет больше смысла при поиске файлов, так нам обычно нужнее то что зарыто неглубоко, в первых уровнях.
Тем более что, может попасться первой глубокая папка с кучами мусорных файлов

Но, Depth First бесхитростнее, технически проще реализуется, так как не надо составлять список папок по уровням, а просто заходить рекурсивно во все что попадается.
Поэтому у нас везде есть Depth First, что не очень правильно

Find & Go - Поиск с предпросмотром и переходом

Posted: Mon 20 Jul, 2020 22:05
by citRiks
PS
buniak_a_h wrote: Mon 20 Jul, 2020 21:46 Ограничит глубину поиска при поиске по подкаталогам? Немного усложнит диалог задания поиска.
в обоих случаях поиск не должен быть ограничен по глубине,
поэтому в UI не обязатательно привносить задаваемую глубину, хотя наверное и имеет смысл в целом.
С другой стороны, да, в стандартном поиске можно задать ограничение на глубину захода,
и это действительно является некоторым примитивнейшим и неудобным способом делать "breadth first"

Find & Go - Поиск с предпросмотром и переходом

Posted: Mon 20 Jul, 2020 22:23
by buniak_a_h
citRiks, правильно ли я понял, что претензия - к порядку найденных файлов?
Ещё. Я для поиска использую (как ни странно ;-) ) far.RecursiveSearch. Я точно не смотрел, как сейчас, но раньше, по-моему, порядок сортировки не гарантировался. А это - ЖАЛЬ!

Find & Go - Поиск с предпросмотром и переходом

Posted: Mon 20 Jul, 2020 22:28
by HaRT

Find & Go - Поиск с предпросмотром и переходом

Posted: Tue 21 Jul, 2020 19:39
by citRiks
buniak_a_h wrote: Mon 20 Jul, 2020 22:23 citRiks, правильно ли я понял, что претензия - к порядку найденных файлов?
неправильно :)
Смысл предложения - избавится от длинных ненужных поисков по закоулкам одной ветки,
когда искомое лежит в другой соседней ветке, уровнем ниже точки начала поиска.
Но при этом да, первыми появятся результаты первых уровней вложения,
что и является преимуществом.

Опять же, чще всего искать в закоулках "depth first" это потеря времени чаще всего,
а когда первыми появляются резултаты из первых уровней релевантность их скорее всего выше,
и найдя искомое тогда можно уже остановить поиск в закоулочных уровней.
far.RecursiveSearch. Я точно не смотрел, как сейчас, но раньше, по-моему, порядок сортировки не гарантировался. А это - ЖАЛЬ!
RecursiveSearch это же не UI, это чисто внутренняя кухня поиска.
Можно сортировать результаты, в промежуточной таблице как-нибудь, или уже при отображении.
RecursiveSearch хоть он и рекурсивный, можно же задать ему куда и в каком порядке ходить.
Да, в для breadth first это чуть сложнее реализовать, но других ваших подвигов не должно быть сложнее :)

Find & Go - Поиск с предпросмотром и переходом

Posted: Tue 21 Jul, 2020 20:46
by buniak_a_h
citRiks wrote: Tue 21 Jul, 2020 19:39 Смысл предложения - избавится от длинных ненужных поисков по закоулкам одной ветки
Либо надо лимитировать уровень, либо порядок обхода на поиск не влияет: просматриваться будут все файлы. Или вы имеете в виду что юзер прервёт поиск, когда увидит, что что-то найдено? Так я, вроде, в процессе поиска результат не визуализирую …

Find & Go - Поиск с предпросмотром и переходом

Posted: Wed 22 Jul, 2020 06:12
by citRiks
buniak_a_h wrote: Tue 21 Jul, 2020 20:46 Или вы имеете в виду что юзер прервёт поиск, когда увидит, что что-то найдено? Так я, вроде, в процессе поиска результат не визуализирую …
Да, а может стоит возможно визуализировать?

Find & Go - Поиск с предпросмотром и переходом

Posted: Wed 22 Jul, 2020 06:22
by citRiks
Тут модуль для поиска в глубину или ширину
https://github.com/chen0040/lua-graph
Про графы, "дерево" - это частный случай графа

Могу еще подкинуть кода на эту тему