Vim: вставить выделенный текст в командную строку?

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

  • Поместите код копирования и вставки в файл конфигурации vimrc.
  • Редактировать редактор vim.
  • Выберите текст (например, с помощью v)
  • Войдите в режим команд, используя:
  • Выбранный текст теперь можно вставить в командную строку, используя Ctrl-p

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

Кредиты:

  • Основываясь на идее ierton (на этой странице)
  • Большая часть кода взята из bryan kennedy

Vim искать и заменять выделенный текст

" 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 - https://stackoverflow.com/questions/676600/vim-replace-selected-text/677918#677918
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 - /questions/71946/vim-search-and-replace-selected-text
cnoremap <C-P> <c-r>=GetVisual()<cr>

Ответ 4

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

ex:! make

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

Если вы используете шпатлевку из окон, вы можете на самом деле выделить и скопировать текст из нее (настраивается так же, как и в putty), и вставить в другую сессию шпатлевки или другое окно (при использовании экрана или tmux).

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

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

Ответ 5

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

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

Если вы хотите отредактировать команду перед запуском, просто удалите трейлинг <CR> .