使用 Vi 不得不提它强大的寄存器功能,一般操作系统只支持单例的剪贴板操作,而 Vi 借助于寄存器,相当于有几十个剪贴板可以使用。Vi 中针对内容的操作会记入到寄存器中,包括复制,粘贴,删除,以及只读的寄存器和与系统剪贴板交换内容的寄存器。本文最初目的是怎么与系统剪贴板交换内容。
在 Vi 中使用 :reg (:registers 或 :dis/:display) 命令显示寄存器中的内容
主要寄存器
未命名寄存器 "
最近一次复制 或删除的广西
数字寄存器 0-9
文本删除历史
命名寄存器 a-z
, A-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
.
本文链接 https://yanbin.blog/vi-registers-system-clipboard/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。