Ubuntu:如何从 ssh 上的 运行 vim 终端复制文本到本地剪贴板
Ubuntu: How to copy text from terminal which is running vim on ssh, into local clipboard
有很多类似的问题,但是 none 有一个有效的答案,它应该是微不足道的,因为它曾经是。
场景:
在 Ubuntu 桌面系统上,我是 运行 一个终端,我通过 SSH 连接到远程服务器。通常,我可以用鼠标从终端(即"from"远程服务器)select文本,然后用CTRL+SHIFT+C[=42=复制到本地](而不是像我在终端以外的任何应用程序中那样使用 CTRL+C)并将 selection 复制到本地剪贴板,然后我可以将其粘贴到任何地方。这也将允许我使用 CTRL+SHIFT+V 将它粘贴到终端本身(ar 另一个终端),最终将它粘贴到遥控器上的任何 运行服务器(包括vim)。
这曾经在 运行 vim 在远程服务器 上工作(在远程服务器上使用 debian 8),所以只是为了澄清:在我本地的 ubuntu 机器上是一个终端;在终端内,我已经通过 ssh 连接到远程服务器;在服务器上我是 运行 vim;所以在远程服务器上 vim 中打开的文件的内容在我本地机器的终端中是可见的。 Ctrl+Shift+C 曾经允许我将 selection 复制到我本地计算机上的本地剪贴板,然后我可以将其粘贴到本地文本编辑器中或粘贴回 vim远程机器。这样,我可以从远程 vim 复制粘贴到本地 gedit,反之亦然,或者从远程 vim 复制粘贴回远程 vim(通过我的本地剪贴板),或者从远程 vim 到另一个终端中的另一个远程 vim,无论是在同一台服务器还是另一台服务器上。我完全清楚远程服务器在这种情况下对复制和粘贴一无所知。本地系统只是复制它在终端中看到的文本(这恰好是远程机器上通过 ssh 输出的东西 运行),然后将它粘贴回终端(这导致它去通过 ssh 进入远程机器)。我知道,它对我有用。
当涉及 vim 时,这不再有效(在远程计算机上使用 debian 10)。现在在远程服务器上我是 运行 Debian 10。Ctrl+Shift+C 仍然有效(复制到本地剪贴板)只要在远程服务器上我是 NOT 运行 vim。例如,我可以使用 Ctrl+Shift+C 将文本从远程控制台复制到本地剪贴板。无论我是否在远程计算机上的 vim 中,Ctrl+Shift+V 仍然有效。但是,当 vim 在终端内的远程计算机上打开时,Ctrl+Shift+C 不会复制到本地剪贴板。
我的猜测是 Ctrl+Shift+C 以某种方式被 vim 捕获。
那么当这个终端恰好是 运行 ssh 并且 vim 恰好在远程机器上打开时,如何将文本从终端复制到 ubuntu 上的剪贴板?
我知道我可以使用 y
到 "yank"(即复制)和 p
远程粘贴到 vim。但是,这不是我要找的。这一切都是远程发生的,只允许我在远程机器上从 vim 复制到 vim(也可能从 vim 复制到远程机器上的其他东西,我不在乎)。这不允许我从远程机器上的 vim 复制到本地机器上的文本编辑器。
我不想要一个复杂的解决方案,涉及 "yanking" 从 vim 到远程机器上的其他东西,然后 ftp 将文件发送到我的本地机器或其他东西。那是垃圾。我想 LOCALLY COPY 在终端 local 看到的任何内容,尽管 运行 在终端中发生的是 vim 通过远程机器上的 ssh。
我以前已经可以做到了。我仍然可以使用 运行 debian 8 的远程服务器。但不能在 运行 debian 10.
的远程服务器上
我该怎么做?
你看到的实际上是Vim中:set mouse=a
(或:set mouse=nvi
)的结果,这意味着Vim会告诉终端它要捕获并处理鼠标事件,因此它们将转到远程 Vim 而不是留在本地终端。
所以问题实际上并不是 CTRL+SHIFT+C 不起作用...而是它没有什么可复制的,因为没有 select终端中的离子,因为鼠标事件被发送到远程 Vim,后者将它们用于 select 可视块。
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
中的说明以保留您一直使用的默认值!)
另一种选择是您的终端可能有一种方法可以覆盖鼠标捕获并使用本地 selection,即使终端中的应用程序 运行 已捕获鼠标。这可能涉及在按住修饰键的同时执行 selection,例如 ALT 或 CTRL 或者 SHIFT ,这样终端就知道您确实需要鼠标的 other 行为来执行此特定操作。终端使用的修改键可能会有所不同,但其中一个可能会触发您想要的行为。通常很容易分辨,因为终端中的鼠标 selection 在视觉上与 Vim 中的可视模式完全不同。使用覆盖完成普通鼠标 selection 后,您可以像往常一样使用 CTRL+SHIFT+C 复制文本。这种方法为您带来了两全其美的好处,因为您仍然可以在 Vim 中使用鼠标,但是当您真正需要 selection 进行复制和粘贴时,您可以使用它。
我在 Linux VPS-s 上使用 tty 终端多年。正如 filBranden 已经提到的,从“Gnome Terminal”到 VPS 的 ssh 是首选解决方案。但在我设置 uwf 和 ssh 服务之前,我使用 tty 终端 w/o 鼠标和粘贴。我发现将以下别名添加到 .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 s service sshd restart
重新启动 sshd 将是:
有点像粘贴
!43
然后按 Enter
在 Gnome 终端上,我用 Ctrl+C 替换了 Ctrl+Shift+C,用 +V 和 +F
替换了相同的替换,我使用 Ctrl+Z 而不是 Ctrl+C,多年来只有旧包在我需要杀死挂起的(不同意的)Gnome 终端并重新启动任务
还有许多终端编辑器从 Gnome 终端继承了 Ctrl+C。
有很多类似的问题,但是 none 有一个有效的答案,它应该是微不足道的,因为它曾经是。
场景: 在 Ubuntu 桌面系统上,我是 运行 一个终端,我通过 SSH 连接到远程服务器。通常,我可以用鼠标从终端(即"from"远程服务器)select文本,然后用CTRL+SHIFT+C[=42=复制到本地](而不是像我在终端以外的任何应用程序中那样使用 CTRL+C)并将 selection 复制到本地剪贴板,然后我可以将其粘贴到任何地方。这也将允许我使用 CTRL+SHIFT+V 将它粘贴到终端本身(ar 另一个终端),最终将它粘贴到遥控器上的任何 运行服务器(包括vim)。
这曾经在 运行 vim 在远程服务器 上工作(在远程服务器上使用 debian 8),所以只是为了澄清:在我本地的 ubuntu 机器上是一个终端;在终端内,我已经通过 ssh 连接到远程服务器;在服务器上我是 运行 vim;所以在远程服务器上 vim 中打开的文件的内容在我本地机器的终端中是可见的。 Ctrl+Shift+C 曾经允许我将 selection 复制到我本地计算机上的本地剪贴板,然后我可以将其粘贴到本地文本编辑器中或粘贴回 vim远程机器。这样,我可以从远程 vim 复制粘贴到本地 gedit,反之亦然,或者从远程 vim 复制粘贴回远程 vim(通过我的本地剪贴板),或者从远程 vim 到另一个终端中的另一个远程 vim,无论是在同一台服务器还是另一台服务器上。我完全清楚远程服务器在这种情况下对复制和粘贴一无所知。本地系统只是复制它在终端中看到的文本(这恰好是远程机器上通过 ssh 输出的东西 运行),然后将它粘贴回终端(这导致它去通过 ssh 进入远程机器)。我知道,它对我有用。
当涉及 vim 时,这不再有效(在远程计算机上使用 debian 10)。现在在远程服务器上我是 运行 Debian 10。Ctrl+Shift+C 仍然有效(复制到本地剪贴板)只要在远程服务器上我是 NOT 运行 vim。例如,我可以使用 Ctrl+Shift+C 将文本从远程控制台复制到本地剪贴板。无论我是否在远程计算机上的 vim 中,Ctrl+Shift+V 仍然有效。但是,当 vim 在终端内的远程计算机上打开时,Ctrl+Shift+C 不会复制到本地剪贴板。
我的猜测是 Ctrl+Shift+C 以某种方式被 vim 捕获。
那么当这个终端恰好是 运行 ssh 并且 vim 恰好在远程机器上打开时,如何将文本从终端复制到 ubuntu 上的剪贴板?
我知道我可以使用 y
到 "yank"(即复制)和 p
远程粘贴到 vim。但是,这不是我要找的。这一切都是远程发生的,只允许我在远程机器上从 vim 复制到 vim(也可能从 vim 复制到远程机器上的其他东西,我不在乎)。这不允许我从远程机器上的 vim 复制到本地机器上的文本编辑器。
我不想要一个复杂的解决方案,涉及 "yanking" 从 vim 到远程机器上的其他东西,然后 ftp 将文件发送到我的本地机器或其他东西。那是垃圾。我想 LOCALLY COPY 在终端 local 看到的任何内容,尽管 运行 在终端中发生的是 vim 通过远程机器上的 ssh。
我以前已经可以做到了。我仍然可以使用 运行 debian 8 的远程服务器。但不能在 运行 debian 10.
的远程服务器上我该怎么做?
你看到的实际上是Vim中:set mouse=a
(或:set mouse=nvi
)的结果,这意味着Vim会告诉终端它要捕获并处理鼠标事件,因此它们将转到远程 Vim 而不是留在本地终端。
所以问题实际上并不是 CTRL+SHIFT+C 不起作用...而是它没有什么可复制的,因为没有 select终端中的离子,因为鼠标事件被发送到远程 Vim,后者将它们用于 select 可视块。
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
中的说明以保留您一直使用的默认值!)
另一种选择是您的终端可能有一种方法可以覆盖鼠标捕获并使用本地 selection,即使终端中的应用程序 运行 已捕获鼠标。这可能涉及在按住修饰键的同时执行 selection,例如 ALT 或 CTRL 或者 SHIFT ,这样终端就知道您确实需要鼠标的 other 行为来执行此特定操作。终端使用的修改键可能会有所不同,但其中一个可能会触发您想要的行为。通常很容易分辨,因为终端中的鼠标 selection 在视觉上与 Vim 中的可视模式完全不同。使用覆盖完成普通鼠标 selection 后,您可以像往常一样使用 CTRL+SHIFT+C 复制文本。这种方法为您带来了两全其美的好处,因为您仍然可以在 Vim 中使用鼠标,但是当您真正需要 selection 进行复制和粘贴时,您可以使用它。
我在 Linux VPS-s 上使用 tty 终端多年。正如 filBranden 已经提到的,从“Gnome Terminal”到 VPS 的 ssh 是首选解决方案。但在我设置 uwf 和 ssh 服务之前,我使用 tty 终端 w/o 鼠标和粘贴。我发现将以下别名添加到 .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 s service sshd restart
重新启动 sshd 将是:
有点像粘贴
!43
然后按 Enter
在 Gnome 终端上,我用 Ctrl+C 替换了 Ctrl+Shift+C,用 +V 和 +F
替换了相同的替换,我使用 Ctrl+Z 而不是 Ctrl+C,多年来只有旧包在我需要杀死挂起的(不同意的)Gnome 终端并重新启动任务
还有许多终端编辑器从 Gnome 终端继承了 Ctrl+C。