Podświetlanie wyszukiwanego terminu bez poruszania kursorem

15

Korzystając z Vima, czasami patrzę przez chwilę na fragment kodu źródłowego i nagle chcę wyskoczyć jakaś zmienna na ekranie. To proste: /<var>co wyróżnia je wszystkie. Moim problemem jest to, że wyszukiwanie często przesuwa moje okno, więc nie patrzę na kod źródłowy z tego samego miejsca. Nawet jeśli przesunęła się tylko o kilka wierszy, nadal mnie odtrąca, ponieważ muszę poświęcić kilka sekund, aby dowiedzieć się, dokąd wszystko się zmieniło.

Czy można wyróżnić wyszukiwane hasło bez przenoszenia kursora do następnego dopasowania?

Andrew Wood
źródło
2
Nie do końca odpowiedź, ale używam tylko dwóch tyknięć (``), aby przejść do miejsca, w którym byłem wcześniej.
Izkata

Odpowiedzi:

1

http://vim.wikia.com/wiki/VimTip1572

Jeśli korzystałeś z tej wtyczki, możesz po prostu włączyć tę funkcję

\ m

następnie użyj klawisza NumPad, aby przypisać kolor do tego słowa wszędzie bez poruszania kursorem.

1

Możesz użyć wielu różnych wyróżnień jednocześnie dla wielu różnych słów lub bardziej złożonych wzorców wyszukiwania, jeśli chcesz.

lessthanideal
źródło
Uwielbiam tę wtyczkę!
Andrew Wood,
15

Odpowiedź skyblue pokazuje sedno idei użycia zwykłego podświetlania wyszukiwania do osiągnięcia tego, co chcesz.

Rozszerzyłem tę technikę, tworząc skrót klawiszowy, który działa podobnie do *polecenia , ale bez przechodzenia do następnego dopasowania.

Dziękuję garyjohn za wskazanie expand()odpowiednika *wyboru słowa (aby uniknąć używania *samego siebie i przywracania widoku). Upraszcza to kod na tyle, aby mógł przejść bezpośrednio do mapowania (eliminuje za pomocą funkcji). Dodałem również mapowanie, które pasuje do częściowych słów (jak g*).

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>
Chris Johnsen
źródło
1
Można uniknąć wywołań funkcji winsaveview (), winrestview () i normal *zastępując let @/ = @/je let @/ = expand("<cword>").
garyjohn
@garyjohn: Tak, to jest lepsze. Nie byłem pewien, czy dokonano czegoś równoważnego z wyborem „słowa” *, ale tak <cword>jest.
Chris Johnsen,
13

Możesz także ustawić rejestr wyszukiwania na zmienną, którą chcesz dopasować.

Najpierw upewnij się, że podświetlanie wyszukiwania jest włączone:

:set hlsearch

Następnie możesz ustawić rejestr wyszukiwania za pomocą:

:let @/="variable"

Spowoduje to podświetlenie wszystkich wystąpień zmiennej bez przechodzenia do następnego meczu.

Aby uzyskać więcej informacji, zobacz :help @/


źródło
7

Jednym ze sposobów jest użycie :matchpolecenia, np.

:match Question '^R^W'

Spowoduje to podświetlenie słowa pod kursorem za pomocą grupy wyróżnień Pytanie. Często używam grupy Pytanie, ponieważ na moim terminalu jest ładna zieleń. Aby zobaczyć dostępne grupy wyróżnień, wykonaj

:hi

Symbolami ^Ri ^Wsą odpowiednio Ctrl-R i Ctrl-W i są zastępowane słowem pod kursorem. Widzieć

:help c_CTRL-R_CTRL-W

po więcej na ten temat. Widzieć

:help :match

więcej na temat :matchpolecenia. Aby usunąć zaznaczenie, po prostu wykonaj

:match

bez argumentów.

garyjohn
źródło
1

Oprócz:

 :set hlsearch

Może chcesz:

 : set noincsearch
Therube
źródło
0

Podobnie jak *my:

[I ............................. it show where the word under the cursor appears

Warto na to spojrzeć :h [I. tam znajdziemy kilka interesujących rzeczy związanych z Twoimi potrzebami.

Podobne pytanie dotyczy stackoverflow, w którym umieszczam swoją odpowiedź (nieco bardziej kompletną)

SergioAraujo
źródło