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`