Have been enjoying tmux + vim these days, except one problem I cannot resolve every time.
It's a clipboard failure easy to reproduce. Vim's "+y "+p, copy to or paste from clipboard, work well if I create a new tmux session and keep using it either on Linux machine or via ssh (I use MobaXterm which supports X11 forwarding) from Windows. But copy and paste will surely stop working after I switch from one side to the other.
I tried to search but cannot find an answer but maybe I used wrong keywords. Any tip would be appreciated.
This is most likely related to your DISPLAY
environment variable.
When you run tmux locally on your Linux machine, it's going to set DISPLAY
to the default, most likely :0
. This tells X11 programs to use your local X server. The Vim clipboard integration uses that X server for clipboard storage with the +
register (in your config, based on your question; it could also use the *
register, based on what Vim's clipboard
option is set to).
When you SSH in with X11 forwarding, DISPLAY
will be set to a virtual server, representing the forwarded connection--most likely :10.0
or localhost:10.0
.
When you start tmux, it will use whatever DISPLAY
is set to when it's initially started. If you detach and later reattach from the other machine, tmux won't automatically change DISPLAY
. So if you initially start your tmux session from Linux, and then later SSH in from Windows and reattach the session, tmux (and the Vim running inside it) will still be using the Linux display.
One option is to quit Vim, do export DISPLAY=:0
(or DISPLAY=:10.0
as appropriate), and restart Vim. Note that you'll have to do this in each shell you have open, and if you open a new window/pane, it will still inherit the parent tmux session's DISPLAY
setting.
Another option is to change the environment variable inside Vim, so that you don't have to restart Vim. You can do this via :let $DISPLAY="whatever"
.
There may be a way to change the tmux session's DISPLAY
value at runtime, but I don't know how to do that. If you could figure a way out, you could probably automate it via a wrapper around tmux attach
. This answer to a tmux question might help, but I just do one of the above.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With