远程ssh连接manjaro无法使用系统剪切板

文章目录

    • 背景
      • 本机环境
    • vim的复制粘贴
      • 查看vim寄存器
      • 各种寄存器的含义
    • 使用系统剪切板
      • ssh访问系统剪切板
      • 安装配置X11
      • 再次查看vim寄存器
    • 后记

背景

使用vim打开文件,把a文件中的内容,复制一部分到b文件中去。

大概步骤如下:

1、搜索要复制的部分的结尾,例如我这里要复制的是json,固定结尾是]}]}
/]}]}

2、按v进入可视化模式,可通过方向键批量选中
v

3、从结尾,复制到开头,按0,发现开头和结尾的内容都被选中了
0
4、y复制,p粘贴

预想的很完美,实际上发现粘贴的根本不是我们想要的,是之前复制的内容。

ok,有点意思了。

本机环境

mac 远程ssh连接开发机。
开发机是manjaor系统。且各软件版本都是最新的。

vim的复制粘贴

查看vim寄存器

:reg

Type Name Content
  l  "1   console.log("animator");^J
  l  "2   ^I^Iconsole.log(this.animator);^J
  l  "3   ^J                const indexBuffers = this.asset.getIndexBuffers();^J                for (const ib of indexBuffers) {^J                    const ind
  l  "4   Theme=Material-Color-Red^J
  l  "5   export PATH=$PATH:/usr/share/bcc/tools^J
  l  "6   pathmunge $HOME/.conda/envs/daily/bin after^J
  l  "7   pathmunge $HOME/.go/bin after^J
  l  "8   ^Igitlab.rokid-inc.com/open-platform/codec v0.0.0-20190903023529-9f40c211f9e5 // indirect^J
  l  "9           max-file: "365"^J
  c  "-   N{"asset":
  c  ":   reg
  c  "%   orange_monkey_2.gltf
  c  "/   ]}]}

可以看到,寄存器有很多,那么什么时候会用到这些寄存器呢?作用分别是啥?

各种寄存器的含义

  1. "0 - "9 :这是 10 个数字寄存器,每次执行复制操作时,Vim 都会将所复制的文本保存到 "0 号寄存器中。这使得 "0 号寄存器成为上一次复制操作的默认寄存器。你可以通过执行命令 "0p 将其内容粘贴到光标位置。
  2. "* 和 "+:这两个寄存器分别对应系统剪贴板和鼠标选择寄存器。当你使用这些寄存器进行复制和粘贴操作时,Vim 实际上是在与其他程序共享系统剪贴板。例如,在终端中运行 Vim 并使用 "+y 命令复制文本后,你可以在其他支持剪贴板功能的应用程序中使用 Ctrl+V 粘贴该文本。
  3. "- 是 Vim 中的一个特殊寄存器。它被称为无名寄存器,因为它是默认使用的寄存器,所有未指定寄存器名称的复制和剪切操作都将使用该寄存器。
  4. “:” 寄存器:该寄存器保存最近使用过的 Vim 命令行。例如,如果你在 Vim 中执行了 :wq 命令保存并退出当前文件,那么该命令将被保存到 “:” 寄存器中。你可以通过在命令模式下执行 Ctrl+R : 快捷键来将其内容粘贴到光标位置。
  5. “%” 寄存器:该寄存器保存当前编辑文件的文件名。% 符号表示当前文件名,它可以方便地用于执行某些 Vim 操作,例如在命令行中打开当前文件或者在 Vim 中执行关于当前文件的替换操作。
  6. “/” 寄存器:该寄存器保存最近使用的搜索模式。在 Vim 中,你可以使用 / 或 ? 命令搜索文本。当你执行此类操作时,Vim 会将搜索结果保存到 “/” 寄存器中,以便后续重复搜索或者粘贴搜索结果。

普通寄存器无法跨文件使用。也就是说,如果你在一个文件中复制了一段文本,然后打开另一个文件并尝试粘贴该文本,将无法成功。如果希望在多个文件之间共享寄存器的内容,可以使用系统剪切板,也就是"+y 和"+p

使用系统剪切板

一文搞懂vim复制粘贴 - huahuayu - 博客园

参考以上博客,确认vim支持 + clipboard, 打开vim复制粘贴依然不成功。 此时才注意到,:reg查看的寄存器列表中,根本就没有"+寄存器!

这就奇怪了,跟同事都是使用manjaor系统,他那边是正常的,我这边就不行? 区别就是我是使用ssh远程连接的服务器。 看来很可能是ssh导致的使用不了系统的剪切板了,那么如何解决呢?google一下。

ssh访问系统剪切板

Vim:通过ssh访问系统剪贴板 - Linux到OS X

这个博客指出来x11转发,那么X11是什么呢?

X11 转发是一种机制,它允许运行在远程系统的X11程序的图形界面显示在本地客户端上。对于X11转发,远程主机不需要有完整安装的X11系统;但是,至少需要安装_xauth_,_xauth_是维护Xauthority配置的实用工具,这个配置用于X11会话服务端和客户端的认证。
客户端程序发出用户输入,如鼠标、键盘的动作等,然后发送给服务器程序处理。服务器程序有一个X分配器(xorg),负责处理客户端程序的输入请求,并将响应应用到屏幕显示上。此外,它还负责管理系统中的窗口、剪贴板等。
共享剪贴板就是服务器程序将剪贴板内容保存在共享内存中,并对它进行锁定,从而允许客户端程序可以访问这个内容。当客户端程序读取剪贴板内容时,它会得到一个指向共享内存开始位置的指针,以便访问内容。

ok,看起来像是能解决我们的问题。

安装配置X11

mac下安装使用X11参考: https://cloud.tencent.com/developer/article/1754671
manjaor安装使用X11参考: https://wiki.archlinuxcn.org/wiki/OpenSSH

配置结束,安装xclock试试:

 sudo pacman -Sy xorg-xclock
# 执行xclock
xclock

# 提示Error: Can't open display:
# 解决方案: 远程连接ssh的终端没有设置display导致,设置一下即可。
export DISPLAY=:0

远程ssh连接manjaro无法使用系统剪切板_第1张图片
有点意思,顺带打开chrome看看

google-chrome-stable

能打开,就是非常卡。。。。。

再次查看vim寄存器

X11页配置好了,再次vim打开文件,查看寄存器

Type Name Content
  c  ""   TF^B^@^@^@<9c>{Â^A^@I^B^@JSON{"asset":{"gene
  c  "0   TF^B^@^@^@<9c>{Â^A^@I^B^@JSON{"asset":{"gene
  c  "1   set":{"gene
  l  "2   ^I^Iconsole.log(this.animator);^J
  l  "3   ^J                const indexBuffers = this.asset.getIndexBuffers();
  l  "4   Theme=Material-Color-Red^J
  l  "5   export PATH=$PATH:/usr/share/bcc/tools^J
  l  "6   pathmunge $HOME/.conda/envs/daily/bin after^J
  l  "7   pathmunge $HOME/.go/bin after^J
  l  "8   ^Igitlab.rokid-inc.com/open-platform/codec v0.0.0-20190903023529-9f40
  l  "9           max-file: "365"^J
  c  "-   ^B
  c  "*   TF^B^@^@^@<9c>{Â^A^@I^B^@JSON{"asset":{"gene
  c  "+   TF^B
  c  "%   orange_monkey_2.glb
  c  "/   ]}]}

"+ 和 “* 终于出来了,此时使用”+y 复制, "+p粘贴成功!

后记

说实话,完全没想到一个小小的复制粘贴能引出这么多问题。 不管是vim的配置,还是寄存器的选择,还是X11转发机制,还是sshd的配置,都深感知识的匮乏。继续上路吧。

你可能感兴趣的:(linux,ssh,linux)