Виділення пошукового терміна без переміщення курсору


15

Використовуючи Vim, я іноді нападаю на якийсь час, як дивлюся на розділ вихідного коду, і раптом хочу, щоб якась змінна на екрані вискочила. Це просто: /<var>що висвітлює їх усіх. Моє питання полягає в тому, що частіше за все пошук змінює моє вікно, тому я не дивлюся на вихідний код з того самого місця. Навіть якщо він зміщений лише на кілька ліній, це все одно відкидає мене, оскільки мені потрібно зайняти кілька секунд, щоб зрозуміти, куди рухалися речі.

Чи можна виділити пошуковий термін без переміщення курсору на наступний збіг?


2
Не зовсім відповідь, але я просто використовую дві підставки (``), щоб перейти туди, де я був раніше.
Ізката

Відповіді:


1

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

Якщо ви використовували цей плагін, ви можете просто включити функціональність

\ м

потім використовуйте клавішу NumPad, щоб призначити колір цьому слову скрізь, не переміщуючи курсор.

1

Ви можете використовувати відразу декілька різних виділень для багатьох різних слів або більш складних моделей пошуку, якщо бажаєте.


Я люблю цей плагін!
Ендрю Вуд

15

Відповідь skyblue показує суть ідеї, як використовувати звичайне підсвічування пошуку для досягнення того, що ви хочете.

Я розширив цю техніку, зробивши прив'язку клавіш, яка працює аналогічно *команді , але насправді не переходила до наступного матчу.

Я дякую garyjohn за те, що вони вказалиexpand() еквівалент *вибору слова (щоб уникнути використання *та відновлення виду). Це досить спрощує код, щоб він міг переходити безпосередньо у відображення (ухиляється від використання функції). Я також додав відображення, яке відповідає частковим словам (як 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
Ви можете уникнути дзвінків на winsaveview (), winrestview () та normal *заміну let @/ = @/на let @/ = expand("<cword>").
garyjohn

@garyjohn: Так, це краще. Я не був впевнений, що було зроблено щось еквівалентне вибору "слова" *, але <cword>це так.
Кріс Джонсен

13

Ви також можете встановити регістр пошуку на змінну, з якою ви хочете відповідати.

Спочатку переконайтеся, що ввімкнено підсвічування пошуку:

:set hlsearch

Потім ви можете встановити регістр пошуку за допомогою:

:let @/="variable"

Це дозволить виділити всі випадки змінної без переходу до наступного матчу.

Для отримання додаткової інформації див :help @/


7

Один із способів - використовувати :matchкоманду, наприклад,

:match Question '^R^W'

Це виділить слово під курсором за допомогою групи виділення питань. Я часто використовую групу запитань, оскільки на моєму терміналі гарна зелена. Щоб побачити доступні групи виділень, виконайте виконання

:hi

Значення ^Rі ^Wє Ctrl-R і Ctrl-W відповідно і замінені словом під курсором. Побачити

:help c_CTRL-R_CTRL-W

більше про це. Побачити

:help :match

для отримання додаткової інформації про :matchкоманду. Щоб очистити це виділення, просто виконуйте

:match

без аргументів.



0

Подібно до *нас:

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

Варто подивитися :h [I. там ми знаходимо цікаві речі, пов’язані з вашими потребами.

На stackoverflow є аналогічне запитання, де я ставлю свою відповідь (трохи більш повна)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.