Whole words with Regular expressions

Здесь можно сообщить о найденных багах в Far.
Post Reply
Yegor
Posts: 1031
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 8 times
Been thanked: 20 times

Whole words with Regular expressions

Post by Yegor » Wed 18 Sep, 2019 21:21

Есть подозрение (в помощи не нашел), что при поиске в редакторе настройки
[x] Whole words
[x] Regular expressions
не совместимы (что, возможно, и логично), т.е. при включенной [x] Regular expressions, [?] Whole words игнорируется.

Если так и задумано, то может делать невозможным выбирать [x] Whole words при [x] Regular expressions?
Если нет, то фиксить.

EDIT: Искал простую строку "ab" в тексте с [x] Whole words:
cab
abc
ab


и не мог понять почему не работает пока не заметил что включена опция[x] Regular expressions
Last edited by HaRT on Wed 18 Sep, 2019 21:42, edited 3 times in total.
Reason: Исправлен Заголовок Темы
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

Shmuel
Posts: 5900
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 223 times

Word wrap with Regular expressions

Post by Shmuel » Wed 18 Sep, 2019 21:26

Yegor wrote:
Wed 18 Sep, 2019 21:21
при поиске в редакторе настройки
[x] Word wrap
[x] Regular expressions
не совместимы
Никогда не видел в редакторе настройки Word Wrap (или я туплю?)

Yegor
Posts: 1031
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 8 times
Been thanked: 20 times

Word wrap with Regular expressions

Post by Yegor » Wed 18 Sep, 2019 21:30

Shmuel wrote:
Wed 18 Sep, 2019 21:26
(или я туплю?)
Это я туплю, исправил. Спасибо!
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

Shmuel
Posts: 5900
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 223 times

Word wrap with Regular expressions

Post by Shmuel » Wed 18 Sep, 2019 21:33

Понятно. В плагине LF Search эти опции не получится включить одновременно.

User avatar
HaRT
Moderator
Posts: 9105
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 90 times
Been thanked: 164 times

Whole words with Regular expressions

Post by HaRT » Wed 18 Sep, 2019 23:49

Yegor wrote:
Wed 18 Sep, 2019 21:21
Если так и задумано, то может делать невозможным выбирать [x] Whole words при [x] Regular expressions?
Поддерживаю. А пока
HaRT wrote:
Mon 18 Apr, 2016 23:17
Поскольку при поиске/замене в редакторе с “[x] Regular expressions” значение опции “[x] Whole words” игнорируется, я написал макрос, который позволяет сгладить это неудобство, пусть и не очень красивым способом — при включении галки “Только целые слова” изменяет регэксп дописыванием в начало и конец так, чтобы текст по нему находился только между границами слова (и чтобы номера/имена групп при этом не менялись); при выключении галки те префикс и суффикс убираются. И всё это происходит, только если включена опция “Регулярные выражения”.
  1. -- See http:// forum.farmanager.com/viewtopic.php?p=137190#p137190
  2. -- TODO extend to various RESearch dialogs
  3. local SEARCH_TXT_ITEM_POS =  5  -- in both Search and Replace
  4. local WHLWRD_CHK_ITEM_POS = 10  -- in both Search and Replace
  5. local REGEXP_CHK_ITEM_POS = 12  -- in both Search and Replace
  6.  
  7. Macro {
  8.   description = 'Search/Replace: smart toggle Whole Words for RegExp';
  9.   area = 'Dialog'; key = 'AltW';
  10.   condition = function()
  11.     return ( Dlg.Id == far.Guids.EditorSearchId or
  12.              Dlg.Id == far.Guids.EditorReplaceId )
  13.          and Dlg.GetValue(REGEXP_CHK_ITEM_POS) ~= 0
  14.   end;
  15.   action = function()
  16.     local prefix, suffix = '\\b(?:', ')\\b'
  17.     local searchText = Dlg.GetValue(SEARCH_TXT_ITEM_POS)
  18.     if Dlg.GetValue(WHLWRD_CHK_ITEM_POS) == 0 then
  19.       searchText = prefix .. searchText .. suffix
  20.     else
  21.       local prefLen, suffLen = prefix:len(), suffix:len()
  22.       if searchText:sub( 1, prefLen ) == prefix and
  23.          searchText:sub( -suffLen, -1 ) == suffix then
  24.         searchText = searchText:sub( prefLen + 1, -( suffLen + 1 ) )
  25.       else
  26.         searchText = nil  -- flag that no change is required
  27.       end
  28.     end
  29.     if searchText ~= nil then
  30.       Dlg.SetFocus(SEARCH_TXT_ITEM_POS)
  31.       Keys('CtrlY')  -- TODO preserve caret position, selection, etc
  32.       print(searchText)
  33.     end
  34.     Keys('AKey');
  35.   end;
  36. }
(рассчитано на Язык интерфейса: English)
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Глюки и баги”