Подсистема Windows Linux — заставить VIM использовать буфер обмена?

Подсистема Windows Linux — заставить VIM использовать буфер обмена?

Чтобы убрать это сейчас и избежать путаницы... Это для Linux, работающего в Windows 10 (ubunutu), также известного как WSL. Это не то же самое, что cygwin и windows или отдельный linux. Это свой собственный зверь.

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

Кто-нибудь знает, как заставить копировать и вставлять работать из буфера обмена Windows ИЛИ эмуляции WSL Ubuntu Linux? Я использую set clipboard=unnamedplus. Это не работает, независимо от того, какие комбинации я использую, например yy, "+yyи т. д.

Да, с vim-gtkподдержкой +xterm_clipboard.

решение1

(Изменение: апрель 2024 г.) С учетом последних новостей, WSL version: 2.1.5.0похоже , что Win11просто иметь set clipboard+=unnamedplusсейчас достаточно neovim, по крайней мере, с последними версиями Ubuntu из Microsoft Store.

(Изменено: октябрь 2020 г.) Для двустороннего буфера обмена neovimя используюwin32yankв течение нескольких месяцев без проблем. Поместите win32yank.exeкуда-нибудь в свой путь в Linux (подойдет любое место) и добавьте следующее в свой init.vim.

set clipboard+=unnamedplus
let g:clipboard = {
          \   'name': 'win32yank-wsl',
          \   'copy': {
          \      '+': 'win32yank.exe -i --crlf',
          \      '*': 'win32yank.exe -i --crlf',
          \    },
          \   'paste': {
          \      '+': 'win32yank.exe -o --lf',
          \      '*': 'win32yank.exe -o --lf',
          \   },
          \   'cache_enabled': 0,
          \ }

(Оригинальный ответ) Если вы просто хотите перенести данные из VIM в Windows, для WSL2 и Ubuntu 20.04,этот ответна Reddit у меня все отлично работало со стандартным VIM и стандартным WSL2 Ubuntu.

Вставьте следующее .vimrc(например, в конец):

" WSL yank support
let s:clip = '/mnt/c/Windows/System32/clip.exe'  " change this path according to your mount point
if executable(s:clip)
    augroup WSLYank
        autocmd!
        autocmd TextYankPost * if v:event.operator ==# 'y' | call system(s:clip, @0) | endif
    augroup END
endif

решение2

Это решениеу меня сработало, спасибо пользователю githubроббиев.

Для полноты картины приведу выдержку из его ответа:

  1. УстановитьVcXsrv (если запустится после установки, остановите).
  2. Запустите его с помощью недавно установленной программы.XLaunch(поиск в меню пуск).
  3. Используйте все параметры по умолчанию и убедитесь, чтопараметры буфера обменапроверяются.

  4. В конце сохраните конфигурацию в файл config.xlaunch(используйте это, чтобы начать с этого момента).

  5. Поместите export DISPLAY=localhost:0.0в .bashrcbash для Windows и запустите source ~/.bashrcв любом открытом терминале.

  6. Убедитесь, что vim установлен с поддержкой буфера обмена. vim --version | grep clipboardследует указать +clipboard, а не -clipboard. Также, если вы запускаете команду ex :echo has('clipboard')в vim, а он сообщает, 0что поддержка буфера обмена не скомпилирована.

  7. Если у вас нет поддержки буфера обмена, установите пакет vim, скомпилированный с поддержкой буфера обмена, например apt-get install vim-gtk.

  8. Теперь вы можете получить доступ к системному буферу обмена Windows с помощью "*pи "*yили установить его по умолчанию, поместив set clipboard=unnamedтуда свой .vimrcфайл.

Какроббиевупоминает, что теперь вы также сможете использовать буфер обмена Windows с удаленных компьютеров с помощью переадресации SSH X.

решение3

Вы можете щелкнуть правой кнопкой мыши по терминалу, а затем в поле параметров установить флажок CTRL + SHIFT + C/V для операций копирования и вставки через терминал.

WSL Ubuntu-терминал

решение4

Если вы используете vim (или neovim), возможно, вам следует знать, ANSI OSC52что это стандарт, который пытается решить проблему «копирования/вставки» (в особых случаях, например, в терминале SSH).

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

Связанный контент