Как искать выделенный текст в Vim?

61

Я знаю, что могу использовать /регулярное выражение для поиска чего-либо. И я могу использовать ?для поиска в обратном направлении. И я могу использовать nи, Nчтобы повторить поиск вперед и назад.

Есть также два приятных сочетания клавиш: *или #будет искать слово под курсором (вперед / назад). Это очень полезно! (есть также g*и g#варианты)

Но ... Как только я выбрал текст с помощью визуального режима ( v), как я могу попросить Vim выполнить поиск именно этого текста? Быстрый просмотр :helpне ... да ... помог мне.

Денилсон Са Майя
источник
3
Связанные с Поиск по выбору в Vim .
Родриг
Спасибо за советы с *и #! Было бы неплохо, если бы ваш вопрос также объяснил, что g*и g#будет делать;)
winklerrr

Ответы:

22

Следующая последовательность будет делать то, что вы хотите, учитывая уже выделенный блок текста:

  • y(вернуть выделенный текст в "регистр по умолчанию)
  • / (войдите в режим поиска)
  • ( \ V) (необязательно, введите режим "очень без магии" *)
  • Ctrl+ r "(вставить текст из "регистра)
  • Enter (Engage!)

(*) Режим «очень без магии» интерпретирует следующий текст как обычный текст, а не как регулярное выражение. заметьте, однако, что \и /все еще являются особенными и должны будут быть обработаны другими способами. Если в тексте нет символов, считающихся специальными, вы можете пропустить этот шаг.

Источник: Vim Tips Wiki

glennsl
источник
1
Спасибо! Это гораздо более понятным , чем «How-To» на vim.wikia странице
winklerrr
64

Вы можете сначала восстановить выделенный текст. затем

  • /

  • Ctrlr

  • "

Который будет вставлять то, что вы дернули после /.

Ходж
источник
7
Хорошая идея ... за исключением того, что вставленный текст будет интерпретироваться как регулярное выражение, что нежелательно. :-(
Денилсон Са Майя
4
Если это почти достаточно хорошо для вас, то вы могли бы сделать /\V<C-r>"вместо этого. Приступая \Vк поисковому запросу, вы указываете vim использовать «очень без магии». Обратные слеши могут все еще вызывать проблемы. Смотрите:help \V
idbrii
3
Это может помочь объяснить, Ctrl+Rкак вы получаете доступ к регистру, и *это просто системный регистр буфера обмена. Например, вы также можете сделать: yawнабрать слово в регистр "( регистр по умолчанию), а затем /<C-r>"искать эту строку.
Бен Дэвис
5
@ DenilsonSá - вы можете использовать это решение, но вместо того, /чтобы использовать его для поиска, используйте ?вместо этого, поскольку обратный поиск по умолчанию экранирует косую черту. Затем вы можете нажать, Nчтобы продолжить поиск в прямом направлении.
Брэд Паркс,
7

Я никогда не чувствовал необходимости в такой функции, но, учитывая, что вы можете найти потребность в любой функции в Vim, я думаю, что это должно помочь:

Поиск визуально выделенного текста

Я не тестировал его, но, глядя на код, кажется, это именно то, что вы ищете.

slhck
источник
4

Вы можете найти метод для создания этого поведения здесь, на вики-сайте vim .

АКФ
источник
Хорошо, я нашел версию, чтобы избежать косых черт, чтобы быть полезным. vnoremap // y/\V<C-r>=escape(@",'/\')<CR><CR>
ремесло
1

Это решение позволяет вашему vim-поиску визуально выбранный контекст даже с многострочными и escape-символами.

Добавьте следующий код в себя .vimrcи выполните поиск по выбранному вами контенту //. Вы также можете глобально заменить выбранный контент с помощью /s. Или Локально замените выбранный контекст //первым, а затем визуально выберите регион и :'<,'>s//{new_text}.

set incsearch
set hlsearch
set ignorecase
function GetVisualSelection()
  let raw_search = @"
  let @/=substitute(escape(raw_search, '\/.*$^~[]'), "\n", '\\n', "g")
endfunction
xnoremap // ""y:call GetVisualSelection()<bar>:set hls<cr>
if has('nvim')
  set inccommand=nosplit
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s/
else
  xnoremap /s ""y:call GetVisualSelection()<cr><bar>:%s//
endif

Вышеуказанная конфигурация только для поиска. Для всех моих настроек vim, пожалуйста, посетите .vimrc

Чарльз X.-T. Li
источник
0

В моих конфигурациях на двух отдельных машинах, если я выбираю текст, а затем нажимаю на /него, автоматически выполняется поиск выделенного текста.

Натан Феллман
источник
Это не поведение по умолчанию. Здесь, когда я нажимаю / (находясь в визуальном режиме), он просто показывает пустое приглашение регулярного выражения, ожидая, что я что-то наберу.
Денилсон Са Майя
Странно, потому что я никогда не делал ничего, чтобы включить это.
Натан Феллман
3
Многие дистрибутивы поставляют нестандартную конфигурацию vim по умолчанию (возможно, потому что стандартная конфигурация vim отключает много полезных функций, в основном для совместимости с vi).
Слеське