OSC52 + Neovim

OSC52

Набор команд Operating System Commands позволяет вызывать некие функции терминала из консоли, печатая специально сформированные строки.
Среди них есть OSC52, которая позволяет напрямую вставлять текст в буфер обмена, без других утилит и проброса X-сервера.
OSC52 должен быть поддержан конечным терминалом, например Windows Terminal его поддерживает.

Проверка

На удалённом сервере выполните:

printf '\e]52;;%s\a' "$(printf 'hello' | base64 -w0)"

Если в буфере обмена Windows появилось слово hello, значит OSC52 работает.

Neovim

Включите в конфиге:

-- ~/.config/nvim/lua/plugins/osc52.lua
return {
  {
    "ojroques/nvim-osc52",
    lazy = false,         -- load at startup to avoid require() races
    priority = 1000,      -- ensure it loads early
    config = function()
      local ok, osc52 = pcall(require, "osc52")
      if not ok then
        vim.notify("nvim-osc52 not found", vim.log.levels.ERROR)
        return
      end
      osc52.setup { trim = false }

      local function copy(lines, _)
        osc52.copy(table.concat(lines, "\n"))
      end
      local function paste()
        return { vim.split(vim.fn.getreg(""), "\n"), vim.fn.getregtype("") }
      end
      vim.g.clipboard = {
        name = "osc52",
        copy = { ["+"] = copy, ["*"] = copy },
        paste = { ["+"] = paste, ["*"] = paste },
      }
      vim.opt.clipboard = "unnamedplus"

      vim.api.nvim_create_autocmd("TextYankPost", {
        callback = function()
          if vim.v.event.operator == "y" then
            require("osc52").copy_register(vim.v.event.regname == "" and "" or vim.v.event.regname)
          end
        end,
      })
    end,
  },
}


Tmux

Включите в конфиге:

# ~/.tmux.conf
set -g set-clipboard on`