示例:在一个tmux窗格中复制(通过vim),然后切换到另一个窗格(运行另一个vim实例)并使用vim paste命令粘贴。我知道这可以通过tmux(使用前缀+)完成,但如果我可以使用vim绑定进行复制和粘贴,那将非常方便,因为我只是在运行vim的不同窗格之间切换。
有什么想法吗?
答案 0 :(得分:47)
抱歉,我试图说服你使用vim内置功能。</ p>
要简化copy/paste
,您可以在另一个标签页中打开文件:
:tabe /path/to/another/file
使用 gt 或 gT 切换Tabpages。
或拆分窗口以编辑另一个文件:
:sp /path/to/another/file
使用 Ctrl-w w 切换Windows。
要垂直拆分窗口,请使用:vsp file
这是我的.tmux.conf
文件:
# 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
我只在需要复制终端输出时使用它们。
答案 1 :(得分:20)
我已经使用了这个方便的绑定几年了:)
" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
答案 2 :(得分:12)
虽然我同意只使用一个vim实例更好,但你可以单独使用tmux。它有内置的复制模式。我的tmux.conf设置如下:
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
因此,您可以使用prefix-<C-y>
来激活复制模式,/search term
作为示例移动到您想要的位置,v
可视地选择,y
可以移动到tmux。然后转到其他vim会话并进入插入模式。使用prefix-p
粘贴tmux粘贴缓冲区中的内容。还有一些方法可以将tmux的粘贴缓冲区复制到系统剪贴板。
答案 3 :(得分:12)
我目前在工作时遇到了运行Windows的笔记本电脑,但是我在运行Linux的服务器上进行了所有开发,所以我最终在PuTTY上的tmux会话中工作了一整天。
我想在tmux会话中的不同窗口中运行的vim实例之间复制文本。我尝试使用*
寄存器复制到系统剪贴板,但由于我通过PuTTY连接,我没有X会话,因此 没有系统剪贴板,即使我启动gVim而不是vim。 (我可能已经能够使用x-forwarding或其他东西来解决这个问题,但我不想在Windows上安装x-server。)
我认为应该有一种方法可以使用vim中的tmux复制/粘贴缓冲区代替系统键盘,确实有人写了a plugin for that。
安装fakeclip会添加一个新的寄存器&
,该寄存器映射到tmux的粘贴缓冲区。由于我的所有vim实例都在同一个tmux会话中,这使得在它们之间拉/放文本变得非常简单。
插件文档说假冒伪劣也应该与gnu屏幕一起使用,但我没有亲自测试过。
<强> TL;博士强>
安装fakeclip插件,然后您可以使用“ &amp; y yank 进入tmux的缓冲区,“ &amp; p 从把从tmux的缓冲区中删除。
答案 4 :(得分:3)
您可以使用vim绑定将内容复制到剪贴板,然后切换到窗格并粘贴它。 以下键绑定可能很方便。
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
"+
寄存器用于访问Vim中的系统clipborad。
一些有用的提示:
1.您可以按v
或V
或ctrl-v
进入可视模式,然后选择要抽取的内容,并按ty
将其复制到剪贴板。
2. ty
可以与其他动作结合使用。例如,tyaw
可用于将光标下的单词复制到剪贴板。 tyib
复制括号内的内容。 tyi"
将文本复制到双引号内等...
另请参阅How to make vim paste from (and copy to) system's clipboard?以获取进一步说明。
答案 5 :(得分:2)
解决方案
您需要使用 vimx 而不是 vim
放入你的.bashrc或.zshrc
alias vi='vimx'
alias vim='vimx'
然后您可以轻松地在vims / tmux面板之间进行复制
$ 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是你最有可能安装的vim-enhanced-2:7.4.1868-1.fc24.x86_64的一部分
答案 6 :(得分:1)
这在neovim中有效。
执行:checkhealth
,您会发现以下内容:
## Clipboard (optional)
- OK: Clipboard tool found: tmux
如果没有,也许您需要将tmux升级到最新版本2.9。
然后在“〜/ config / nvim / init.vim”中添加以下代码
set clipboard+=unnamedplus
答案 7 :(得分:0)
control + insert =复制
shift +插入 =粘贴