При использовании WSL / Bash для Windows я хочу иметь возможность использовать один y
yy
3y
и p
тот же способ, которым они всегда работают в vim, но подключаться к системному буферу обмена, который используется всеми приложениями, а не к внутреннему буферу обмена vim ... У меня уже есть возможность управлять буфером обмена. история.
Кажется, что Vim уже имеет встроенную опцию для синхронизации буфера копирования / вставки с системным буфером обмена ... Но проблема при запуске WSL заключается в том, что вам действительно нужно использовать /mnt/c/Windows/System32/clip.exe
для доступа к буферу обмена ... Так что, хотя я хотел бы чтобы иметь возможность использовать:
set clipboard^=unnamed
Кажется, у него пока нет поддержки WSL.
Я понимаю, что у neovim это возможно, но я не хочу сейчас экспериментировать с neovim ...
На данный момент самое близкое решение, которое я нашел, это:
nnoremap <silent> <leader>y :call system('/mnt/c/Windows/System32/clip.exe', @0)<CR>
vnoremap <silent> <leader>y :call system('/mnt/c/Windows/System32/clip.exe', @0)<CR>
Но это действительно ужасное решение, на мой взгляд ... Это делает процесс копирования в два этапа ...
Конечно, я могу сделать несколько копий и вставок с помощью мыши / shift + ins, но я думаю, что должен быть способ заставить эту синхронизацию работать должным образом в Vim.
источник
Ответы:
Я знаю, что это очень старый вопрос, но недавно я нашел хорошее решение. После большого разочарования я наткнулся на эти способы доступа к системному буферу обмена Windows путем копирования и вставки.
При копировании с версией vim> = 8.0.1394, как отмечено в другом ответе https://vi.stackexchange.com/a/15190.
Вставка, сопоставление с поддельными командами реестра, то есть "= p или" + p или что-то еще.
Вставка правой кнопкой мыши работает, но это неудовлетворительно, если вы не хотите использовать мышь
источник
vi
я добавилnnoremap <S-Insert> :r !powershell.exe -Command "& {Get-Clipboard}"<Enter>
noremap "+y :exe 'norm a'.system('echo '.shellescape(join(v:event.regcontents, "\<CR>")).' | clip.exe')<CR>
(что не работает ...)Что насчет этого?
uname
это команда терминала Linux, которая возвращает информацию об ОС, так что она вернетсяLinux
для WSL. Принимая во внимание-r
флаг, команда возвращает информацию о выпуске ОС, поэтому она должна включать «Windows».TextYankPost
является событием vim (см.:h TextYankPost
вvim
), которое обнаруживает вашу активность в тексте.clip.exe
командная строка Windows в WSL (см.CLIP /?
командную строку), которая копируетtext
или возвращает изcommand
буфера обмена черезtext | clip.exe
илиcommand | clip.exe
. Здесьclip.exe
выполняется из vim функцией vimsystem
.источник
has('wsl')
вместоsystem('uname -r') =~ "Microsoft"
.Я сделал пиар для поддержки WSL, чтобы подделать некоторое время назад.
Смотрите vimawesome о том, как его установить;
help fakeclip
для использования.источник