vim 如何从运行在putty中的tmux复制到windows剪贴板

vsaztqbk  于 2023-08-05  发布在  Windows
关注(0)|答案(5)|浏览(163)

ENV:我正在一台Windows7笔记本电脑上用putty运行tmux。我在工作时使用ssh到linux系统。
我必须解决两个小故障与tmux,在使用它为我所有的需要。
1.我必须从vim或tmux终端复制一些文本到windows记事本。我已经为vim和putty启用了鼠标支持。
我试过"*y"+y,但它们都不工作。如果我使用putty的复制能力,那么它也会复制相邻网格的内容。
1.我必须将一个窗格中的vim文件中的一些内容复制到另一个窗格中打开的vim文件中。有没有vim的技巧。我不想用<C-b>[的方式来做。
问题1更困扰我,因为问题2有一个w/a。

pu82cl6c

pu82cl6c1#

我使用putty v0.62和tmux v1.8。
tmux配置:setw -g模式-鼠标打开
我想从tmux复制一些文本到系统剪贴板,我按住Shift键,用鼠标选中文本,然后单击鼠标左键。
我想粘贴一些文本到tmux,按Shift键,然后单击鼠标右键。

0s0u357o

0s0u357o2#

这是绝对可能的。下面的所有配置行都是从不同tmux窗格中的机器复制回我的Windows机器的。是的,我把tmux和ssh放到一台机器上,可以把我的vim yanks移动到任何机器上,包括我的Windows浏览器。
我确实在Windows上运行了一个X服务器(不需要在Windows上,但你需要一个)。
主要成分:

  • putty 0.62(在Windows上)
  • tmux 1.8(在一台Linux机器上)
  • xclip(在Linux机器上)
  • MobaXterm(在Windows上用于其x服务器)

您的网络设置可能会有所不同,特别是在X服务器显示配置上,但它是这样的:

tmux

# allow mouse to select panes
setw -g mode-mouse on
set-option -g mouse-select-pane on

# allow yank into system clipboard
#bind C-y run "tmux save-buffer - | xclip -i"
bind C-y run-shell -b "tmux show-buffer | xclip -selection clipboard -i"
# move x clipboard into tmux paste buffer
bind C-p run-shell -b "xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer"

字符串

vim

" get some  autoselect interaction with the system clipboard
set guioptions=aA

MobaXterm

我让它一直运行,但不需要在xterm shell中运行tmux。确保在X11设置中选择了共享剪贴板。我想xming应该可以工作,但是我其他需要的设置似乎从来没有解决过。MobaXterm还有其他我喜欢的东西(文件浏览器等)。
我想我可以在MobaXterm中使用tmux运行ssh会话,但我更喜欢putty窗口,在那里我有我的solarized color palette

油灰

ssh到机器上。此时,我设置了DISPLAY环境变量,并将其放入bash提供的env文件中。这样,每个后续创建的窗口都将设置它。在我从tmux机器跳到的其他机器上设置它完全是一个单独的练习。
在将要共享剪贴板的任何机器中,确保设置了正确的$DISPLAY。您应该能够运行xeyes并在本地计算机上看到它。
每个人都将共享剪贴板。vim将复制到剪贴板当你拉。要粘贴到另一个tmux窗格中,请使用绑定键ctrl-p(我使用ctrl-a ctrl-p)。
如果它不起作用,你可以尝试xclip -o -selection clipboard,看看应该粘贴什么。你也将能够移动任何“tmux选择”文本(鼠标或bind-key [)到剪贴板(并因此到一个常规的windows窗口)与bind-key ctrl-y(即. tmux yank)。

lg40wkob

lg40wkob3#

PuTTY只是一个终端模拟器; Vim寄存器*+与X选择和剪贴板有关;没有重叠
PuTTY只允许您将选定的终端内容复制到Windows剪贴板;当你运行 tmux 时,这将不可避免地包括窗口布局。
您需要从PuTTY切换到允许真实的集成的东西,例如 *Cygwin XWin服务器 *,它是一个真正的X服务器,将X剪贴板与Windows剪贴板集成在一起。您可以将ssh -X插入服务器,而不是在PuTTY会话中,然后在Linux终端中启动Vim,或者直接启动GVIM。然后,通过"+y猛拉将如您所料。
或者,如果你想继续使用PuTTY,你必须使用一些变通方法,比如:write将选择内容保存到本地文件,然后通过scp将其传输到Windows。

unhi4e5o

unhi4e5o4#

使用一些技巧,可以通过PuTTY将tmux缓冲区返回到客户机。我使用ANSI转义码为“AUX”端口(串行打印机)完成了这一点。
下面是该转移方法的一个实现:
1)在服务器端tmux.conf中,添加:

# Send the tmux copy buffer to a file.  The file is read for ANSI printing by "t" alias in .bashrc
bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'

字符串
2)在服务器端.bashrc中,添加:

t() {
  # Configure a PuTTY profile to send "t" as the "Remote command".  This
  # function will automatically reattach to an existing tmux session if one
  # exists, or start a new one.  This function also repeatedly sends our
  # homemade tmux clipboard back to the PuTTY client in the form of an ANSI
  # printer escape sequence.  The contents of the homemade clipboard are
  # populated by `bind -t vi-copy y copy-pipe 'cat > ~/.tmux-buffer'` in
  # tmux.conf.  It is expected that the PuTTY client will be configured to
  # print to a "Microsoft XPS Document Writer" which saves the printer output
  # to a file.  The file is subsequently read by an AutoHotkey macro, and the
  # contents are made available for paste.
  [[ "$TERM" == "xterm" ]] || return 0 # This prevents recursive runs, in case t() is called after tmux is started.
  { while :; do tput mc5; cat ~/.tmux-buffer; tput mc4; sleep 5; done } &
  tmux attach || tmux
}


3)在客户端(Microsoft Windows)上,创建新打印机:

  • 添加打印机
  • 创建新端口>本地端口
  • 输入端口名称>“PuTTY_Printer_File
  • 驱动程序> Microsoft XPS Document Writer
  • 打印机名称>“PuTTY Printer
  • 可选:打印测试页并确保它显示在文件@“%USERPROFILE%\Documents\PuTTY_Printer_File“的内容中

4)在客户端PuTTY配置中:

  • 将终端>“打印机将ANSI打印机输出发送到:”设置为新创建的名为“PuTTY Printer”的打印机
  • 将Connection > SSH >“Remote command:“设置为“t“(参考上面的.bashrc函数)

此时,您可以通过在tmux的复制模式下突出显示一些文本并按y,将tmux缓冲区的内容发送到PuTTY客户端。所选文本将在客户端上以%USERPROFILE%\Documents\PuTTY_Printer_File结尾。如果您想更进一步,模拟从这个文件中“粘贴”出来,您可以使用热键序列来读取文件的内容并将其插入。下面是一个利用AutoHotKey的示例,但如果您愿意,也可以在PowerShell中实现相同的结果。
5)客户端AutoHotKey宏:

;### Get contents of PuTTY ANSI printer device output and paste it
#v:: ;Winkey + v
FileRead, PuTTYPrinter, %USERPROFILE%\Documents\PuTTY_Printer_File
SendInput %PuTTYPrinter%
PuTTYPrinter = ; Free up memory
return


6)完整使用程序:

  • 使用PuTTY连接到服务器,并通过t()函数进入tmux。
  • 当准备好选择要复制的文本时,使用复制模式的tmux热键(Ctrl + b[
  • 用箭头键移动光标
  • 选择spacebar开始
  • 结束选择并使用y复制
  • 返回到运行PuTTY的客户端,WindowsKey + v将粘贴选择

因为图片胜过1,000字,下面是正在发生的事情的概述:https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAfiAAAAJDYzM2RmMzYzLTk1NmQtNGQxMi1iN2YyLTQ4NGUxNjExMmVlOA.png

mefy6pfw

mefy6pfw5#

假设鼠标模式已经打开,将其添加到tmux配置中,选择将复制到剪贴板。

bind -Tcopy-mode MouseDragEnd1Pane send -X copy-selection-and-cancel\; run-shell -b "tmux show-buffer | clip"

字符串
在v2.6上测试

相关问题