local function norm(name)
name = mf.fsplit(name,0x4):match("%a.*")
return name and name:upper() or nil
end
Macro {
key="ShiftDivide";
area="Shell Search";
description="Select files with the same names without numeric prefix and extension";
condition=function()
return APanel.Visible and PPanel.Visible and not APanel.Empty and not PPanel.Empty
end;
action=function()
Panel.Select(0,0); Panel.Select(1,0)
local PTable={}
for ip=1,PPanel.ItemCount do
PTable[ip]=norm(Panel.Item(1,ip,0))
end
local a,p = {},{}
for ia=1,APanel.ItemCount do
local ANameOnly=norm(Panel.Item(0,ia,0))
if ANameOnly then
for ip,PNameOnly in pairs(PTable) do
if ANameOnly==PNameOnly then
a[#a+1],p[#p+1] = ia, ip
end
end
end
end
panel.SetSelection(nil,0,p,true)
panel.SetSelection(nil,1,a,true)
panel.RedrawPanel(nil,0)
panel.RedrawPanel(nil,1)
end;
}
Запускается сравнение комбинацией ShiftDidive
Авторы: KlepetoX (идея и первоначальная реализация), Shmuel (оптимизация)
Я в свою очередь дооптимизировал процесс выделения файлов, что оказалось существенно для скорости выполнения при очень большом количестве файлов.
Кроме того, "нормализацию" имени перед сравнением я выделил в функцию norm (name) (для удобства модификации скрипта под специфические задачи).
Сейчас там пропускается неалфавитный префикс, и отбрасывается расширение, но легко добавить, например, унификацию пробелов_подчёркиваний-минусов, игнорирование артиклей, и т.д.
Xerox wrote: ↑Thu 31 Oct, 2019 18:07
А есть ли плагин или макрос для нечеткого ПОИСКА?
Извините, если открою америку... В поиске в именах файлов допустимы регэкспы (если начать и закончить слэшами). Ну и, соответственно, можно найти что хотите
Поиск по имени песни (перед названием может быть номер трека, пробел и дефис): /\d{0,2}\s*-?\s*.*\.mp3/i
buniak_a_h,
Америка это хорошо, но что делать с переставленными местами, или вообще пропущенными словами?
в остальном - pегексп это хорошо, но синтакс неуклюжий и в результате неюзабельно даже для тех кто знает синтаксис
На данный момент я так ищу:
Xerox wrote: ↑Fri 01 Nov, 2019 16:03
что делать с переставленными местами, или вообще пропущенными словами?
Я после ваших вопросов вчера поискал и нашёл fzf. Судя по описанию, должно хорошо решать вашу задачу (и массу других). Да, Винда поддерживается; нет, собирать самому не требуется.
buniak_a_h, Да, реально спасибо!
Pешает задачу, хоть и несколько коряво
Я 20 минут разгадывал как задать глубину поиска по субдиректориям.
Нет такого параметра, но, слава богам что ФЗФ хавает пайпинг и соответственно фильтрует его
Например для самого верхнего уровня:
Но для заданного количества подуровней нет, надо будет корячить скрипт, который будет медленный конечно.
Если ты/вы/кто-нибудь знаком с другими подобными решениями (команд-лайн)?
Буду очень благодарен
PS
Еще пока не допер как задать список junk-words в FZF.. ?
Кажется что невозможно
Last edited by Xerox on Fri 01 Nov, 2019 18:29, edited 3 times in total.
Покайтесь, ибо приблизилось Царство Небесное.
Приготовьте путь Господу, прямыми сделайте стези Ему.
HaRT, Не, это получается stop-words, a надо типа ignore-words
это чтобы, опять же, не морочиться с синтаксисом.
например, чтобы скопипастить имя файла, не заморачиваясь его чисткой от раширений и другого мусора, искать по meaning-words, игнорируя junk/ignore-words
Иначе junk и будет вылазить на топ-позицию
А следует бы задать один раз список игнорируемых слов, и усе, дальше расслабляемся.
(ну надеюсь что я себя обьяснил.. ?)
Last edited by Xerox on Fri 01 Nov, 2019 18:57, edited 2 times in total.
Покайтесь, ибо приблизилось Царство Небесное.
Приготовьте путь Господу, прямыми сделайте стези Ему.
Еще кстате AGREP делает что то вроде "гугля" по содержанию текстовых документов, т.е. не регексп, а по свободно заданным словам.
или если в него перенаправить список файлов, то может это отфильтровать
Покайтесь, ибо приблизилось Царство Небесное.
Приготовьте путь Господу, прямыми сделайте стези Ему.
Xerox wrote: ↑Fri 01 Nov, 2019 16:03buniak_a_h,
Америка это хорошо, но что делать с переставленными местами, или вообще пропущенными словами?
в остальном - pегексп это хорошо, но синтакс неуклюжий и в результате неюзабельно даже для тех кто знает синтаксис
На данный момент я так ищу:
находит по словам в любом порядке, но тоже неуклюже
Вы навели меня на мысль. Я делал когда-то поиск с предпросмотром. Специально для такого случая доделал правила поиска файлов: теперь можно указать Lua-выражение в угловых скобках. Конкретно для Вашего случая вполне подходит, например, такое: <name:lower():match("sql") and name:lower():match("linux") and name:lower():match("install")>