Я использовал "+y для копирования текста в системный буфер обмена, но он не работает в vim Bash в Windows.
Как "скопировать в буфер обмена" в vim из Bash в Windows?
Ответ 1
Поскольку ни "* y, ни" +y (...) не работают, альтернативой является следующее:
Добавьте это в .vimrc и создайте файл с именем ~/.vimbuffer
" copy (write) highlighted text to .vimbuffer
vmap <C-c> y:new ~/.vimbuffer<CR>VGp:x<CR> \| :!cat ~/.vimbuffer \| clip.exe <CR><CR>
" paste from buffer
map <C-v> :r ~/.vimbuffer<CR>
Выделите любой текст с помощью визуального или визуального блока и нажмите ctrl-c.
Вставьте скопированный текст за пределы вашего терминала, используя обычный метод или
вставьте скопированный текст в любую область vim, используя ctrl-v в обычном или визуальном режиме.
Ctrl-c восстанавливает выделенный текст, перезаписывает ~/.vimbuffer выделенным текстом, запускает команду UNIX для передачи данных из ~/.vimbuffer в clip.exe.
Любое дальнейшее улучшение (например, приведение команды в молчание) высоко ценится!
Изменить: Теперь команда может копировать строки любой длины, а не только целые строки. Старая команда:
vmap <C-c> :w! ~/.vimbuffer \| !cat ~/.vimbuffer \| clip.exe <CR><CR>
Ответ 2
 Чтобы скопировать в буфер обмена изнутри vim в Bash на Windows 10, удерживайте Shift и перетащите курсор на текст. затем нажмите enter
 Выбор должен выглядеть следующим образом перед нажатием enter:
РЕДАКТИРОВАТЬ: Это работает только с текстом, который помещается на экране все сразу; его нельзя использовать для копирования блоков текста, которые охватывают множество "экранов"
Ответ 3
 Если вы не хотите настраивать X-сервер, этот метод позволит вам скопировать выделенный текст в буфер обмена с помощью программы clip.exe поставляемой с Windows.
 Фрагменты кода ниже могут быть помещены в ваш файл  .vimrc.
 Сначала создайте вспомогательную функцию, которая будет возвращать выбранный текст в виде строки. Мы можем использовать эту функцию для clip.exe выделенного текста в clip.exe:
func! GetSelectedText()
    normal gv"xy
    let result = getreg("x")
    return result
endfunc
 system функция позволит нам вызывать собственные программы и передавать параметры в них. Фрагмент ниже устанавливает два сопоставления клавиш; первая строка позволяет использовать Ctrl + C для копирования текста, а вторая - Ctrl + X для вырезания текста:
noremap <C-C> :call system('clip.exe', GetSelectedText())<CR>
noremap <C-X> :call system('clip.exe', GetSelectedText())<CR>gvx
 После сохранения изменений в вашем файле .vimrc вы должны быть готовы.
 Если вы собираетесь использовать ваш .vimrc в нескольких системах, я предлагаю обернуть эти сопоставления в оператор if чтобы проверить, существует ли clip.exe самом деле:
if !has("clipboard") && executable("clip.exe")
    noremap <C-C> :call system('clip.exe', GetSelectedText())<CR>
    noremap <C-X> :call system('clip.exe', GetSelectedText())<CR>gvx
endif
Вышеприведенное также позволит Vim игнорировать эти привязки клавиш, если у него есть прямой доступ к системному буферу обмена.
Вы также можете добавить привязки клавиш, когда vim имеет доступ к буферу обмена, например:
if has("clipboard")
    vnoremap <C-X> "+x
    vnoremap <S-Del> "+x
    vnoremap <C-C> "+y
    vnoremap <C-Insert> "+y
    map <C-V>       "+gP
    map <S-Insert>      "+gP
    cmap <C-V>      <C-R>+
    cmap <S-Insert>     <C-R>+
endif
 Что пригодится, если вы используете Vim изначально в Windows или используете vim-gtk в системе Linux.
Ответ 4
Если вы заботитесь только о копировании полных строк, вы можете использовать Vim для передачи содержимого файла во внешнюю программу. Так что вы можете сделать
 :w !clip.exe
 clip.exe в clip.exe. Если вам нужны конкретные строки, скажем, от 2 до 10, вы можете просто сделать :2,10w !clip.exe.
Ответ 5
Если вы хотите использовать vim, входящий в WSL, вы можете использовать только буфер обмена, предоставляемый самим vim, а это означает, что вы можете копировать и вставлять только в vim.
Или вы можете попробовать:
- Установите VcXsrv и запустите его.
-  export DISPLAY=localhost:0в WSL Bash.
- Запустите vim-gtk или vim-gnome (или любые другие приложения GUI) и попробуйте Clipboard в Linux и Windows.
Ответ 6
Объединяя вышеприведенную информацию, можно скопировать простой текст из любого регистра в буфер обмена, не используя привязку клавиш (что может быть более удобным в некоторых случаях). Например, если вы хотите скопировать последний восстановленный текст в буфер обмена Windows, введите следующую команду (начните печатать):
:call system('clip.exe', '
Теперь нажмите Ctrl + r, а затем регистр +. Будет вставлен текст из указанного регистра. Затем закройте одинарные кавычки и скобки. Команда будет выглядеть так:
:call system('clip.exe', 'a text from 0 register')
Нажмите Enter, готово!

