vim: вставить выделенный текст в командную строку? - PullRequest
15 голосов
/ 02 февраля 2011

Если я выделил некоторый текст в визуальном режиме, как мне вставить выделенный текст в командную строку?

Например, если я хочу найти выбранный в данный момент текст, я мог бы использовать y/<c-r>"… Но есть ли способ сделать это без предварительного извлечения выделенного текста?

Редактировать : лучший пример, поскольку поиск в визуальном режиме расширит выделение: если у меня выбрана часть имени файла, и я хочу добавить это имя, откройте его в новый редактор.

Ответы [ 5 ]

7 голосов
/ 06 января 2012

Я переназначил : в визуальном режиме, чтобы решить эту проблему. С помощью следующего сопоставления я могу вставить выделенный текст в командную строку и b - onus - переместить курсор в крайнее левое положение:

vnoremap : y:<C-r>"<C-b>

Один небольшой недостаток, который я вижу - нажатие : теперь отменяет выбор.

2 голосов
/ 04 июля 2013
  1. Поместите код и вставьте код в файл конфигурации vimrc.
  2. Открыть редактор vim.
  3. Выберите текст (например, используя v)
  4. Войдите в командный режим, используя:
  5. Выбранный текст теперь может быть вставлен в командную строку с помощью Ctrl-p

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

Кредиты:

  1. Основано на идее ierton (на этой странице)
  2. Большая часть кода взята с Брайана Кеннеди

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

" Escape special characters in a string for exact matching.
" This is useful to copying strings from the file to the search tool
" Based on this - http://peterodding.com/code/vim/profile/autoload/xolox/escape.vim
function! EscapeString (string)
  let string=a:string
  " Escape regex characters
  let string = escape(string, '^$.*\/~[]')
  " Escape the line endings
  let string = substitute(string, '\n', '\\n', 'g')
  return string
endfunction

" Get the current visual block for search and replaces
" This function passed the visual block through a string escape function
" Based on this - /617096/vim-poisk-i-zamena-vybrannogo-teksta#617118
function! GetVisual() range
  " Save the current register and clipboard
  let reg_save = getreg('"')
  let regtype_save = getregtype('"')
  let cb_save = &clipboard
  set clipboard&

  " Put the current visual selection in the " register
  normal! ""gvy
  let selection = getreg('"')

  " Put the saved registers and clipboards back
  call setreg('"', reg_save, regtype_save)
  let &clipboard = cb_save

  "Escape any special characters in the selection
  let escaped_selection = EscapeString(selection)

  return escaped_selection
endfunction

" Start the find and replace command across the entire file
vmap <leader>z <Esc>:%s/<c-r>=GetVisual()<cr>/

" When in visual mode,
" before command mode is entered by using :
" Put the contents of any selected text into
" the default register
" leave the text highlighted.
" Based on ierton - https://stackoverflow.com/questions/4878980/vim-insert-selected-text-into-command-line
vnoremap : "pygv:

"Map ctrl-P to paste escaped contents of default register in command mode
" Based on bryan kennedy - https://stackoverflow.com/questions/676600/vim-search-and-replace-selected-text
cnoremap <C-P> <c-r>=GetVisual()<cr>
2 голосов
/ 02 февраля 2011

После активации визуального режима и выбора некоторого текста, если я нажму / для поиска вперед и затем нажму <C-R>*, я получу выделенный текст, вставленный в командную строку.

Другой способ (по крайней мере,в Linux) - нажать <S-Insert>, чтобы вставить содержимое текущего выделения в X11 (например, выбрать что-то в Firefox, и вы можете <S-Insert> в любом другом приложении, чтобы скопировать этот выбор; опять же, по крайней мере, в Linux).

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

Редактировать: Я принимал GVim, который копирует визуальный выбор в буфер выбора X11 (см. :help x11-selection для получения дополнительной информации).

Если вы используете Vim внутри консоли, то я думаю,(но может быть ошибочным), что ваш лучший вариант - выбрать текст, который вы хотите, мышью, нажимая Shift вниз, а затем использовать <S-Insert>, чтобы скопировать этот текст в командная строка.Это работает в Linux и, вероятно, в OSX тоже;Я не знаю о Windows, извините.

1 голос
/ 02 февраля 2011

Я знаю, что это может или не может помочь вам, но введите команду! Изнутри vim. Это не копирование и вставка, но если вы используете ssh - это по крайней мере позволит вам просматривать буфер (ы), пока вы набираешь свою команду.

ex:! Make

Все зависит от того, в какой среде вы находитесь.

Если вы используете замазку из окон, вы можете выделить и скопировать из нее текст (настраиваемый также внутри замазки) и вставить в другой сеанс замазки или в другое окно (если используете screen или tmux).

Если вы на самом деле на коробке и имеете графическое окружение, копировать и вставлять должно быть довольно легко (поэтому я предполагаю, что вы не в этой позиции).

Надеюсь, это поможет, извините, если это не так.

0 голосов
/ 30 марта 2014

Я нашел решение.Когда вы нажимаете: в визуальном режиме вместо обычного ": " у вас есть ": '<,'> ".Так что вам нужно стереть это, чтобы написать команду как обычно.Для расширения до выделенного текста* работает довольно хорошо.

vnoremap <M-8> :<BS><BS><BS><BS><BS>NGrep <C-r>*<CR>

Если вы хотите отредактировать команду перед ее запуском, просто удалите завершающий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...