Если поставить WSL, то штатно работает буфер обмена винь-линь. Но не при запуске claude из консоли, например.
Claude Code перехватывает мышь, поэтому выделение идёт через его собственный механизм. Он пишет в Linux-буфер (xclip/wl-copy через WSLg) или через OSC 52, а до Windows это часто не доходит. Решения, от простого к надёжному:
а) Выделять с зажатым Shift. В Windows Terminal Shift+drag отключает захват мыши приложением, и выделение делает сам терминал. Дальше Ctrl+Shift+C или Enter, и текст попадает в буфер Windows. Вставлять лучше через Ctrl+Shift+V или правый клик: обычный Ctrl+V Claude Code может перехватывать для вставки картинок.
б) Если WSLg-буфер «застрял», иногда помогает wsl --shutdown из PowerShell, потому что синхронизация буфера у WSLg периодически ломается.
в) Подменить xclip/wl-copy, чтобы любые копирования из Linux шли в Windows. Лучше всего через win32yank.exe. Он корректно работает с UTF-8, а clip.exe ломает кириллицу.
# win32yank.exe положить, например, в /usr/local/bin и сделать chmod +x
mkdir -p ~/.local/bin
cat > ~/.local/bin/xclip <<'EOF'
#!/bin/bash
# минимальная обёртка: -o = вставка, иначе копирование
if [[ " $* " == *" -o "* ]]; then win32yank.exe -o --lf; else win32yank.exe -i --crlf; fi EOF
cat > ~/.local/bin/wl-copy <<'EOF'
#!/bin/bash
win32yank.exe -i --crlf
EOF
cat > ~/.local/bin/wl-paste <<'EOF'
#!/bin/bash
win32yank.exe -o --lf
EOF
chmod +x ~/.local/bin/{xclip,wl-copy,wl-paste}
# ~/.local/bin должен быть в PATH раньше /usr/bin
Проверка: echo тест | wl-copy, затем Ctrl+V в Блокноте. После этого /copy в Claude Code (копирование последнего ответа) и копирование выделением тоже должны уходить в Windows.
Далее будет ошибка "cannot execute binary file: Exec format error":
"systemd включён (systemd=true), а записи WSLInterop нет. При старте systemd-binfmt её затирает."
Чиним так:
# 1. Зарегистрировать сейчас
sudo sh -c 'echo :WSLInterop:M::MZ::/init:PF > /proc/sys/fs/binfmt_misc/register'
# 2. Проверить
powershell.exe -NoProfile -Command 'echo ok'
# 3. Закрепить, чтобы systemd восстанавливал запись при каждом старте
echo ':WSLInterop:M::MZ::/init:PF' | sudo tee /usr/lib/binfmt.d/WSLInterop.conf
Для надёжности стоит явно включить interop в /etc/wsl.conf, добавив в конец файла:
[interop]
enabled=true
appendWindowsPath=true
После этого в PowerShell на Windows выполните wsl --shutdown, откройте WSL и проверьте, что после перезапуска всё работает. Так же, это даст возможность показывать win-приглашения, например для ввода пароля через sudo -A ls (это настроим дальше)
Но это половина дела. Теперь нужно настроить копирование через win32yank.exe:
cd /tmp
curl -LO https://github.com/equalsraf/win32yank/releases/download/v0.1.1/win32yank-x64.zip
unzip -o win32yank-x64.zip win32yank.exe
chmod +x win32yank.exe
sudo mv win32yank.exe /usr/local/bin/
Проверьте работу (interop к этому моменту должен быть уже починен):
echo "тест кириллицы" | win32yank.exe -i --crlf # затем Ctrl+V в Блокноте
win32yank.exe -o --lf # скопируйте что-нибудь в Windows и выполните
Комментариев нет:
Отправить комментарий