выделить все вхождения слова под курсором

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

выделить все вхождения слова под курсором

Post by zg »

Latest post of the previous page:

простейший макрос пишется от силы за пол часа:

Code: Select all

F=far.Flags
color=
  Flags:bit64.bor F.FCF_FG_4BIT,F.FCF_BG_4BIT
  ForegroundColor:0x1
  BackgroundColor:0xf
colorguid=win.Uuid "507CFA2A-3BA3-4f2b-8A80-318F5A831235"
word=false
Macro
  area:"Editor"
  key:"F5"
  description:"Color Word Under Cursor"
  action:->
    if word then word=false
    else
      ei=editor.GetInfo!
      pos,row=ei.CurPos,ei.CurLine
      line=editor.GetString!.StringText
      if pos<=line\len()+1
        slab=pos>1 and line\sub(1,pos-1)\match('[%w_]+$') or ""
        tail=line\sub(pos)\match('^[%w_]+') or ""
        word=slab..tail
      if word\len()<=0 then word=false
Event
  group:"EditorEvent"
  action:(id,event,param)->
    if event==F.EE_REDRAW
      if word
        ei=editor.GetInfo!
        start,finish=ei.TopScreenLine,math.min ei.TopScreenLine+ei.WindowSizeY,ei.TotalLines
        for ii=start,finish
          line,pos=editor.GetString(-1,ii).StringText,1
          while true
            jj,kk,curr=line\cfind("([%w_]+)",pos)
            if not jj then break
            if curr==word then editor.AddColor ei.EditorID,ii,jj,kk,F.ECF_AUTODELETE,color,100,colorguid
            pos=kk+1
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

выделить все вхождения слова под курсором

Post by Shmuel »

Вместо

Code: Select all

color=
  Flags:bit64.bor F.FCF_FG_4BIT,F.FCF_BG_4BIT
  ForegroundColor:0x1
  BackgroundColor:0xf
можно просто color=0xf1.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

выделить все вхождения слова под курсором

Post by DrKnS »

zg wrote: простейший макрос
Лайк. Давайте это в дистрибутив?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

выделить все вхождения слова под курсором

Post by zg »

с моей стороны никаких возражений.
User avatar
cmd.exe
Posts: 378
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 181 times
Been thanked: 10 times
Contact:

выделить все вхождения слова под курсором

Post by cmd.exe »

Возможно брать настройки у колорера что-бы не плотить дополнительные настройки цветов, или добавить данный функционал в колорер?
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

выделить все вхождения слова под курсором

Post by DrKnS »

Добавил.
Цвет - инверсия COL_EDITORTEXT, чтобы у всех из коробки работало.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

выделить все вхождения слова под курсором

Post by Shmuel »

Неплохо бы этот скрипт доработать. Я вижу в нём 2 недостатка:

1. Выделение работает глобально по всем редакторам, в т.ч. вновь открываемым. То-есть, если мы выделили слово в редакторе, то оно выделилось во всех открытых редакторах. Если мы все их закрыли, слово будет подсвечиваться и во вновь открываемых редакторах, на любом файле, где есть это слово.

2. Для выделения нового слова при наличии уже выделенного нужно два раза нажать на F5. Можно было бы сравнивать слова: при совпадении - только сбрасывать выделение, а при несовпадении - сбрасывать старое и выделять новое.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

выделить все вхождения слова под курсором

Post by zg »

Shmuel wrote:2. Для выделения нового слова при наличии уже выделенного нужно два раза нажать на F5. Можно было бы сравнивать слова: при совпадении - только сбрасывать выделение, а при несовпадении - сбрасывать старое и выделять новое.
я сначала так и сделал. мне не понравилось: чтобы снять выделение, надо обязательно стоять на том же слове.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

выделить все вхождения слова под курсором

Post by Shmuel »

zg wrote: мне не понравилось: чтобы снять выделение, надо обязательно стоять на том же слове
Либо стоять между слов. Либо нажать 2 раза F5 на новом слове.
Впрочем, дело вкуса (или настройку в скрипте можно добавить).
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

выделить все вхождения слова под курсором

Post by fml2 »

Shmuel wrote:Для выделения нового слова при наличии уже выделенного нужно два раза нажать на F5. Можно было бы сравнивать слова: при совпадении - только сбрасывать выделение, а при несовпадении - сбрасывать старое и выделять новое.
Мне это тоже кажется более логичным. Для сброса выделения независимо от положения курсора можно было бы, например, использовать Ctrl+F5 (или еще что-нибудь в этом роде).

И можно еще пару пожеланий?

1. По умолчанию не учитывать большие/маленькие буквы
2. Если есть выделенный текст, то подсвечивать его вхождения, а не слово под курсором. Если выделено несколько строк, то не знаю, что лучше. Можно слово под курсором или то, что выделено в первой выделенной строке.

А так вообще очень полезная вещь! Если бы то же самое работало в просмотрщике... (я знаю, Фар не поддерживает это на уровне АПИ).
Post Reply

Return to “Предложения и идеи”