How to copy and paste between different tmux panes running vim instances

匿名 (未验证) 提交于 2019-12-03 00:46:02

问题:

Example: copy in one tmux pane (via vim), then switch to another pane (running another vim instance) and paste using the vim paste command. I know this can be done via tmux (using prefix+]) but it would be really handy if I can copy and paste using vim bindings since i'm just switching between different panes running vim.

Any ideas?

回答1:

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.



回答2:

I've been used this handy binding for several years :)

" copy to buffer vmap  :w! ~/.vimbuffer nmap  :.w! ~/.vimbuffer " paste from buffer map  :r ~/.vimbuffer


回答3:

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- 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.



回答4:

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.



回答5:

You can copy the content to clipboard using vim bindings, then switch to the pane and paste it. The following key-bindings might be handy.

noremap ty "+y noremap tY "+Y  // copy a whole line to the clipboard noremap tp "+p  // put the text from clipboard after the cursor  noremap tP "+P  // put the text from clipboard before the cursor  

The "+ register is used to access system's clipborad in Vim.

Some useful tips:
1. You can press v or V or ctrl-v to enter visual mode, then select the content you want to yank, and press ty to copy it to your clipboard.
2. ty can be combined with other motions. For instance, tyaw can be used to copy a word under the cursor to the clipboard. tyib copy the content inside parentheses. tyi" copy the text inside double quotation, etc...

See also How to make vim paste from (and copy to) system's clipboard? for further explanation.



回答6:

solution on Fedora24

you need to use vimx instead of vim

put in your .bashrc or .zshrc

alias vi='vimx' alias vim='vimx' 

and then you can easily copy between vims/tmux panels


$ vim --version | grep clipboard -clipboard       +insert_expand   +path_extra      -toolbar +eval            +mouse_dec       +statusline      -xterm_clipboard  $ vimx --version | grep clipboard +clipboard       +insert_expand   +path_extra      +toolbar +eval            +mouse_dec       +statusline      +xterm_clipboard 

vimx is part of vim-enhanced-2:7.4.1868-1.fc24.x86_64 you most likely have installed



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!