通过SSH vim + COPY + mac

evo*_*ion 34 macos vim ssh

我通过ssh访问服务器,我运行vim来编辑文件.当我尝试将文本从vim本地放入我的mac(lion)本地编辑器时,或者使用y或"+ y它不起作用.我最终得到了我在本地复制的文本.如果我只是在内部使用p,它确实有用嗯好吧.

rom*_*inl 51

为了扩展Ray的答案......

当您通过SSH 远程服务器上使用Vim ,您在Vim中执行的所有操作都在远程服务器上完成.您在其上运行的远程服务器远程Vim对本地计算机及其系统剪贴板缺乏实用知识.

因此,y永远不会将拉出的文本放在本地剪贴板中.

为了将一大块文本远程Vim 复制本地计算机的剪贴板,您有三个选择:

  • 用鼠标选择文本,然后在任何Mac OS X应用程序中点击Cmd+ Clike.

    显然,它似乎是最简单的,但至少有三个限制:

    1. 它仅限于当前屏幕.如果您想要抽出的文本没有完全显示,您将无法复制所有文本.

    2. 它不能很好地发挥作用set mouse=a.使用此选项,任何使用鼠标选择内容的尝试都将导致视觉模式选择无法用Cmd+ 复制C.作为解决方法,您可以使用Alt+鼠标选择文本而无需进入可视模式,或只是从遥控器中删除此设置~/.vimrc.

    3. 行号也被复制.

  • 将拉出的文本放在一个临时文件中,scp然后pbcopy将其放入本地计算机并用于将其放入系统剪贴板中.

    这个解决方案似乎有点复杂,但它有效(问题本身也有点复杂).多年来,我看到了很多不同的实现,从简单的一个内衬到客户端/服务器设置.这是一个,随时谷歌周围的其他人.

  • 如果可用,使用X-forwarding将本地剪贴板连接到远程剪贴板.

  • 有用的提示:当使用“用鼠标选择文本”选项时,您可以使用 `:set nonum` 切换行号。 (2认同)
  • 另一种方法虽然笨重,但可以在紧要关头发挥作用:退出 vim。来自命令行的“cat”文件(输入“cat <文件名>”)。现在您可以使用鼠标(和 cmd-C)进行复制。 (2认同)
  • 在某些操作系统上,当使用鼠标选择文本以覆盖 set mouse=a 时,您需要按住 Shift 而不是 Alt (2认同)

Dea*_*ean 12

我的首选解决方案是通过scp从本地计算机上使用vim编辑文件.

:e scp://remoteuser@server.tld//path/to/document
Run Code Online (Sandbox Code Playgroud)

这样可以使缓冲区保持在本地状态,并且可以轻松复制到本地剪贴板.

另一个优点是你可以使用你的本地vim设置(.vimrc设置,插件等)


小智 12

有这个问题 - 从OSX通过SSH登录到linux盒子,无法从文件复制文件,用vim打开.

我的解决方法是 :set mouse=i

默认情况下,在所有模式下都启用鼠标.当您将其设置为仅在插入模式下启用时,您可以在不编辑时滚动并复制(正常模式),但是当您开始编辑(通过按I或插入键)并进入插入模式时,鼠标将用作光标放置你不能从终端复制.

您可以在〜/ .vimrc中设置该选项

有关可以设置的值和模式的详细信息,请参阅:帮助鼠标.


Mau*_*ppe 9

https://github.com/ojroques/vim-oscyank + iTerm2 + tmux 在我的案例中有效,这是我的工作流程:

我的 .vimrc 的某些部分

Plug 'ojroques/vim-oscyank'  " clipboard over ssh through tmux

" yank operation don't need to use the *" register (system clipboard)
set clipboard+=unnamedplus

autocmd TextYankPost *
    \ if v:event.operator is 'y' && v:event.regname is '+' |
    \ execute 'OSCYankRegister +' |
    \ endif
Run Code Online (Sandbox Code Playgroud)

  • 嘿,这太棒了,已经为此寻找解决方案有一段时间了,在运行 iTerm 的 mac 上完美运行,通过 ssh 连接到在 tmux 内运行 vim 的 Linux 服务器,完美。谢谢! (3认同)

小智 8

我在stackoverflow上的第一个答案,但我觉得这是一个很酷的(虽然很小)技巧,值得张贴.所以这就是我的工作:

cat <filename>
Run Code Online (Sandbox Code Playgroud)

当文本打印到终端上时,我用鼠标选择所有文本(鼠标滚动工作,因为我们在终端窗口上).然后用Cmd+ 复制该文本C并粘贴到我的本地文本编辑器中.

这个技巧的唯一缺陷是,如果您的文件长达数万行是不切实际的,因为用鼠标选择所有行本身就是一项任务.但是对于大约2k行的文件,它运行良好.


and*_*lka 8

iTerm2 Shell Utilities 附带it2copy允许从远程服务器复制到客户端剪贴板。在远程服务器上安装 Shell Utilities 并确保您已Applications in terminal may access clipboard检查。 在此处输入图片说明

然后,进入visual mode,选择文本并执行<,'>:w !it2copy

  • @andrewgazelka 很抱歉回复得太晚了,是的,我这样做了,但取得了一些成功,但我正在以 Base64 格式进行测试。我已经在 iterm 仓库中做了 PR,但没有太多帮助:\ https://github.com/gnachman/iterm2-website/issues/81 (2认同)

Ray*_*oal 5

在您通过 ssh 连接到的终端中进行拉取,vi会将这些行复制到远程计算机上 vi 的内部缓冲区中,而不是复制到 Mac 的剪贴板中。

使用你的鼠标。:)