Искать выделение в vim


107

При написании C ++ я использую плагины vim и vim для Visual Studio. Часто мне хочется искать строку внутри функции, например, при каждом вызове object->public_member.memberfunc().

Я знаю, что vim предлагает удобный способ поиска отдельного слова, нажав *и #, а также может искать набранные строки с помощью повсеместной /команды косой черты . При попытке найти все экземпляры более длинной строки, подобной приведенной выше, потребуется некоторое время для повторного ввода после /.

Есть ли способ поиска по выделению? Например, выделите с помощью v, а затем скопируйте с помощью y, есть ли способ вставить после /? Есть более простой способ?


Возможный дубликат Как искать выделенный текст?
acm

Ответы:


154

Проверьте этот совет Vim: ищите визуально выделенный текст

Или вы можете просто выдернуть выделенный текст с помощью y и перейти в режим поиска / , затем вы можете вставить последний извлеченный текст с помощью Ctrl + R 0


4
@CMS. Спасибо. Отличный совет! Использование: reg, чтобы увидеть, что находится в ваших регистрах, а затем использование cntl-R N, чтобы узнать, что находится в регистре N, отлично!
Роб Уэллс,

85

Ответ

  1. Выдерните текст, который хотите найти
  2. q/p
  3. Enter

Объяснение

q/работает аналогично обычному поиску, /за исключением того, что вы находитесь в командном режиме, поэтому pфактически выполняет «вставку» вместо ввода символа p. Таким образом, приведенное выше скопирует текст, который вы ищете, и вставит его в поиск.

Для получения более подробной информации введите :help q/


4
Мне нравится этот, потому что мне неудобно набирать <ctrl-r>.
янв.

Превосходно! При использовании emacs in evil-modeэто действительно работает, тогда как принятый ответ с треском ломается (вероятно, из-за использования Ctrlключа).
eestrada

2
Отлично подходит для простых строк, но не избегает специальных символов регулярного выражения, как указано в этом другом комментарии ответа .
Bluu

1
И даже дергать не нужно. Выбрать его на визуальном q/gvpgv

1
@nwildner, q/gvpу меня не работает. Не могли бы вы пояснить свое предложение?
bam

38

Используйте q / вместо просто / . ( То же самое с д : ). Теперь вы можете редактировать VIM через свою историю команд и поиска! (Попробуйте как-нибудь Ctrl-N и Ctrl-P).


10

Я только что узнал (из прекрасной книги « Практический Vim» ), что для этого есть плагин. Вы можете найти плагин на GitHub .

Плагин позволяет искать визуальное выделение с помощью *и #.


5
Обратите внимание, что другие ответы не экранируют. Используя эти методы, любые выбранные метасимволы не будут искать буквально, в зависимости от текущей magicнастройки. Это может даже привести к сбою поиска метасимволов, требующих балансировки. Упомянутый здесь плагин выполнит экранирование перед поиском выделенного текста.
Курт Хатчинсон,

1
он работает, но, к сожалению, вы не можете использовать его nдля перехода к следующему найденному элементу, в то время как подходы Кори и CMS позволяют ..
Айрат,

2

Вы можете выделить текст визуально и нажать * и # для поиска следующего вхождения ... Он будет работать так же, единственное предостережение:

Пробел в выделенном фрагменте соответствует любому пробелу при поиске (поиск «hello world» также найдет «hello» в конце строки, с «world» в начале следующей строки).

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


2
для меня визуальный выбор текста с последующим нажатием * просто расширяет мой визуальный выбор.
Мартин Якубик

Вы не можете по умолчанию, если не поместите в vimrc отображение со страницы ..
Ayrat
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.