Vi 寄存器操作,及使用系统剪贴板

使用 Vi 不得不提它强大的寄存器功能,一般操作系统只支持单例的剪贴板操作,而 Vi 借助于寄存器,相当于有几十个剪贴板可以使用。Vi 中针对内容的操作会记入到寄存器中,包括复制,粘贴,删除,以及只读的寄存器和与系统剪贴板交换内容的寄存器。本文最初目的是怎么与系统剪贴板交换内容。

在 Vi 中使用 :reg (:registers 或 :dis/:display) 命令显示寄存器中的内容

vi-registers

主要寄存器

未命名寄存器  "   最近一次复制 或删除的广西
数字寄存器  0-9  文本删除历史
命名寄存器 a-zA-Z  用户自定义寄存器,A-Z 为追加内容到相应的 a-z 寄存器
只读寄存器 %, # .:  分别为当前文件名,交替文件的名字,上次插入的文本,上次招待的命令
系统剪贴板 *
搜索模式寄存器 /

现在来看那么多寄存器的使用

通常我们用  yy yank 到的内容默认放在 " 和 0 寄存器中,与之相对的 p (put) 也是从 " 寄存器中获得内容的,如果要使用自定义的寄存器,可以用使用

"3yy 或 "ayy, 这样会把当前行的内容放到 3 或 a 寄存器中
相应的 "3p 或 "ap 就是从 3 或 a 寄存器中复制内容到当前位置

我们知道系统剪贴板寄存器是 *,所以相应的操作就是 "*yy"*p,这样就实现了与系统剪贴板的文本数据交换了。

寄存器操作总是以 " 一个双引号开始的。

在有些 Vi (如 Mac 系统自带的 Vi 和 GUI Vi) 中可以使用 CMD+C, CMD+V, 或 Shift+Insert 进行系统剪贴板的操作

可以用命令设置寄存器的内容,如 let @a="1234",设置寄存器 a 的内容为 "1234"

在粘贴时为防止像 autoindent 自动格式化,最好设置为粘贴模式 :set paste, 完事后恢复为 :set nopaste。我之前采用过的做法是用 :set noautoindent 设置为非自动退格方式来进行粘贴。

Vi 寄存器中的内容可以在文件 ~/viminfo 中找到,也就是说退出 Vi 后重新进入,寄存器的内容仍然可用。

更多内容自然是用 :help registers:help copy-move.

参考:  VIM使用系列:寄存器与复制粘贴缓冲区

本文链接 https://yanbin.blog/vi-registers-system-clipboard/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments