在 tmux 中从 vim 复制到 python 控制台

Copy from vim to python console in tmux

我已经安装了 tmux。

tmux -V
tmux 2.3

设置我的配置文件。

cat  ~/.tmux.conf
set -g mouse on

进入tmux,在里面打开两个垂直的windows,左边打开python3控制台,右边打开vim

现在用鼠标将光标移到右边第一行的开头。
进入普通模式,输入2yy+,在我的+寄存器中复制两行。
将光标向左移动python3 console window ,如何将+ 中的内容粘贴到python 控制台中? @Kent,照你说的做:
1.Move 光标在第一行的开头,然后输入 "+2Y
2.Move 光标向左window,然后鼠标中键,没有任何反应。 3.press ctrl+b 然后按 ] 键。

2yy+ NOT 将两行复制到 + reg 中,而是将两行拉到 " reg 中,然后移动光标到下一行的第一个非空白字符

您可以在 vim 端执行:"*2Y 然后在 python 控制台上单击鼠标中键。

  • 或者简单地 select 您想要通过鼠标复制到 vim 中的行,然后在 python 控制台中单击鼠标中键

首先你的 vim 应该用 +clipboard 编译见 vim --version | grep 'clipboard'

要在任何 vim 寄存器中复制(或删除),您可以使用以下语法

  • "<register name><oprator><motion>(参见 :h registers)例如
    1. "ayy(在寄存器 a 中复制当前行)或
    2. "bdd(删除寄存器b中的当前行)或
    3. "*ce(删除到当前工作的末尾并将内容放入寄存器 * 使用 c 也会使您进入插入模式
  • 复制整行你可以使用yy
  • 并且系统剪贴板映射到 +*(取决于 os)

所以要将整行复制到系统剪贴板中,您可以使用

  • "*yy"+yy(取决于 os)

或复制2行

  • "*2yy"+2yy(复制当前行和当前行之后的行)

将内容复制到系统剪贴板后,您可以使用(command + vctrl + shift + v

粘贴到 tmux 中

或使用 tmux 粘贴缓冲区映射系统剪贴板请参阅 https://unix.stackexchange.com/questions/67673/copy-paste-text-selections-between-tmux-and-the-clipboard#72340

我不太喜欢接受的解决方案,它依赖于剪贴板的图形环境,因为当 vim 无法访问剪贴板时这不起作用,这几乎总是 ssh 连接。 所以我想到了另一个解决方案:

不使用外部剪贴板 vim 可以通过管道将文本直接传递到 tmux' 粘贴缓冲区

tmux load-buffer -

之后,您可以将 prefix + ] 缓冲区的内容粘贴到活动的 tmux 窗格中。

有多种方法可以将文本从 vim 传递到 tmux:

# to write the current line into the tmux buffer:
:.w !tmux load-buffer -

# to write all *lines* within the visual selection into the tmux buffer:
:'<,'>w !tmux load-buffer -

# to pipe the content of a register (e.g. from a previous selection) into the buffer:
# @" being the unnamed register, @0 - @9 the numbered registers, and so on
:call system('tmux load-buffer -', @")

使用 tmux paste-buffer 您甚至可以同时触发粘贴到正确的窗格中:

# assuming the python pane is at :0.0
:call system('tmux load-buffer -; tmux paste-buffer -t :0.0', @")

您现在还可以轻松地将最后一行映射到一个键,以将视觉选择的文本发送到 python 窗格。