Vim 寄存器
VIM寄存器
VIM有两个地方可以保存临时数据
OS级别-剪切板
VIM级别-寄存器
VIM寄存器概述
寄存器是VIM用于保存临时数据的地方,不同于传统的编辑器(于系统共享一个寄存器,也成为剪切板),VIM具有多个寄存器,分别保存不同的临时数据,活用多个寄存器可以显著提高数据的安全和可操作性。
同时,为了与系统剪切板互通,VIM有一个专用的寄存器,与系统剪切板内容一致,既保证了VIM本身的统一性,也实现了与操作系统的对接。
查看寄存器值
查看所有寄存器值::reg
查看指定寄存器值::reg "{register_name}
调取寄存器值
NORMAL Mode:"{register_name}
COMMAND MODE:<C-r>+"寄存器名称 (输入<C-r>后VIM会自动打出"寄存器引用符号。
INSERT MODE:<C-r>+寄存器名称(无需输入寄存器引用符号")
VIM寄存器分类
- 无名寄存器(默认寄存器)
引用方式: ""
该寄存器是默认的寄存器,所有的复制和修改操作(x、s、d、c、y)都会将该数据复制到无名寄存器。
- 字母寄存器
引用方式:"a - "z 或"A - "Z
{register_name}只能是一位的26个英文字母,从a-z。
大写字母A-Z寄存器内容将会合并到对应小写字母内容后边。
- 数字寄存器
引用方式:"0 (数字0)- "9
3.1 复制专用寄存器 0
引用方式:"0
(数字0)
仅当使用复制操作(y)时,该数据将会同时被复制到无名寄存器和复制专用寄存器。
3.2 逐级临时缓存寄存器1-9**
引用方式:”1 - “9 (数字1-9)
所有不带范围(‘(’,‘)’,‘{’,‘}’)、操作涉及1行以上的删除修改操作(x、s、d、c)的数据都会复制到逐级临时缓存寄存器,并在新的数据加入时,逐级先后推移。1的数据复制到2,2的复制到3,最后的9寄存器内容将会被删除。
1行以内的数据删除修改操作的数据不会复制到逐级临时缓存寄存器1-9,而是复制到另一个Small Delete Register: "-
- 黑洞寄存器
引用方式:"_
几乎所有的操作涉及的数据都会被复制到寄存器,如果想让操作的数据不经过寄存器,可以指定黑洞寄存器,数据到该寄存器就会消失掉,不能显示,也不存在。
- 系统剪切板
引用方式:"+ 或"*
于VIM外部的GUI交互数据时,需要使用专用的系统剪切板。
在Unix环境下,”+寄存器需要+xterm-clipboard feature的VIM软件才能使用,具有这个feature的VIM可以安装vim-gtk(包含gvim和vim),使用gvim可以正常调用”+寄存器。
“+和”*的區別:
Under Windows, the * and + registers are equivalent.
For X11 systems, though, they differ. For X11 systems, * is the selection, and + is the cut buffer (like clipboard).
Text selected, or otherwise highlighted in one X11 app is available in the selection buffer.
Text explicitly copied or cut is available in the cut buffer.
Ref:
5.1 剪切板与自动缩进indent
如果开启了set autoindent,在粘贴具有格式缩进的文本时(如python程序),粘贴的结果将会是缩进混乱的,因为set autoindent的影响。
解决这个问题有两个方法:
使用
set paste
模式
开启paste模式后,autoindent等缩进功能将会被屏蔽,粘贴格式就会不受影响。
每次手工开启关闭paste模式将会比较麻烦,可以在_vimrc中为其设置一个快捷键,每次需要时按一下即可切换:set pastetoggle=使用普通模式的
"+p
命令插入模式输入
<C-r><C-p>"+
表达式寄存器
引用方式:”=
所有寄存器里最特殊的一个,用于计算表达式。
输入完该寄存器应用后,会在命令行里提示“=”,按需输入表达式,结果将会显示到光标处。
7. 其他寄存器
“% 当前文件名,包含文件路径。
“/ 上次查找的内容。
“. 上次插入的内容。