How to copy and paste between different tmux panes running vim instances
Sorry, I'm trying to convince you to use vim built-in features.
To make the copy/paste
easy, you can open files in another Tabpages:
:tabe /path/to/another/file
Use gt or gT to switch Tabpages.
Or split the window to edit another file:
:sp /path/to/another/file
Use Ctrl-ww to switch Windows.
To split the window vertically, please use :vsp file
Update:
This is my .tmux.conf
file:
# vim
setw -g mode-keys vi
bind [ copy-mode
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
bind -t vi-copy V rectangle-toggle
bind ] paste-buffer
# buffer
bind Space choose-buffer
I only use them when I need to copy terminal output.
I've been used this handy binding for several years :)
" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
I'm currently stuck with a laptop running Windows at work, but I do all my development on a server running Linux, so I end up working in a tmux session over PuTTY all day.
I wanted to copy text between vim instances running in different windows in my tmux session. I tried using the *
register to copy to the system clipboard, but since I'm connected through PuTTY I don't have an X session, so there is no system clipboard, even if I launch gVim instead of vim. (I might have been able to use x-forwarding or something to fix this, but I didn't want to install an x-server on windows.)
I thought that there should be a way to use the tmux copy/paste buffer from vim in place of the system keyboard, and sure enough someone has written a plugin for that.
Installing fakeclip adds a new register, &
, which maps to tmux's paste buffer. Since all my vim instances are within the same tmux session, this makes it super simple to yank/put text between them.
The plugin documentation says that fakeclip should also work with gnu screen, but I haven't personally tested that.
tl;dr
Install the fakeclip plugin, and then you can use "&y to yank into tmux's buffer, and "&p to put from tmux's buffer.
Although I agree that it's better to just use one vim instance, you can do this with tmux alone. It has a built in copy-mode. My tmux.conf is set up like:
setw -g mode-keys vi
unbind [
unbind p
bind C-y copy-mode
bind p paste-buffer
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
bind -t vi-copy Escape cancel
So you can use prefix-<C-y>
to activate copy mode, /search term
as an example to go where you want, v
to visually select, y
to yank into tmux. Then go to other vim session and get into insert mode. Use prefix-p
to paste what's in the tmux paste buffer. There are also ways to copy tmux's paste buffer to your system clipboard.