繁体   English   中英

Ubuntu:如何将文本从在 ssh 上运行 vim 的终端复制到本地剪贴板

[英]Ubuntu: How to copy text from terminal which is running vim on ssh, into local clipboard

有许多类似的问题,但没有一个有效的答案,而且应该是微不足道的,因为它曾经是。

场景:在 Ubuntu 桌面系统上,我正在运行一个终端,通过 SSH 连接到远程服务器。 通常,我可以使用鼠标从终端(即“来自”远程服务器)选择文本,然后使用CTRL+SHIFT+C (而不是像我在任何应用程序中所做的那样)在本地复制它一个终端)并将选择复制到本地剪贴板,然后我可以将其粘贴到任何地方。 这也将允许我使用CTRL+SHIFT+V将其粘贴到终端本身(另一个终端)中,最终将其粘贴到远程服务器上运行的任何内容(包括 vim)。

在远程服务器上运行 vim时,这曾经可以工作(在远程服务器上使用 debian 8),所以只是澄清一下:在我的本地 ubuntu 机器中是一个终端; 在终端内,我已通过 ssh 连接到远程服务器; 在我运行 vim 的服务器上; 所以在远程服务器上的 vim 中打开的文件的内容在我本地机器的终端中是可见的。 Ctrl+Shift+C 曾经允许我将选择复制到本地机器上的本地剪贴板,然后我可以将其粘贴到本地文本编辑器或回到远程机器上的 vim 中。 这样,我可以从远程 vim 复制粘贴到本地 gedit,反之亦然,或者从远程 vim 复制粘贴回远程 vim(通过我的本地剪贴板),或者从远程 vim 复制粘贴到另一个终端中的另一个远程 vim,无论是在同一台服务器上还是另一台服务器上。 我非常清楚远程服务器在这种情况下对复制和粘贴一无所知。 本地系统只是复制它在终端中看到的文本(这恰好是在远程机器上通过 ssh 运行的东西的输出),然后将其粘贴回终端(这导致它通过 ssh 进入远程机器)。 我知道这一点,它对我有用。

当涉及到 vim 时,这不再起作用(在远程机器上使用 debian 10)。 现在在远程服务器上我正在运行 Debian 10。只要在远程服务器上我没有运行 vim Ctrl+Shift+C 仍然可以工作(复制到本地剪贴板)。 例如,我可以使用 Ctrl+Shift+C 将文本从远程控制台复制到我的本地剪贴板。 无论我是否在远程机器上的 vim 中,Ctrl+Shift+V 仍然有效。 但是,当 vim在终端内的远程机器上打开时,Ctrl+Shift+C 不会复制到本地剪贴板。

我的猜测是 Ctrl+Shift+C 以某种方式被 vim 捕获。

那么,当这个终端碰巧运行 ssh 并且 vim 碰巧在远程机器上打开时,如何将文本从终端复制到 ubuntu 上的剪贴板?

我知道我可以使用y来“猛拉”(即复制)并使用p远程粘贴到 vim 中。 然而,这不是我要找的。 这一切都是远程发生的,只允许我在远程机器上从 vim 复制到 vim(也可能从 vim 复制到远程机器上的其他东西,我不在乎)。 这不允许我从远程机器上的 vim 复制到本地机器上的文本编辑器。

我不想要一个复杂的解决方案,涉及从vim“猛拉”到远程机器上的其他东西,然后将文件ftp到我的本地机器或其他东西。 那是垃圾。 我想本地复制在终端本地看到的任何内容,尽管在终端中运行的内容是通过远程机器上的 ssh 进行的 vim。

我曾经能够做到这一点。 我仍然可以使用运行 debian 8 的远程服务器。但不能使用运行 debian 10 的远程服务器。

我怎样才能做到这一点?

你看到的实际上是 Vim 中:set mouse=a (或:set mouse=nvi )的结果,这意味着 Vim 会告诉终端它想要捕获和处理鼠标事件,所以他们会去远程Vim 而不是留在本地终端。

所以问题实际上并不是CTRL+SHIFT+C不起作用......但是它没有什么可复制的,因为终端中没有选择,因为鼠标事件被发送到远程 Vim 使用它们进行选择一个视觉块。

Debian 8 提供 Vim 7.4 版,而 Debian 10 提供 Vim 8+ 并从 Vim 8 开始提供了一个新的defaults.vim ,它会在您没有 vimrc 文件时运行并自动设置mouse=a (或mouse=nvi ),所以也许那是你从哪里得到设置的? 或者如果你有一个 vimrc 文件,也许 Debian 现在在系统 vimrc 文件中包含了这个设置,这就是它的来源......

您有几种替代方法可以解决此问题。 一种是使用:set mouse=禁用 Vim 捕获鼠标,您可以在正在运行的 Vim 上执行它以确认它为您解决了问题,或者添加到您的~/.vimrc文件中以使其永久化。 (如果您是第一次创建新的 vimrc 文件,请参阅:help defaults.vim的说明以保留您一直使用的默认值!)

另一种选择是您的终端可能有办法覆盖鼠标捕获并使用本地选择,即使在终端中运行的应用程序已捕获鼠标。 这可能涉及在按住修饰键(例如ALTCTRLSHIFT )的同时进行选择,以便终端知道您实际上需要鼠标的其他行为来执行此特定操作。 终端使用的修饰键可能会有所不同,但其中之一可能会触发您想要的行为。 通常很容易分辨,因为终端中的鼠标选择在视觉上与 Vim 中的可视模式大不相同。 使用覆盖完成正常的鼠标选择后,您可以像以往一样使用CTRL+SHIFT+C复制文本。 这种方法为您带来了两全其美的好处,因为您仍然可以在 Vim 中使用鼠标,但是当您确实想要选择进行复制和粘贴时,您可以使用它。

我在 Linux VPS-s 上使用 tty 终端多年。 正如 filBranden 已经提到的,从“Gnome 终端”到 VPS 的 ssh 是首选解决方案。 但是在我设置 uwf 和 ssh 服务之前,我使用 tty 终端工作,没有鼠标和粘贴。 我发现将以下别名添加到.bashrc的有用解决方案之一:

alias f='sudo find / -iname'
alias h='history'
alias hgrep='history | grep'
alias htail='history | tail -n'
alias s='sudo'
alias path='echo -e ${PATH//:/\\n}'
alias ..='cd ..'

因此,例如,如果您键入hgrep sshd输出将是:

43秒服务sshd重启

再次重新启动 sshd 将是:
它是一种糊状物
!43
然后按 Enter

在 Gnome 终端上,我将 Ctrl+Shift+C 替换为 Ctrl+C 与 +V 和 +F 相同的替换
我使用 Ctrl+Z 而不是 Ctrl+C 并且多年来,当我需要杀死挂起的(不同意的)Gnome 终端并再次重新启动任务时,只有旧的软件包发生了几次冲突

许多终端编辑器也从 Gnome 终端继承了 Ctrl+C。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM