Копирование из поискового запроса vim
Я пытаюсь скопировать текст из моего поискового запроса vim. Я потратил довольно много времени на создание регулярных выражений для sed search & replace. Поскольку мое регулярное выражение часто довольно сложно, мне нравится создавать его в поиске перед выполнением:% s/regex/new text/g
В терминале vim я могу скопировать мое новое регулярное выражение из строки поиска с помощью мыши. Я хотел бы использовать gvim как можно больше, но это не позволяет щелчкам правой кнопки мыши для копирования.
Любые идеи о том, как получить поисковый запрос в буфер?
Спасибо,
Эндрю
Ответы
Ответ 1
В командном режиме (где вы находитесь, когда вы нажмете: в обычном режиме), вы можете сделать ctrl-R /
, который будет расширяться до вашего последнего условия поиска (другие ctrl-R фавориты "для вашего yank-буфера или% для полный путь к текущему окну)
На самом деле вам это не нужно. Если вы не укажете поисковый запрос для: s, предполагается, что вы хотите использовать последнее, что искали. поэтому вы можете /searchregex, а затем сразу после этого:% s//replaceregex/и будет использовать поисковое регулярное выражение для замены.
Ответ 2
Используйте q:
, чтобы открыть редактируемое окно, содержащее историю вашей командной строки. Оттуда вы можете использовать все свои обычные инструменты Vim для копирования/вставки/и т.д.
Для эквивалентной функции, связанной с историей поиска, введите q/
.
Ответ 3
q/
показывает историю поиска. Для обратного действия копирования строки из вашего обычного буфера в буфер команд или буфер поиска, что не позволяет использовать p
в обычном режиме, используйте Ctrl-R 1
для вставки.
Ответ 4
Копировать текст между реестрами можно с помощью :let
, например. скопируйте последний поисковый запрос в регистр b
:
:let @[email protected]/
Затем используйте ctrl-R b
, чтобы вставить его, как в ответе Мэтта Бриггса. Конечно, это необязательно, если вы можете вставить его напрямую, используя ctrl-R /
(в режиме вставки или ex) или "/p
(в обычном режиме), но с этим отображением:
nnoremap <silent> y/ :let @"[email protected]/<CR>
вы можете ввести y/
, чтобы скопировать последний поисковый запрос в неназванный регистр для легкого вставки. Вместо этого вы можете использовать регистр *
, чтобы скопировать в системный буфер обмена и добавить текст в другие приложения:
nnoremap <silent> y/ :let @*[email protected]/<CR>
См
:help 'clipboard'
:help registers
для получения дополнительной информации о регистрах Vim и использовании системного буфера обмена.