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

107

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

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

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

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

Ответы:

154

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

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

CMS
источник
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