VIM寄存器

作者: mst7 | 来源:发表于2015-08-07 15:38 被阅读998次

VIM有两个地方可以保存临时数据

  1. OS级别-剪切板
  2. 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寄存器分类

1. 无名寄存器(默认寄存器)

引用方式:""
该寄存器是默认的寄存器,所有的复制和修改操作(x、s、d、c、y)都会将该数据复制到无名寄存器。

2. 字母寄存器

引用方式:"a - "z 或"A - "Z
{register_name}只能是一位的26个英文字母,从a-z。
大写字母A-Z寄存器内容将会合并到对应小写字母内容后边。

3. 数字寄存器

引用方式:"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: "-

4. 黑洞寄存器

引用方式:"_
几乎所有的操作涉及的数据都会被复制到寄存器,如果想让操作的数据不经过寄存器,可以指定黑洞寄存器,数据到该寄存器就会消失掉,不能显示,也不存在。

5. 系统剪切板

引用方式:"+
于VIM外部交互数据时需要使用专用的系统剪切板。
在Unix环境下,"+寄存器需要+xterm-clipboard feature的VIM软件才能使用,具有这个feature的VIM可以安装vim-gtk(包含gvim和vim),使用gvim可以正常调用"+寄存器。

5.1 剪切板与自动缩进indent

如果开启了set autoindent,在粘贴具有格式缩进的文本时(如python程序),粘贴的结果将会是缩进混乱的,因为set autoindent的影响。
解决这个问题有两个方法:

  1. 使用set paste模式
    开启paste模式后,autoindent等缩进功能将会被屏蔽,粘贴格式就会不受影响。
    每次手工开启关闭paste模式将会比较麻烦,可以在_vimrc中为其设置一个快捷键,每次需要时按一下即可切换:set pastetoggle=<f12>
  2. 使用普通模式的"+p命令
  3. 插入模式输入<C-r><C-p>"+

6. 表达式寄存器

引用方式:"=
所有寄存器里最特殊的一个,用于计算表达式。
输入完该寄存器应用后,会在命令行里提示“=”,按需输入表达式,结果将会显示到光标处。

7. 其他寄存器

"% 当前文件名,包含文件路径。
"/ 上次查找的内容。
". 上次插入的内容。


参考:

  1. 《Vim实用技巧》
  2. vim help :help registers

相关文章

  • VIM寄存器

    VIM有两个地方可以保存临时数据 OS级别-剪切板 VIM级别-寄存器 VIM寄存器概述 寄存器是VIM用于保存临...

  • Vim寄存器与宏常用命令汇总

    Vim寄存器主要从复制与粘贴、宏两个板块总结。 Vim复制与粘贴 (一)用无名寄存器实现复制、粘贴和删除之前讲到过...

  • vim的内容拷贝到内存

    vim 中有寄存器的概念,拷贝的东西存放在寄存器中,寄存器名称统一以左双引号"开头,分为 有名寄存器: 名字为 "...

  • Vim 中的寄存器

    Vim 中的寄存器 计算机中通常所说的寄存器 Register 一般指的是 CPU 中的寄存器,用来暂存 CPU ...

  • vim 全选并复制到系统剪切板

    Vim 中的复制、删除的内容都会被存放到默认(未命名)寄存器中,之后可以通过粘贴操作读取默认寄存器中的内容。寄存器...

  • LinuxMint和Ubuntu(及其衍生版)中VIM没有系统剪

    博客地址:http://svend.cc 检查寄存器 打开vim,在normal模式下执行; 查看是否有+号寄存器...

  • vim拷贝粘贴总结(p、Shift+Insert、Shift+C

    [toc] vim 拷贝粘贴的三个类别 vim寄存器(只在当前文件有效)。查看方法: :reg 系统选择缓冲区(...

  • 日常折腾 - gedit插件

    虽然不怎么喜欢gedit(习惯了vim的编辑模式),但自己的vim系统寄存器无法使用,复制文本到系统时就得打开ge...

  • vim 从嫌弃到依赖(15)——寄存器

    在计算机里面也有寄存器,计算机中的寄存器是看得见,摸得着的实体,寄存器中存储需要经常访问的一些数据。而vim中也有...

  • Vim 里的 复制,粘贴

    Register: "* v.s. "+ Vim 里有两个特殊的寄存器: "* 和 "+. 其中,前者关联系统选择...

网友评论

    本文标题:VIM寄存器

    本文链接:https://www.haomeiwen.com/subject/jhsbqttx.html