Как скопировать / вставить из Vim в WSL

Я пытаюсь использовать Vim, чтобы найти и скопировать / вставить код, который мне нужно проанализировать и сделать заметки. Я использую Debian в среде Windows WSL. Вот что делает это сложным.

Обычные команды «скопировать и поместить в глобальный регистр» "+y и "*y не работали.

С другой стороны, метод грубой силы, при котором я просто использую мышь для очистки текста терминала, тоже не работает. Как ни странно, терминал WSL поддерживает мышь, и Vim может отслеживать его движения, выбирать в визуальном режиме и т. Д. Таким образом, Vim перехватывает команду выбора, и тогда ничего не выбирается для ctrl-shift-c для копирования в буфер обмена Windows.

Я знаю, что терминал WSL поддерживает копирование и вставку, и я смогу это сделать, если cat выложу свой файл на экран, а затем скопирую и вставлю его с помощью ctrl-shift-c и ctrl-v. Но тогда я теряю простоту навигации.

Как лучше всего скопировать текст из Vim внутри терминала WSL в буфер обмена Windows?


person nomen    schedule 01.05.2020    source источник
comment
Если вы не хотите, чтобы vim управлял вашей мышью, чтобы вы по-прежнему могли выделять и копировать, как и все остальное с терминала, вы должны иметь возможность :set mouse=   -  person Christian Gibbons    schedule 02.05.2020
comment
Можете ли вы использовать clip.exe для доступа к буферу обмена из WSL? Если это так, выберите линии визуально, по которым они работают :w !clip.exe. (Источник предложения clip.exe: raymondcamden.com/2017/10/19/)   -  person filbranden    schedule 02.05.2020
comment
Я использую Neovim и следовал инструкциям в их часто задаваемых вопросах по адресу github.com/neovim/neovim/wiki/. В противном случае я думаю, что как «скопировать в буфер обмена »в vim Bash для Windows? может вам помочь. Есть несколько решений, для которых не требуется установка X-сервера в Windows.   -  person Andrey Kaipov    schedule 18.05.2020


Ответы (3)


Как уже упоминалось, буфер обмена находится на уровне X. Итак, наиболее важным шагом является то, что вам необходимо запустить X-сервер на Windows, и вам нужно установить переменную DISPLAY в Linux, чтобы она указывала на X-сервер. Затем в neovim set clipboard=unnamedplus или vim set clipboard=unnamed сделать ссылку на системный буфер обмена.

Следуйте этой замечательной сути, чтобы все заработало.

Для меня я использую рыбий панцирь, конкретная логика wsl становится в вашем config.fish.

if uname -r | grep 'microsoft' > /dev/null 
  set -l LOCAL_IP (cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
  set -xg DISPLAY $LOCAL_IP:0
end

person LeOn - Han Li    schedule 24.05.2020

Ответ: сделайте визуальное выделение vim, затем выполните команду:

:'<,'>w !clip.exe

Это направляет текущий выбор в команду оболочки clip.exe, которая использует способность WSL выполнять исполняемые файлы Windows (даже с конвейером). Текст, переданный на clip.exe, попадает в буфер обмена Windows.

Также эта команда сохраняет весь файл в буфер обмена (не обязательно):

 :w !clip.exe
person fencemaker    schedule 09.07.2021
comment
Вау, я редко вижу, как новый пользователь дает правильный и полезный ответ на старый вопрос! Поздравляем и добро пожаловать в Stack Overflow! Одно небольшое предложение - опишите подробнее, почему это работает, чтобы люди лучше понимали механику и могли приспособить ее для других целей. Я собираюсь внести в него небольшое изменение, чтобы добавить эту информацию. - person NotTheDr01ds; 09.07.2021

В Linux поддержка буфера обмена Vim тесно связана с X. Если вам нужен такой же уровень интеграции между WSL и остальной частью Windows, как вы привыкли в соответствующем Linux Box, вам придется установить Windows X Server.

  1. На стороне Linux установите сборку Vim с включенным буфером обмена. Пакет vim-gtk в порядке.

  2. На стороне Windows установите X-сервер, например VcXsrv (их много альтернативы, вы сами можете найти ту, которая лучше всего соответствует вашим потребностям).

  3. Обычно вам нужно отредактировать пару файлов конфигурации на стороне Linux, чтобы ваши X-клиенты использовали правильный X-сервер. Что именно делать, будет зависеть от выбранного вами X-сервера.

  4. В Vim на стороне Linux используйте "+ или "*, как если бы вы использовали настоящий Linux-сервер.

person romainl    schedule 02.05.2020
comment
Я сделал это, и теперь, когда я запускаю vim somefile, запускается vim очень долго. - person mbomb007; 24.11.2020
comment
@ mbomb007, FWIW, я написал этот ответ через несколько недель после начала концерта для $ BIG_PHARMA, где мне пришлось поработать над одним из их избитых Lenovos и выяснить точную настройку. Заметьте, вся машина была слизняком, но я не заметил особого замедления запуска. Длительное время запуска может быть связано с неспособностью / трудностью подключения Vim к X-серверу. Посмотрите, правильно ли вы выполнили всю конфигурацию. - person romainl; 24.11.2020