文章目录
- 背景
- 本机环境
- 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 "/ ]}]}
可以看到,寄存器有很多,那么什么时候会用到这些寄存器呢?作用分别是啥?
各种寄存器的含义
- "0 - "9 :这是 10 个数字寄存器,每次执行复制操作时,Vim 都会将所复制的文本保存到 "0 号寄存器中。这使得 "0 号寄存器成为上一次复制操作的默认寄存器。你可以通过执行命令 "0p 将其内容粘贴到光标位置。
- "* 和 "+:这两个寄存器分别对应系统剪贴板和鼠标选择寄存器。当你使用这些寄存器进行复制和粘贴操作时,Vim 实际上是在与其他程序共享系统剪贴板。例如,在终端中运行 Vim 并使用 "+y 命令复制文本后,你可以在其他支持剪贴板功能的应用程序中使用 Ctrl+V 粘贴该文本。
- "- 是 Vim 中的一个特殊寄存器。它被称为无名寄存器,因为它是默认使用的寄存器,所有未指定寄存器名称的复制和剪切操作都将使用该寄存器。
- “:” 寄存器:该寄存器保存最近使用过的 Vim 命令行。例如,如果你在 Vim 中执行了 :wq 命令保存并退出当前文件,那么该命令将被保存到 “:” 寄存器中。你可以通过在命令模式下执行 Ctrl+R : 快捷键来将其内容粘贴到光标位置。
- “%” 寄存器:该寄存器保存当前编辑文件的文件名。% 符号表示当前文件名,它可以方便地用于执行某些 Vim 操作,例如在命令行中打开当前文件或者在 Vim 中执行关于当前文件的替换操作。
- “/” 寄存器:该寄存器保存最近使用的搜索模式。在 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
有点意思,顺带打开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的配置,都深感知识的匮乏。继续上路吧。