Работа с блоками и быстрый поиск слова под курсором

Здесь обсуждается всё, что касается макросов.
Post Reply
SMT
Posts: 24
Joined: Tue 05 Mar, 2013 19:27
Has thanked: 2 times
Been thanked: 1 time

Работа с блоками и быстрый поиск слова под курсором

Post by SMT »

В эти новогодние выходные я созрел до перехода на x64 сборку FAR Manager.
Последняя попытка была в 2016, но провалилась из-за отсутствия нужных плагинов.
В этот раз почти все плагины отыскались для x64, но пару очень нужных плагинов мне не удалось найти и я решил их заменить LUA-скриптами.

Плагин Block Manupulator
Умеет переходить в начало выделенного блока и в конец выделенного блока.
Позволяет выделенному блоку не потеряться в большом файле ))
Макросы на кнопки Ctrl+Alt+Home / Ctrl+Alt+End
Edit.GotoBlock.lua.7z
(317 Bytes) Downloaded 161 times

Также Block Manupulator умел создавать блок, через отметку начала блока и конца блока.
Можно нажать Ctrl+B (это будет начало блока), потом вдумчиво походить по файлу, поискать там какие-то строки, снова нажать Ctrl-B, выделится блок между двумя этими позициями.
Аналогично можно выделять вертикальные блоки (кнопка Alt+B)
Edit.MarkBlock.lua.7z
(576 Bytes) Downloaded 161 times

Плагин Smooth Move
Там было две функции: переход по частям слова - либо на следующую заглавную букву, либо на подчёркивание (для навигации по "словам" типа GetConsoleScreenBufferInfo или FILE_SHARE_READ)
Этим я редко пользовался и не стал повторять в скриптах.

Вторая фунция плагина Smooth Move для меня просто must have. Это переход к следующему/предыдущему вхождению слова под курсором.
Очень удобно, если нужно, к примеру, отследить все вхождения какой-то переменной.
Кнопки Ctrl+Alt+Up / Ctrl+Alt+Down
Edit.CurrentWord.lua.7z
(847 Bytes) Downloaded 129 times
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Работа с блоками и быстрый поиск слова под курсором

Post by buniak_a_h »

SMT, лично я много работал в различных средах разработки (IDE), и там есть некий неписанный стандарт де-факто. В частности, работа с блоками повешена на сочетания, начинающиеся с CtrlK (традиция, восходящая ещё к Turbo-C и Turbo-Pascal-ю). У John Doe есть замечательный скрипт Ctrl-K-blocks.lua (входит в архив turbo.zip, опубликованный здесь). Там есть много интересного, рекомендую…
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Работа с блоками и быстрый поиск слова под курсором

Post by buniak_a_h »

Ну и ещё… NextWord/PrevWord реализованы в скрипте Editor_QuickSearch.lua от SimSU (или SUSim?). Опубликован здесь. Там же инкрементальный поиск, который тоже бывает очень полезен.
Всё уже давно придумано … :-(
Last edited by buniak_a_h on Mon 03 Jan, 2022 19:49, edited 1 time in total.
SMT
Posts: 24
Joined: Tue 05 Mar, 2013 19:27
Has thanked: 2 times
Been thanked: 1 time

Работа с блоками и быстрый поиск слова под курсором

Post by SMT »

Я подумал, может быть кому-то будет интересен микро-скрипт, который хорошо выполняет одну задачу, не имеет всяких настроек и локализаций, как те монстры.
Хорошо, что написание скриптов такое простое, что быстрее новое написать, чем искать готовое.
Наверное, в таком случае нет смысла публиковать микро-скриты, чтобы не засорять форум.

Жаль только, что нет документации, где последовательно было бы написано, что такое luafar3.dll (и почему он не внутри Far.exe), зачем нужен отдельный LuaMacro.dll, чем отличается Editor от editor (и как так получилось, что их двое разных). Я это всё принял как есть, учитывая что у проекта долгая история и наверное так исторически сложилось, переделывать уже поздно.

При освоении скриптов остался вопросик, почему Editor.CurLine назван "свойством", хотя при записи в него текущая строка в редакторе не меняется (на чтение он отдаёт текущую строку).
Также мне кажется, есть ошибка в документации, на скрине ниже должно быть Editor, а не editor, у меня только так заработало.
doc_error.png
SMT
Posts: 24
Joined: Tue 05 Mar, 2013 19:27
Has thanked: 2 times
Been thanked: 1 time

Работа с блоками и быстрый поиск слова под курсором

Post by SMT »

Меня заинтересовал набор от SimSU, хотел посмотреть переход по слову и инкрементальный поиск.

Что делаю: копирую Editor_QuickSearch.lua в Macros/scripts, перезапускаю Far
Открываю любой текстовый файл (у меня это Far.exe.ini)
Встаю на слово, нажимаю Ctrl+Alt+Down - ничего не происходит.

Более того, это ломает "быстрый поиск". Теперь, если нажать RAlt и начать писать слово, появляется ошибка.
В буфере поиска каким-то образом оказывается лишний "\r\n"
Сначала я думал, "быстрый поиск" вообще сломан. Но если перед этим не нажимать Ctrl+Alt+Up/Down, то работает.
search_eror.png
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Работа с блоками и быстрый поиск слова под курсором

Post by Shmuel »

SMT wrote: Tue 04 Jan, 2022 11:01 Жаль только, что нет документации, где последовательно было бы написано, что такое luafar3.dll (и почему он не внутри Far.exe), зачем нужен отдельный LuaMacro.dll, чем отличается Editor от editor (и как так получилось, что их двое разных). Я это всё принял как есть, учитывая что у проекта долгая история и наверное так исторически сложилось, переделывать уже поздно.
Документация есть. Если проработаете luafar_manual.chm и macroapi_manual.ru.chm в папке Encyclopedia, многое станет понятным.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Работа с блоками и быстрый поиск слова под курсором

Post by buniak_a_h »

SMT wrote: Tue 04 Jan, 2022 11:09Что делаю: …
Вроде, делаете всё верно. Но я для себя именно этот скрипт немного переделал. Ну и повесил на те же хоткеи, что в IDE Delphi. А ещё сделал обработку ситуации "не найдено", как советовал citRiks: если не найдено то можно продолжить поиск с начала, либо поменять направление поиска.
Мой скрипт я где-то уже публиковал, но найти в этой свалкекладовке что-либо невозможно, посему публикую свой скрипт тут.
Editor_QuickSearch.lua
(13.07 KiB) Downloaded 149 times
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Работа с блоками и быстрый поиск слова под курсором

Post by buniak_a_h »

P/S.
Эти настройки (хоткейев) хранятся в %FARLOCALPROFILE%\SimSU\Editor_QuickSearch.cfg. Вот мой:

Code: Select all

return{
  Prior=52;
  KeyForward="CtrlE"; --PriorForward=50;
  KeyBack="AltShiftUp"; --PriorBack=50;
  KeyBS="BS"; --PriorBS=50;
  KeyNext="CtrlEnter"; PriorNext=51;
  KeyStop="Esc Home"; --PriorStop=50;
  KeyNextWord="CtrlAltDown"; --PriorNextWord=50;
  KeyPrevWord="CtrlAltUp"; --PriorPrevWord=50;

  VeryQuick=false; -- Очень быстрый поиск :)
  CaseSensitivity=false; -- Учитывать регистр.
  ThatWord="[%w_]+"; -- Что считается словом.
  SelectFound=false; -- Надо ли отмечать найденное
}
SMT
Posts: 24
Joined: Tue 05 Mar, 2013 19:27
Has thanked: 2 times
Been thanked: 1 time

Работа с блоками и быстрый поиск слова под курсором

Post by SMT »

buniak_a_h, ваш скрипт работает. Хотя diff показывает, что там капитально всё переделано. Возможно, у вас очень старая версия скрипта.
SMT
Posts: 24
Joined: Tue 05 Mar, 2013 19:27
Has thanked: 2 times
Been thanked: 1 time

Работа с блоками и быстрый поиск слова под курсором

Post by SMT »

buniak_a_h wrote: Tue 04 Jan, 2022 12:23 Эти настройки (хоткейев) хранятся в %FARLOCALPROFILE%\SimSU\Editor_QuickSearch.cfg
Лол, в этом и проблема с этим форумом. Ничего не документируется. Откуда вообще знать, что есть директория %FARLOCALPROFILE%\SimSU
Исходники курить?

Я поэтому не стал пробовать исходный пак скриптов, потому что открыл файл Editor_QuickSearch.lua и увидел:
-- Начало файла Profile\SimSU\Editor_QuickSearch.cfg
Сразу такой вопрос: что это такое? Я меня нет такой папки, и в сообщении, откуда я скачал архив, тоже не упоминается. И readme никакого нет.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Работа с блоками и быстрый поиск слова под курсором

Post by buniak_a_h »

SMT wrote: Tue 04 Jan, 2022 12:39 что это такое? Я меня нет такой папки
Есть папка %FARLOCALPROFILE% (переменная FARLOCALPROFILE видна только из FAR-а. Причем из разных экземпляров она может быть разной). Т.е. переходить в неё надо в ФАРе (в комстроке ввести cd %FARLOCALPROFILE%).
В ней надо создать папку SimSU, и в ней уже писать настроечный файл … . cfg.
На самом деле мой скрипт пробует загрузить настройки последовательно из %FARLOCALPROFILE%\SimSU\Editor_QuickSearch.cfg, %FARPROFILE%\SimSU\Editor_QuickSearch.cfg или из текста самого скрипта (функция Settings) (как в исходном скрипте было сделано, не помню и уже не хочется разбираться).
SMT wrote: Tue 04 Jan, 2022 12:39 открыл файл Editor_QuickSearch.lua и увидел:
-- Начало файла Profile\SimSU\Editor_QuickSearch.cfg
Тут умолчательный текст настроечного файла. Если нужно что-то поменять, то в качестве "рыбы" надо использовать то, что между начало и конец, а затем поменять то, что надо.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Работа с блоками и быстрый поиск слова под курсором

Post by buniak_a_h »

SMT wrote: Tue 04 Jan, 2022 12:35 diff показывает, что там капитально всё переделано. Возможно, у вас очень старая версия скрипта.
Возможно. Я что-то менял, у меня сначала тоже инкрементальный поиск не работал так, как я ожидал. После того, как заработало, я не следил за изменениями от автора - меня устраивало то, что есть. Инкрементальным поиском пользуюсь чаще, чем обычным. Ну и переход на следующее вхождение слова тоже часто требуется.
SMT
Posts: 24
Joined: Tue 05 Mar, 2013 19:27
Has thanked: 2 times
Been thanked: 1 time

Работа с блоками и быстрый поиск слова под курсором

Post by SMT »

Ни за что бы не догадался, что текст между "-- начало файла XXX" и "--- конец файла XXX" надо сохранить в файл XXX и менять там.
Это больше похоже, как будто исходник собран автоматически из этих файлов каким-то инструментом.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Работа с блоками и быстрый поиск слова под курсором

Post by buniak_a_h »

SMT wrote: Tue 04 Jan, 2022 16:47 исходник собран автоматически из этих файлов каким-то инструментом.
Инструмент называется копипастом (не путать с полиспастом ;-) ).
На самом деле, насколько я помню, у SimSU просто принят такой стандарт настройки. Чтоб не делать интерфейсной. На LuaFAR-е диалоги рисовать - довольно трудоёмкий процесс.
Post Reply

Return to “Обсуждение макросов”