首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ubuntu:如何从在ssh上运行vim的终端复制文本到本地剪贴板

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

Stack Overflow用户
提问于 2019-12-22 11:26:23
回答 2查看 2.6K关注 0票数 1

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

场景:在Ubuntu桌面系统上,我正在运行一个终端,在那里我已经将SSH‘编辑到一个远程服务器上。通常,我可以使用鼠标从终端(即“远程服务器”)中选择文本,然后使用CTRL+SHIFT+C在本地复制文本(而不是在终端以外的任何应用程序中复制CTRL+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。Ctrl+Shift+C仍然工作(复制到本地剪贴板),只要在远程服务器上,我是,不运行vim。例如,我可以使用Ctrl+Shift+C将文本从远程控制台复制到本地剪贴板中。不管我是否在远程机器上工作,Ctrl+Shift+V仍然工作。但是,当在终端内的远程机器上打开vim时,Ctrl+Shift+C不会复制到本地剪贴板。

我的猜测是,Ctrl+Shift+C在某种程度上被vim捕获。

那么,如何将文本从终端复制到ubuntu上的剪贴板,而这个终端恰好运行ssh,而vim恰好是在远程机器上打开的?

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

我不想要一个复杂的解决方案,从vim到远程计算机上的其他东西,然后ftp‘到我的本地机器或什么的文件。那是垃圾。我希望在本地复制,不管在终端中看到的本地是什么,尽管在终端中运行的是vim通过远程机器上的ssh。

我以前已经可以这么做了。我仍然可以使用运行debian 8的远程服务器,但在运行debian 10的远程服务器上却不能。

我怎么能这么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-22 12:41:21

您所看到的实际上是:set mouse=a (或:set mouse=nvi)在Vim中的结果,这意味着Vim将告诉终端它希望捕获和处理鼠标事件,因此它们将转到远程Vim,而不是停留在本地终端。

所以问题不在于CTRL+SHIFT+C不起作用.但是它没有什么可复制的,因为终端中没有选择,因为鼠标事件被发送到remote Vim,使用它们来选择一个Visual块。

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

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

另一种选择是,即使在终端中运行的应用程序捕获了鼠标时,终端也可能有一种覆盖鼠标捕获和使用本地选择的方法。这可能需要在按住修饰符键时进行选择,例如ALTCTRLSHIFT,以便终端知道您实际上希望鼠标的其他行为用于此特定操作。终端可能会在它们使用的修饰符键中有所不同,但其中一个可能会触发您想要的行为。通常很容易判断,因为终端中的鼠标选择在视觉上与Vim中的视觉模式非常不同。使用覆盖完成普通鼠标选择之后,就可以像以前一样使用CTRL+SHIFT+C复制文本。这种方法给你带来了这两个世界的好处,因为你仍然可以在Vim里面使用鼠标,但是当你真的想要一个复制和粘贴的选择时,它对你是可用的。

票数 3
EN

Stack Overflow用户

发布于 2021-08-04 14:14:41

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

代码语言:javascript
复制
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 s服务sshd重新启动

重新启动sshd将是:

这是一种浆糊

43

然后按下回车

在Gnome终端I用Ctrl+Shift+C代替Ctrl+C --用+V和+F代替

我使用Ctrl+Z而不是Ctrl+C,在许多年里,当我需要关闭挂起(不同意)的Gnome终端并再次重新启动任务时,只有旧的包发生了冲突。

许多终端编辑器都继承了Gnome终端的Ctrl+C。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59443803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档