Regular Expression Search and Replace (RESearch)

Здесь можно обсудить ваш любимый плагин.
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

Latest post of the previous page:

HaRT wrote:А PCRE умеет читать только из памяти?
Если умеет также из какого-либо потока, то можно сделать трубопровод.
При нынешней стоимости оперативки все это от лукавого, я считаю.
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

Hedin wrote:Cavaler, вот ещё про что забывал написать: когда делается обратный поиск с регулярными выражениями, то пропускаются все вхождения в строке кроме первого. Возможно это исправить?
Плохо понятно, как это делать - нет функции "найти последний матч в строке". Можно пытаться скармливать каждую строку посимвольно с конца - но это будет очень медленно.
Hedin
Posts: 210
Joined: Thu 17 Mar, 2005 10:29
Has thanked: 4 times

Re: Regular Expression Search and Replace (RESearch)

Post by Hedin »

Cavaler, я представлял себе два варианта:
  1. искать вхождения в строке с первого до последнего как при обычном поиске (правда возможно запутывание пользователя какой же поиск делается :))
  2. сначала найти все вхождения, а потом уже переходить по ним в обратном порядке
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

Raistlin wrote:Обновил подправленные lng-файлы для RESearch 7.84 / 7.85. По сравнению с файлами для 7.70 есть breaking change: убран хоткей для списка "Выполнить как скрипт:" - совпадал с хоткеем для списка "Искать:", а другой не подберешь.

Баги и пожелания:
  1. http://forum.farmanager.com/viewtopic.p ... 35#p111403
  2. В пресетах переименования и переименования выделенных хоткеи полей "Содержащие текст" и "Заменить на" переносят нас не в поля, а на галки регэкспов и многократной замены.
  3. В диалогах переименования и переименования выделенных - галка регэкспов у поля "Содержащий текст" называется по-разному в основном диалоге и в диалоге пресетов.
  4. Улетаем вместе с Far2 при попытке переименовать файлы. Пример. Есть файл R:\Temp\a test.txt. - улетаем. 7.84 не улетает.
  5. Описание галки "Многократная замена" в диалоге переименования не соответствует действительности. Паттерн применяется не к новому имени, а снова к старому. Это не одно и то же. Например, файла abbbbab.txt даст abbba.txt, а не aa.txt.
  6. Хочется полноценный фильтр для отбора обрабатываемых файлов, как в стандартном поиске. А то сейчас даже нельзя задать переименование одних только каталогов, например.
  7. Хочется, чтобы пресеты при запуске из пакета могли запрашивать разрешение на замену.
  8. Хочется иметь возможность выбрать, будет поиск осуществляться с текущего места или с начала (файла/выделения).
  9. Диалог замены закрывает найденное значение, если оно находится в конце файла (окно всегда пытается появиться под найденным вхождением, а в этом случае надо над). Легко воспроизводится в консоли 80x25 - можно взять тот же файл, что для бага #1, и инициировать .
  10. Открываем в редакторе (консоль 80x25) файл Test2.txt из аттача, инициируем , выбираем каждый раз "Пропустить". На втором вхождении кнопки диалога уехали за пределы экрана.
  11. При запуске в консоли 80x25 окно настроек поиска в редакторе слишком высокое - без мыши до нижних параметров не долезть. Можно было бы оптимизировать размер, заменив радиокнопки на выпадающие списки.
0. Если хотите, чтобы ваши правки попали в исходники - правьте RESearch.msg, он в комплекте. Искать руками все исправления в .lng мне лень.
1. Не могу повторить - ни в Far2 ни в Far3 нет никакого выделения после завершения замены.
2, 3 Fixed.
4. Не могу повторить.
5. Если галка включена, переименование работает как замена в редакторе - применяясь дальше к неизмененной части. В противном случае слишком легко зациклиться. Я предпочту исправить описание, нежели логику работы.
6. Где, в переименовании? Добавить туда имеющийся в поиске/замене Advanced пойдет?
7. Пресеты - исполняются без вмешательства пользователя. Если очень надо, можно намакросить загрузку пресета в диалог.
8. Про что речь вообще? В редакторских пресетах есть [X] Execute from current position
9-10. Неправда, что диалог всегда под найденным. А 80x25 неактуально. Но - иногда бывают подглюки, посмотрим.
11. См выше, 80x25 неактуально. А радиобаттоны удобнее списка. Да и это не единственный такой диалог.
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

Hedin wrote:Cavaler, я представлял себе два варианта:
  1. искать вхождения в строке с первого до последнего как при обычном поиске (правда возможно запутывание пользователя какой же поиск делается :))
  2. сначала найти все вхождения, а потом уже переходить по ним в обратном порядке
1. Запутанно. Особенно при многострочном поиске.
2. Кривовато реализуемо, особенно если учесть, что каждый Search again - независимый вызов плагина.
Hedin
Posts: 210
Joined: Thu 17 Mar, 2005 10:29
Has thanked: 4 times

Re: Regular Expression Search and Replace (RESearch)

Post by Hedin »

Cavaler wrote:1. Запутанно. Особенно при многострочном поиске.
2. Кривовато реализуемо, особенно если учесть, что каждый Search again - независимый вызов плагина.
Да, идеального варианта тут не получается. Просто то что сейчас вообще мимо проскакивает тоже не очень хорошо.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Post by AleXH »

Cavaler wrote:При нынешней стоимости оперативки все это от лукавого, я считаю.
Далеко не всегда есть возможность натыкать памяти. Но если "всасывать", то как будет соотносится размер обрабатываемого файла и размер выделяемой сабжу памяти? Считаем, что свопа у системы нет.

В макросе RESearch.lua нет обработки для обратного поиска AltF7 в редакторе.
User avatar
HaRT
Moderator
Posts: 10858
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Re: Regular Expression Search and Replace (RESearch)

Post by HaRT »

Cavaler wrote:
HaRT wrote:А PCRE умеет читать только из памяти?
Если умеет также из какого-либо потока, то можно сделать трубопровод.
При нынешней стоимости оперативки все это от лукавого, я считаю.
Не могу согласиться.
Как бы ни была дёшева память и сколько бы её ни было установлено на компе, непременно как-нибудь в дерево затесается файл, который в неё не влезет.
А потоки с трубопроводами тем и хороши, что позволяют без лишнего расхода памяти перекодировать/разжимать/расшифровывать, часто даже параллельно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10858
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Post by HaRT »

Raistlin wrote:Обновил подправленные lng-файлы для RESearch 7.84 / 7.85. По сравнению с файлами для 7.70 есть breaking change: убран хоткей для списка "Выполнить как скрипт:" - совпадал с хоткеем для списка "Искать:", а другой не подберешь.
Некоторые из ссылок в сообщении у меня открыли явно не то, что, очевидно, было задумано. Поэтому мне пришлось их подправить.
Прошу впредь использовать кратчайшую и единственно верную ссылку на сообщение, полученную как описано тут: http://forum.farmanager.com/viewtopic.php?p=8589#p8589.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Post by Raistlin »

Cavaler wrote: 0. Если хотите, чтобы ваши правки попали в исходники - правьте RESearch.msg, он в комплекте. Искать руками все исправления в .lng мне лень.
А они попадут? Помнится, вы скептически отнеслись к моему принципу расстановки хоткеев.
Cavaler wrote: 1. Не могу повторить - ни в Far2 ни в Far3 нет никакого выделения после завершения замены.
Это как же? Мы выделяем в том файле кусок с 3-й по 37-ю строку, делаем (три вхождения находятся), и после этого - ничего не выделено? Только что проверил на чистой виртуалке (Far 2.1.1807 bis27 x86, из плагинов - только RESearch, везде настройки по умолчанию, кроме [x] Persistent blocks) - выделение остается, и нижняя его граница находится на не той строке, которая была 37-й до замены.
Cavaler wrote:4. Не могу повторить.
Н-да, на чистой виртуалке с единственным плагином (см. выше) и настройками Far'а с рабочей машины - не падает. А на рабочей системе, тоже с единственным плагином (копия Far в отдельной папке), - падает. И куда копать? Может это как-то зависеть от наличия сторонних программ? Что-нибудь менялось в переименовании по сравнению с 7.84?
Cavaler wrote: 5. Если галка включена, переименование работает как замена в редакторе - применяясь дальше к неизмененной части. В противном случае слишком легко зациклиться. Я предпочту исправить описание, нежели логику работы.
Я это и имел в виду - едва ли можно придумать юзкейс для алгоритма, указанного в описании.
Хотя, на мой взгляд, строго говоря, при наличии регэкспов "Многократная замена" - лишнее.
Cavaler wrote: 6. Где, в переименовании? Добавить туда имеющийся в поиске/замене Advanced пойдет?
Да.
Cavaler wrote: 7. Пресеты - исполняются без вмешательства пользователя. Если очень надо, можно намакросить загрузку пресета в диалог.
Макросить в данном случае - неэффективный и затратный путь. А ведь задачу не назовешь слишком экзотической - например, нужно в файлах по маске сделать многоступенчатую замену, но не во всех, а в некоторых, в зависимости от их содержания.
Я предлагаю так. Пользователь вызывает пакет. Исполняются пресеты из него. Если есть что заменить согласно пресету, в котором включено подтверждение замены, выдается стандартный запрос Replace/Replace All/Abort/Abort All. Соответственно, при выборе Abort прекращается обработка пакетом текущего файла, Abot All - обработка файлов вообще.
Cavaler wrote: 8. Про что речь вообще? В редакторских пресетах есть [X] Execute from current position
В пресетах есть, а в основном диалоге - нет. С другой стороны, в основном диалоге есть [ ] Только в выделенном, а в пресетах этого нет.
Cavaler wrote: 9-10. Неправда, что диалог всегда под найденным. А 80x25 неактуально. Но - иногда бывают подглюки, посмотрим.
Почему ж неактуально? При запуске на чистой машине, с настройками консоли по умолчанию, все открывается именно в 80x25.
Кроме того, 80x25 - это для примера привел. См. аттач - замена с теми же параметрами, что и для Test2.txt, даст окно с уехавшими вниз контролами на первом же матче (консоль 98x50).
Cavaler wrote: 11. См выше, 80x25 неактуально. А радиобаттоны удобнее списка. Да и это не единственный такой диалог.
Я лично не вижу, чем они удобнее. Удобно то, что функционально. Впрочем, я уже это говорил.
Attachments
Test3.txt
(1.1 KiB) Downloaded 98 times
Magically yours
Raistlin
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

Re: Regular Expression Search and Replace (RESearch)

Post by Raistlin »

Еще пожелания:
  1. В русское название галки "Удалить ставшие пустыми строки" полность не видно. Если можно, измените, пож., расположение контролов в диалоге. Даже высоту диалога менять не придется - достаточно сдвинуть [ ] Удалить несовпавшие строки почти до упора вправо (и выровнять с его левой границей [ ] Только в выделенном).
  2. В S&R в редакторе есть очень полезная штука - "Продолжить работу" и "Продолжить работу (обратный поиск)". Позволяет, инициировав поиск или замену и затем прервавшись, продолжить процесс. Особенно удобным является то, что плагин запоминает последний использовавшийся режим, поэтому для вызова фичи достаточно двух хоткеев (вперед и назад). Можно прикрутить такое?
Magically yours
Raistlin
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

AleXH wrote:
Cavaler wrote:При нынешней стоимости оперативки все это от лукавого, я считаю.
Далеко не всегда есть возможность натыкать памяти. Но если "всасывать", то как будет соотносится размер обрабатываемого файла и размер выделяемой сабжу памяти? Считаем, что свопа у системы нет.
Тот же файл в UTF-8 - то есть столько же для английского, в 2 раза больше для русского.
AleXH wrote:В макросе RESearch.lua нет обработки для обратного поиска AltF7 в редакторе.
А в макросах для Far1/2 AltF7 - это Filter. Его и добавлю.
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

HaRT wrote:
Cavaler wrote:
HaRT wrote:А PCRE умеет читать только из памяти?
Если умеет также из какого-либо потока, то можно сделать трубопровод.
При нынешней стоимости оперативки все это от лукавого, я считаю.
Не могу согласиться.
Как бы ни была дёшева память и сколько бы её ни было установлено на компе, непременно как-нибудь в дерево затесается файл, который в неё не влезет.
А потоки с трубопроводами тем и хороши, что позволяют без лишнего расхода памяти перекодировать/разжимать/расшифровывать, часто даже параллельно.
У тебя был пример реально нужной замены в текстовом файле под гигабайт?
Не, раз уж я написал код Several-Line, то не буду выпиливать. А он работает по потоку.
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

Raistlin wrote:
Cavaler wrote:0. Если хотите, чтобы ваши правки попали в исходники - правьте RESearch.msg, он в комплекте. Искать руками все исправления в .lng мне лень.
А они попадут? Помнится, вы скептически отнеслись к моему принципу расстановки хоткеев.
Ну как минимум я смогу быстро сравнить и подумать. А так - не попадут точно.
Raistlin wrote:
Cavaler wrote: 1. Не могу повторить - ни в Far2 ни в Far3 нет никакого выделения после завершения замены.
Это как же? Мы выделяем в том файле кусок с 3-й по 37-ю строку, делаем замену (три вхождения находятся), и после этого - ничего не выделено?
А что выделено-то? Пустая строка?
После выполнения каждой замены выделение явно сбрасывается, кроме "Replace in selection".
Raistlin wrote:
Cavaler wrote:4. Не могу повторить.
Н-да, на чистой виртуалке с единственным плагином (см. выше) и настройками Far'а с рабочей машины - не падает. А на рабочей системе, тоже с единственным плагином (копия Far в отдельной папке), - падает. И куда копать? Может это как-то зависеть от наличия сторонних программ? Что-нибудь менялось в переименовании по сравнению с 7.84?
Нет. Если бы менялось - я бы посмотрел.
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

Raistlin wrote:
Cavaler wrote:5. Если галка включена, переименование работает как замена в редакторе - применяясь дальше к неизмененной части. В противном случае слишком легко зациклиться. Я предпочту исправить описание, нежели логику работы.
Я это и имел в виду - едва ли можно придумать юзкейс для алгоритма, указанного в описании.
Хотя, на мой взгляд, строго говоря, при наличии регэкспов "Многократная замена" - лишнее.
А как одной заменой заменить все "a" на все "b"?
Raistlin wrote:
Cavaler wrote: 7. Пресеты - исполняются без вмешательства пользователя. Если очень надо, можно намакросить загрузку пресета в диалог.
Макросить в данном случае - неэффективный и затратный путь. А ведь задачу не назовешь слишком экзотической - например, нужно в файлах по маске сделать многоступенчатую замену, но не во всех, а в некоторых, в зависимости от их содержания.
Ну на мой взгляд это уже довольно экзотично. Особенно если это достаточно повторяющаяся операция, чтобы для нее делать пресеты.
Raistlin wrote:Я предлагаю так. Пользователь вызывает пакет. Исполняются пресеты из него. Если есть что заменить согласно пресету, в котором включено подтверждение замены, выдается стандартный запрос Replace/Replace All/Abort/Abort All. Соответственно, при выборе Abort прекращается обработка пакетом текущего файла, Abort All - обработка файлов вообще.
Делать разные запросы для запуска из пресета и из диалога - вообще ахтунг.
Raistlin wrote:
Cavaler wrote: 8. Про что речь вообще? В редакторских пресетах есть [X] Execute from current position
В пресетах есть, а в основном диалоге - нет.
Сделай Ctrl+PgUp перед вызовом диалога. Зачем опция для того, что делается вручную одним нажатием?
Raistlin wrote:С другой стороны, в основном диалоге есть [ ] Только в выделенном, а в пресетах этого нет.
А что делать, если опция в пресете такая выставлена, а выделения нет?
Raistlin wrote:
Cavaler wrote:9-10. Неправда, что диалог всегда под найденным. А 80x25 неактуально. Но - иногда бывают подглюки, посмотрим.
Почему ж неактуально? При запуске на чистой машине, с настройками консоли по умолчанию, все открывается именно в 80x25.
Это и есть неактуально - искусственная ситуация. Никто не мешает сделать консоль больше даже в 800x600. И пользоваться будет удобнее.
Raistlin wrote:
Cavaler wrote:А радиобаттоны удобнее списка.
Я лично не вижу, чем они удобнее.
1 клик против 2, и сразу видимый выбор опций.
Raistlin wrote:Удобно то, что функционально.
Это кардинально неправильное заблуждение. Функциональнее всего - командная строка, и написание скриптов самому. С их помощью можно сделать ВСЕ. Но из этого не следует, что они удобнее GUI и готовых инструментов.
User avatar
Cavaler
Posts: 1184
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 10 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

Raistlin wrote:В диалоге замены русское название галки "Удалить ставшие пустыми строки" полность не видно.
Вообще-то в последней версии они на разных строках со следующей опцией, ровно для этого.
Raistlin wrote:[*]В S&R в редакторе есть очень полезная штука - "Продолжить работу" и "Продолжить работу (обратный поиск)". Позволяет, инициировав поиск или замену и затем прервавшись, продолжить процесс. Особенно удобным является то, что плагин запоминает последний использовавшийся режим, поэтому для вызова фичи достаточно двух хоткеев (вперед и назад). Можно прикрутить такое?
Не очень понял, что он такого запоминает, что не запоминает Search/replace again?
Post Reply

Return to “Обсуждение плагинов”