我通过ssh访问服务器,在其中运行vim编辑文件。当我尝试使用y或"+y将文本从vim复制到我的Mac(Lion)本地编辑器时,它无法正常工作。我最后得到的是我上次在本地复制的文本。但如果我在vim中使用p,则可以正常工作。
我经常在使用鼠标复制vim文本时使用一个技巧——如果行数稍微超出屏幕,可以通过最小化(Cmd + '-')文本来解决问题。 :) 最小化到无法用肉眼看到,但仍然可以一次性复制所有文本。
或者,从终端中输入less [文件名]
将其写入终端。然后通过在按住向下箭头
键的同时使用鼠标进行选择。然后您可以选择整个内容。
将内容复制到本地机器的最简单方法是通过鼠标选择,然后使用CMD + c
进行复制。正如在另一个答案中所指出的那样,这有一些限制/缺点。因此,我寻找了替代方案,但在尝试了几个小时(不成功)来使X11转发工作之后,我想到了以下简单的解决方法(至少对于行号问题)以帮助鼠标复制。
将以下内容添加到您的.vimrc
中,以便轻松切换行号以进行鼠标复制:
nnoremap L :set invnumber <CR>
L
更改为任何你想作为快捷键的按键。只需使用MobaXterm。
我尝试了很多方法,但没有一种是简单的。所以我找到的唯一解决方案就是使用MobaXterm。您可以查看所有文件并以任何方式打开它们。
我本来想改进我的解决方案,但是现在我会分享它,因为它似乎与其他一些解决方案相当。
在Mac上使用iTerm2,通过ssh连接到机器,运行tmux,然后使用Vim进行编辑时,我在Mac上有一个垂直分割的iTerm2窗口,将其拉到最小化。
然后,当我想从Vim中复制文本时,我会点击这个小小的iTerm2窗口,然后回到Vim中突出显示并复制文本。这对于单行文本效果最佳。
如果有一个tmux垂直分割,突出显示Vim缓冲区中的多行文本将无法正确换行,并且将复制来自其他tmux窗口的文本,但除此之外,这对于复制我需要的90%非常好,而无需退出Vim,cat文件或执行其他操作。
我还有充足的水平窗口空间,使得小的iTerm2窗口不会占用太多空间。
brew install --cask xquartz
检查XQuartz中是否启用了剪贴板同步 -> 首选项窗口 -> 剪贴板选项卡
有两种选项:
ssh
连接:ssh -X user@remotehost.com
-- 或者 --
ssh
连接的默认设置。如果文件不存在,请将以下行添加到 ~/.ssh/config
中:
ForwardX11 yes
ssh user@remotehost.com
按照上述说明通过ssh登录到远程机器。
检查DISPLAY
环境变量:
echo $DISPLAY
localhost:10.0
的回复。xclip
:sudo apt install xclip
echo "test" | xclip -sel clip
cmd+V
并检查是否有效。
检查 vim
是否支持适用于 X11 转发的剪贴板:
vim --version | grep clipboard
它应该启用+clipboard
功能。
如果没有启用,请运行:
sudo apt install vim-gtk
~/.vimrc
中,如果文件不存在则创建该文件:set clipboard=unnamedplus
@andrewgazelka提供了一个很好的解决方案
我没有it2copy脚本:https://github.com/gnachman/iTerm2-shell-integration/blob/main/utilities/it2copy
这是我从网上下载的代码 :)
希望对大家有所帮助 :)
我将it2copy移动到了我的/usr/bin目录,适用于我的服务器和MacBook。
尝试使用另一个剪贴板寄存器 - "*y
。
set clipboard=unnamed
。这适用于在Mac终端中使用Debian 10。 - frozenjim