71

示例:复制到一个 tmux 窗格(通过 vim),然后切换到另一个窗格(运行另一个 vim 实例)并使用 vim paste 命令粘贴。我知道这可以通过 tmux(使用前缀+])来完成,但是如果我可以使用 vim 绑定复制和粘贴,那将非常方便,因为我只是在运行 vim 的不同窗格之间切换。

有任何想法吗?

4

8 回答 8

49

抱歉,我试图说服你使用 vim 的内置功能。


copy/paste方便起见,您可以在另一个标签页中打开文件:

:tabe /path/to/another/file

使用gtgT切换标签页。


或拆分窗口以编辑另一个文件:

:sp /path/to/another/file

用于Ctrl-ww切换 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

我只在需要复制终端输出时使用它们。

于 2012-06-14T23:56:34.877 回答
22

我已经使用这种方便的绑定好几年了:)

" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>
于 2012-06-15T14:35:37.570 回答
14

我目前在工作中被一台运行 Windows 的笔记本电脑困住了,但我在运行 Linux 的服务器上进行了所有开发,所以我最终整天都在 PuTTY 上的 tmux 会话中工作。

我想在我的 tmux 会话中在不同窗口中运行的 vim 实例之间复制文本。我尝试使用*寄存器复制到系统剪贴板,但由于我是通过 PuTTY 连接的,所以我没有 X 会话,所以即使我启动 gVim 而不是 vim,也没有系统剪贴板(我可能已经能够使用 x-forwarding 或其他东西来解决这个问题,但我不想在 Windows 上安装 x-server。)

我认为应该有一种方法可以使用 vim 中的 tmux 复制/粘贴缓冲区来代替系统键盘,果然有人为此编写了一个插件

安装 fakeclip 会添加一个新的寄存器,&映射到 tmux 的粘贴缓冲区。由于我所有的 vim 实例都在同一个 tmux 会话中,这使得在它们之间拉取/放置文本变得非常简单。

插件文档说 fakeclip 也应该与 gnu screen 一起使用,但我没有亲自测试过。


tl;博士

安装fakeclip插件,然后你可以使用yank"&y到tmux 的缓冲区,并从 tmux 的缓冲区中放入。"&p

于 2014-03-24T18:18:31.210 回答
13

虽然我同意最好只使用一个 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 的粘贴缓冲区复制到系统剪贴板。

于 2012-06-27T19:29:18.337 回答
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 中系统的剪贴板。

一些有用的提示:
1. 您可以按v或进入可视模式Vctrl-v然后选择要拉出的内容,然后按ty将其复制到剪贴板。
2.ty可以与其他动作相结合。例如,tyaw可用于将光标下的单词复制到剪贴板。tyib复制括号内的内容。tyi"复制双引号内的文本等...

另请参阅如何从(并复制到)系统的剪贴板进行 vim 粘贴?进一步解释。

于 2015-05-27T17:49:53.273 回答
3

这适用于neovim。

执行:checkhealth,你会发现类似这样的东西:

## Clipboard (optional)
  - OK: Clipboard tool found: tmux

如果没有,也许您需要将 tmux 升级到最新版本 2.9。

然后在 '~/config/nvim/init.vim' 中添加如下代码

set clipboard+=unnamedplus
于 2019-03-03T15:29:33.910 回答
2

Fedora24 上的解决方案

你需要使用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 的一部分

于 2016-10-17T21:39:01.717 回答
0

控制+插入=复制

移位+插入=粘贴

于 2020-09-05T02:42:49.353 回答