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?


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.


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>

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 @/


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.



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ą)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.