✂️ Enable Clipboard Copy/Paste in a DevContainer (Neovim + OSC52 + tmux)
Clipboard support inside a DevContainer is not available by default, because the container cannot directly access the host clipboard.
This guide enables seamless yank/copy/paste in Neovim, tmux, and VS Code DevContainers using:
-
xclip / wl-clipboard (fallback tools)
-
Neovim’s built-in OSC52 clipboard provider
-
tmux OSC52 forwarding
Dockerfile
#Dockerfile
FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04
COPY --from=jdxcode/mise /usr/local/bin/mise /usr/local/bin/
# Install clipboard utilities
RUN apt-get update && apt-get install -y xclip wl-clipboard && rm -rf /var/lib/apt/lists/*
# make sure mise is activated in both zsh and bash
RUN echo 'eval "$(mise activate bash)"' >> /home/vscode/.bashrc && \
echo 'eval "$(mise activate zsh)"' >> /home/vscode/.zshrc
OSC52 Clipboard Support in Neovim
#options.lua
vim.g.snacks_animate = false
vim.g.lazyvim_check_order = false
vim.opt.ignorecase = true
vim.opt.number = false
vim.opt.relativenumber = false
vim.opt.scrolloff = 8
-- Explicitly use OSC 52 for clipboard (best for remote/container environments)
vim.g.clipboard = {
name = "OSC 52",
copy = {
["+"] = require("vim.ui.clipboard.osc52").copy("+"),
["*"] = require("vim.ui.clipboard.osc52").copy("*"),
},
paste = {
["+"] = require("vim.ui.clipboard.osc52").paste("+"),
["*"] = require("vim.ui.clipboard.osc52").paste("*"),
},
}
-- Use system clipboard for all yank/paste operations
vim.opt.clipboard = "unnamedplus"
Tmux
Add to ~/.tmux.conf
set -s set-clipboard on
set -ag terminal-overrides "vte*:XT:Ms=\\E]52;c;%p2%s\\7,xterm*:XT:Ms=\\E]52;c;%p2%s\\7"
Test
Inside the devcontainer (in tmux), run and then paste on your host.
printf "\033]52;c;$(printf "test from tmux" | base64)\a"
In Neovim inside the container, run and then paste on your host.
:echo "testing clipboard" | normal "+yy
🎉 You now have fully working clipboard support inside your DevContainer + Neovim environment.