sed -i 单引号中嵌套双引号_Vim中* 和 + 寄存器

《Pro Vim》和《Vim使用技巧》中关于* 和 + 寄存器(register)都模糊其词,在Windows和Macos下两者效果一样(据说,没试过),在wayland下体验挺诡异的,在X11下有很明显的区别。

vim 寄存器

首先vim中寄存器的使用方法是这样的,在Visual模式下,选中文字,然后

“*y

就能把文字复制到* 寄存器中。黏贴时用

”*p

vim默认的寄存器是"(双引号)寄存器,yy和""yy 效果是一样的。vim中查看寄存器的命令是

:register

关于vim寄存器的详细内容,参见《Pro Vim》Register部分

X11

检查自己使用的是wayland还是X11,使用这个命令

echo $XDG_SESSION_TYPE

在X11中,有两种黏贴板:selections 和 cut-buffer。两者的机制是不同的

selection中的内容由提供的应用程序维护,从selection取数据的程序要向原引用程序索取数据。当原应用程序退出时,你也要不到这段数据了。selection其实由三部分构成:Primary,Secondary,Clipboard。其中Secondary表现ill-defined,我们不会再提到它。如果你想要黏贴Primary中的数据,按下鼠标的中键,如果你想黏贴Clipboard中的数据,鼠标右键,在弹出框中选择黏贴。

cut-buffer由cut-buffer0-7 , 8个buffer构成。cut-buffer 中的数据由X-server维护。如果你不知道什么是x-server,...。只有当x-server退出时(如log out),数据才会消失。也就是说cut-buffer中的数据较为持久,但cut-buffer是一种old and outdated的技术。

Xclip

我们需要工具来查看x11中黏贴板的变化(总不能一直使用鼠标吧)。我们可以用xclip来查看黏贴板,为方便起见我写了2个函数

# clear clipboard
function clclipboard(){
  echo | xclip -selection clipboard 
  echo | xclip -selection primary
  echo | xclip -selection cut-buffer 
}

# show clipboard
function lsclipboard(){
  printf "primary    ";  xclip -o -selection primary 
  echo
  printf "clipboard  ";  xclip -o -selection clipboard
  echo
  printf "cut-buffer ";  xclip -o -selection cut-buffer
}

测试

我们打开 vim --noplugin,输入 :h x11-selection,这也是我的主要参考资料,建议详细阅读。然后gg 到顶部,同时在下面开一个终端,clclipboard一下。

我们选中1开头的那一行,"*y,然后在下面运行lsClipboard

f6c1034354c6c9d8c7529fd8a5fc0711.png
* 寄存器只影响primary,不影响Clipboard和cut-buffer。这里的cut-buffer是cut-buffer0

然后我们选中第二行,"+y ,同样运行lsclipboard

42fe8be2d0a57f15d8ef33a7081938f6.png
+寄存器同时修改了primary,Clipboard,和cut-buffer

我们在把第三行复制到* 寄存器

750bf7dd2d402d16dc2ee397e998e386.png

这是我们打开gedit,先按下中键,黏贴的是 3. Shell ....

再Ctrl-v ,黏贴的是 2. GUI......

然后退出Vim,按中键和Ctrl-V ,这时的效果如何,大家可以试一下,应该中键的内容是没有的。

结论

使用* 寄存器,内容只会覆盖 Primary,而且vim一旦关闭,内容会消失

使用+ 寄存器,内容会覆盖 Primary,Clipboard,Cut-buffer0,内容保存的时间较为持久。

如果Ctrl-C的常规复制方式,内容会覆盖 Primary,Clipboard,Cut-buffer0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值