可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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 <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
回答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-<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.
回答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