Проброс буфера обмена vim через SSH, в системах linux ⟷ macOS

Тем кто часто работает с vim/emacs через SSH, наверное приходилось сталкиваться с проблемой недоступности буфера обмена с хоста на сервере и наоборот.

Например в vim на сервере я выхожу из режим редактирования — ESC, нажимаю v, выбирают текст, копирую — y. В "clipboard" на macOS не попадает ничего. Можно выбрать необходимый текст трэкпадом или мышкой прямо в терминале, но тогда если включена нумерация строк, будут скопированы и они.

Выход есть, пользоваться форвардингом X11, с автоматической синхронизацией буфера обмена.

Настройка macOS

XQuartz

Устанавливаем XQuartz. Запускаем /Applications/Utilities/XQuartz.app, в настройках выбираем Update Pasteboard immediately when new text is selected.

Настройки XQuartz в macOS

ssh

В ~/.ssh/config добавляем интересующий хост и строку ForwardX11:

Host scaleway
    Hostname example.fluder.co
    Port 2200
    ForwardX11 yes

Настройка linux

xorg

На сервере должен быть установлен xorg:

sudo apt-get install xorg

vim

vim должен быть собран с поддержкой clipboard. Проверяем vim --version | grep clipboard.

sudo apt-get install vim-gtk

В .vimrc добавляем:

set clipboard=unnamed

sshd

По умолчанию X11Forwarding разрешен, /etc/ssh/sshd_config:

X11Forwarding yes
X11DisplayOffset 10

Проверяем xauth

Пробуем подключиться к серверу по ssh и командуем echo $DISPLAY, если всё ок, то в ответ мы увидим "localhost:10.0".

Убираем иконку XQuartz из Dock

Теперь каждый раз, когда вы будете подключаться к ssh серверу с опцией -X или равнозначному в конфиге, ForwardX11, будет запускаться XQuartz. Я предпочитаю его не показывать в доке.

sudo plutil -insert LSUIElement -integer 1 /Applications/Utilities/XQuartz.app/Contents/Info.plist

Чтобы изменения вступили в силу перегружаем программу.


CLI
comments powered by Disqus