无法获取 vim 将突出显示的文本复制到系统剪贴板,而不是 vim 的剪贴板
Unable to get vim copy highlighted text to the system clipboard, not vim's clipboard
我正在使用 ZOC,也使用 Windows CMD,同样的事情,当我使用 VIM 和 运行 命令突出显示文本时,例如 "+y
或 "*y
,然后,尝试在我的 Windows 本地编辑器中粘贴,输出是空白的,这让我想到,突出显示的文本没有通过 SSH copied/delivered 到系统剪贴板连接...
同样,"+p
没有从系统剪贴板粘贴剪贴板内容..
系统信息:
pi@readonly:~/new$ vi --version | grep IMproved
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Sep 30 2017 18:21:38)
pi@readonly:~/new$ vim --version | grep clipboard
+clipboard +job +path_extra +user_commands
+eval +mouse_dec +statusline +xterm_clipboard
pi@readonly:~/new$
当我打开 VIM 中的任何文件并尝试检查寄存器 +
时,我得到了这个:
:reg +
--- Registers ---
Press ENTER or type command to continue
此外,当我 运行 :echo has('clipboard')
时,我得到 1
@PatrickBacon,我通过单击 v
、滚动文本并使用 "+y
来拉出突出显示的文本。以下是显示的寄存器:
:reg
--- Registers ---
"" int c;^J for (i = 0; i < sizeof(s) - 1 && (c = getchar()) != EOF;) {^J s[i++] = c;^J if (c == '\n
"0 int c;^J for (i = 0; i < sizeof(s) - 1 && (c = getchar()) != EOF;) {^J s[i++] = c;^J if (c == '\n
"1 ^J
"2 ^J
"3 p^J
"4 ^J
"5 ^J
"6 p^J
"7 p^J
"8 char s[64];^J size_t i;^J
"9 int atoi(const char *s) {^J int n = 0;^J size_t i = 0;^J^J while (s[i] == '0')^J i++;^J if (s[i]
"r while (s[i] >= '0' && s[i] <= '9')^J n = 10 * n + (s[i++] - '0');^J
"u size_t i = 0;^J^J while (s[i] == '0')^J i++;^J if (s[i] >= '1' && s[i] <= '9') {^J n = s[i++
"z t main() {^J char s[64];^J size_t i;^J int c;^J
"- i
"% t.c
Press ENTER or type command to continue
因此,看起来猛拉是在 vim..
内进行的
问题:
1) 我还应该检查什么来验证是否已满足 "Copying highlighted in VIM text into the remote system clipboard" 的所有要求?
2) VIM 中存在的寄存器是否是我 Linux 中某些目录中的真实文件,已缓冲?
3) 远程系统剪贴板与我通过 SSH 连接的 Linux 系统相比如何?换句话说,远程系统剪贴板只是 STDOUT 文件还是它的一部分,在 Linux?
通常,您无法通过 SSH 将文本从远程系统程序本地复制到当前系统。例外情况是当您 运行 本地计算机上的 X11 服务器和远程系统 运行 兼容 X11 的客户端,并且您为 SSH 连接启用了 X 转发。由于您使用的是 Windows,我怀疑您是否在本地系统上 运行 安装 X11 服务器。
剪贴板是您使用的任何 window 系统的一个功能,并且 Windows 和 X11(典型的 Linux window 系统)不共享一个兼容接口。 X11 剪贴板(有多个)存储在程序的内存中,直到 X 服务器使用剪贴板数据与程序对话并请求特定剪贴板中的数据。该数据不仅仅是标准输出;它是一个专用的内存块和一个特定的协议。
如果您希望能够从远程终端复制文本块,最简单的方法是在您的本地系统上使用类似 tmux 的东西,然后通过 tmux 连接到远程系统。您可以将 tmux 配置为使用快捷键将数据从终端复制并粘贴到剪贴板。这将导致配置适用于 tmux 中的所有终端程序和连接 运行,而不仅仅是 Vim.
例如,您可以使用如下键绑定(绑定到 y
)自动复制并粘贴到 Windows 剪贴板:
bind-key -T copy-mode-vi y send -X copy-pipe 'clip'
我正在使用 ZOC,也使用 Windows CMD,同样的事情,当我使用 VIM 和 运行 命令突出显示文本时,例如 "+y
或 "*y
,然后,尝试在我的 Windows 本地编辑器中粘贴,输出是空白的,这让我想到,突出显示的文本没有通过 SSH copied/delivered 到系统剪贴板连接...
同样,"+p
没有从系统剪贴板粘贴剪贴板内容..
系统信息:
pi@readonly:~/new$ vi --version | grep IMproved
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Sep 30 2017 18:21:38)
pi@readonly:~/new$ vim --version | grep clipboard
+clipboard +job +path_extra +user_commands
+eval +mouse_dec +statusline +xterm_clipboard
pi@readonly:~/new$
当我打开 VIM 中的任何文件并尝试检查寄存器 +
时,我得到了这个:
:reg +
--- Registers ---
Press ENTER or type command to continue
此外,当我 运行 :echo has('clipboard')
时,我得到 1
@PatrickBacon,我通过单击 v
、滚动文本并使用 "+y
来拉出突出显示的文本。以下是显示的寄存器:
:reg
--- Registers ---
"" int c;^J for (i = 0; i < sizeof(s) - 1 && (c = getchar()) != EOF;) {^J s[i++] = c;^J if (c == '\n
"0 int c;^J for (i = 0; i < sizeof(s) - 1 && (c = getchar()) != EOF;) {^J s[i++] = c;^J if (c == '\n
"1 ^J
"2 ^J
"3 p^J
"4 ^J
"5 ^J
"6 p^J
"7 p^J
"8 char s[64];^J size_t i;^J
"9 int atoi(const char *s) {^J int n = 0;^J size_t i = 0;^J^J while (s[i] == '0')^J i++;^J if (s[i]
"r while (s[i] >= '0' && s[i] <= '9')^J n = 10 * n + (s[i++] - '0');^J
"u size_t i = 0;^J^J while (s[i] == '0')^J i++;^J if (s[i] >= '1' && s[i] <= '9') {^J n = s[i++
"z t main() {^J char s[64];^J size_t i;^J int c;^J
"- i
"% t.c
Press ENTER or type command to continue
因此,看起来猛拉是在 vim..
内进行的问题:
1) 我还应该检查什么来验证是否已满足 "Copying highlighted in VIM text into the remote system clipboard" 的所有要求?
2) VIM 中存在的寄存器是否是我 Linux 中某些目录中的真实文件,已缓冲?
3) 远程系统剪贴板与我通过 SSH 连接的 Linux 系统相比如何?换句话说,远程系统剪贴板只是 STDOUT 文件还是它的一部分,在 Linux?
通常,您无法通过 SSH 将文本从远程系统程序本地复制到当前系统。例外情况是当您 运行 本地计算机上的 X11 服务器和远程系统 运行 兼容 X11 的客户端,并且您为 SSH 连接启用了 X 转发。由于您使用的是 Windows,我怀疑您是否在本地系统上 运行 安装 X11 服务器。
剪贴板是您使用的任何 window 系统的一个功能,并且 Windows 和 X11(典型的 Linux window 系统)不共享一个兼容接口。 X11 剪贴板(有多个)存储在程序的内存中,直到 X 服务器使用剪贴板数据与程序对话并请求特定剪贴板中的数据。该数据不仅仅是标准输出;它是一个专用的内存块和一个特定的协议。
如果您希望能够从远程终端复制文本块,最简单的方法是在您的本地系统上使用类似 tmux 的东西,然后通过 tmux 连接到远程系统。您可以将 tmux 配置为使用快捷键将数据从终端复制并粘贴到剪贴板。这将导致配置适用于 tmux 中的所有终端程序和连接 运行,而不仅仅是 Vim.
例如,您可以使用如下键绑定(绑定到 y
)自动复制并粘贴到 Windows 剪贴板:
bind-key -T copy-mode-vi y send -X copy-pipe 'clip'