VIM中的寄存器简介

  原来在vim粘贴从其他地方复制过来的文本的时候,一直用的shift + inert,那时就想,能不能够直接就像p那样粘贴,不必非得进入插入模式再来粘贴。后来看了《vim实用技巧》上关于vim寄存器的介绍,发现这里面大有文章,所以今天特意拿来和大家分享。

  首先对vim中的寄存器来进行个大致浏览,它主要分为这么几个部分:

    1.无名寄存器(" )

    2.复制专用寄存器 (0)

    3.系统剪贴板(X11视窗系统下的主剪贴板)(*)

    4.黑洞寄存器 (_)

    5.命名寄存器 (a-z)

    6.表达式寄存器 (=)

    7.其他的一些只读寄存器("/寄存器特殊)

  在详细了解这些寄存器之前,我们还得了解几个和寄存器有关的命令:

  0.各种复制粘贴命令说明

  本文中提到的d命令,y命令,c命令指的是和这个操作符相关联的命令集合,比如和y操作符相关联的一些命令如下:

1 yy          //复制当前行
2 yw         //当前光标下面的这个单词
3 yit         //复制一个html标签中的内容
4 yft         //复制当前行上光标到第一个t之间的所有内容
5
6 。。。

  1.在普通模式中使用寄存器

  在执行粘贴(p)命令,或者复制(y)和剪切(x,s,d,c和他们的大写)命令时,可以在前面加上 "{register}(其中那个{register}代表的是寄存器的名字),这样我们就可以使用相应的寄存器了,如果不加的话,默认使用的是无名寄存器。

  比如,%代表的是文件名寄存器,存放的是当前正在编辑的文件名,我现在打开了一个文件file2,并且正处于普通模式,如下图所示:

  

  此时如果我输入以下内容:

1 "%p
2
3 //表示将文件名寄存器的内容粘贴到当前行

  文件内容就变成这个样子了:

  

  2.在插入模式中使用寄存器

  在插入模式,当我们按下<CTRL> + R键,再加上相应的寄存器的名字,就可以插入寄存器中的内容了。

  比如=代表的是表达式寄存器,比如我在vim中输入如下命令:

1 i                     #进入插入模式
2 <C-r>=              #按下<Ctrl>+r键,再按等号键,此时就可以输入表达式了            

  此时vim的页面如下图所示:

  

  然后,此时光标跳到了vim最底下的任务条(具体这个地方我也不知道叫啥,就是ex模式输入命令的那个地方),在这里就可以输入vim脚本命令了,比如,我输入一个2+3。那么运算的结果5自动就会添加到主窗口,光标也会回到主窗口,如下图所示:

  

  3.查看当前寄存器的内容

  在ex模式下输入reg或者dis命令,就可以查看当前所有寄存器的内容了。运行的结果如下图所示:

  

  Ok,了解了这几个常用的关于寄存器的命令之后,我们再来了解一下vim中的各种寄存器。

  

  首先是无名寄存器,它用一个双引号(")来标识,这个是我们接触的最多的寄存器了,如果没有特别指定的话,复制(y),剪切(x,s,d,c和他们的大写),粘贴(p)命令都会将内容存放到这个寄存器里面,或是从这个寄存器里面来读取内容。

  

  第二个是复制专用寄存器,就是使用y命令复制的内容都会存放到这个寄存器中,比如这么一段文本:

1 printf("Hello, ");
2 printf("world!\n");

  我先把光标停留在第一行上,按下yy命令,将第一行复制,然后再移到第二行,按下dd命令,删除第二行。此时如果我们想要粘贴第一行的内容的话,直接按p是不行的,因为此时的p将引用无名寄存器中的内容,而它的内容已经被第二行的内容给覆盖了,所以此时就轮到复制专用寄存器大显身手了,此时如果按下这个命令:

1 "0p

  这时,将会粘贴复制专用寄存器中的内容。这里直接贴结果图可能看不出什么效果,那我就贴一下用dd删除了第二行后所有寄存器的内容给大家看看吧:

  从这里可以看出,无名寄存器保存的是dd命令删除的内容,而复制专用寄存器(0)保存的是y命令复制的内容。

  

  第三个是系统剪贴板寄存器(+)和X11视窗系统的主剪贴板寄存器(*)。个人认为这个比较常用,所以就先说了。众所周知,任何操作系统都有一个剪贴版板,而vim就是用+寄存器来代表这个剪贴版,我经常遇到的情况就是在浏览器中复制了一段文本,然后需要在vim中粘贴,感觉这时候这个+寄存器就大显身手了。比如在逛博客的时候看到别人的代码,如下所示:

1 def main():
2     print "Python is Fun"
3
4 main()

  直接复制就都复制到系统剪贴板了,这时打开vim想要粘贴到vim中,那么只需要这个命令就好了

“+p

  这样就把系统剪贴板中的内容直接贴进vim的缓冲区了,结果如下图所示(这个是Windows下面的gvim,所以没有主剪贴板这个寄存器,+和*表示的是一个寄存器):

  

  需要声明的一点是这个剪贴板需要vim在编译的时候加上clipboard这个选项,想要查看自己的vim有没有这个选项,只要打开vim,在ex模式下输入version命令,就可以查看自己的vim支不支持这个特性了,如下图所示:

  

  还有一个主剪贴板的寄存器,这个是在Linux下的X11视窗系统中才存在的东西,这个寄存器中存放的就是上次高亮选中的内容。这个由于我Linux上面自带的vim编译的时候没有添加clipboard选项,所以就不演示了。

  第四个要说明的就是黑洞寄存器,顾名思义,这个寄存器的功能和/dev/null设备非常地相似,就是将一切输入其中的东西都吞噬掉^ o ^。平常我们经常用x命令来删除某个字符,用dd命令来删除某行,其实这些都不是删除,是剪贴,真正的删除应该是这些命令:

1 "_dd         //删除某行
2 "_x          //删除光标下的字符

  

  第五个要说明的就是命名寄存器了,这个一共是a-z26个寄存器,分别用英文字母来表示。这个感觉主要需要讲的就是大写字母和小写字母的区别,当向寄存器中写入内容的时候(即复制或者剪切的时候),大写字母表示的是将当前要复制的内容追加到寄存器中,而小写字母表示的是将当前要复制的内容将寄存器中的原有内容给覆盖掉。这个可以类比于数据流重定向中的">"和">>"命令。

  举个例子,比如现在有个文件file2,其中的内容是这样

1 printf("Hello, ");
2 printf("World!\n");

  而a寄存器中的内容刚开始是这样:

  

  我在第一行上执行了 "Ayy命令之后,a寄存器中的内容就变成了这样,第一行的内容被追加到了寄存器中:

  

  接着我再在第二行上执行 "ayy命令之后,a寄存器中的内容就变成了这样,寄存器中原来的内容都被覆盖掉了:

  

  第六个要说的就是表达式寄存器,这个在前面已经举过例子了,可以在normal模式下按"=或者插入模式下按<C-r>,=来进入编辑vim表达式的模式,表达式运行的结果将被插入到vim的缓冲区中。这个我一般用来做运算,比如这样:

  

  第七个要说的就是一些存放特定信息的寄存器了,主要是下面这几个:

    7.1  当前文件名寄存器 (%)

    7.2  轮换文件名寄存器 (#)

    7.3  上次执行的ex命令 (:)

    7.4  上次查找的关键字 (/)

  这个举例子的话就是下面这个,我打开了两个文件file1和file2,然后切换到了file2,并进行了一次查找,查找了hello关键字,执行了两次reg命令,第二次reg命令执行结果如下图:

  

  最后四行分别就是对应我们上面讲的那四个寄存器,这里需要注意的的是关键字寄存器(/)比较特殊,它是可以通过let命令来更改的,具体的执行命令如下:

let @/="the"

  上面这条命令就是让查找的关键字变成了the。

 

  OK,这个就是全部内容了,如果大家想对vim中的寄存器中的内容有进一步的了解,可以参考《vim实用技巧》第10章,或者查看vim中关于寄存器的帮助文档。

:help registers
时间: 2024-10-29 03:15:46

VIM中的寄存器简介的相关文章

Vim中的寄存器

# Vim中的寄存器 ### 文件名寄存器---- 粘贴文件名 `"%p"` ### 查看vim中的寄存器---- 查看寄存器 `reg` 或 `dis` ### 详细介绍---- [VIM中的寄存器简介](https://www.cnblogs.com/bwangel23/p/4421957.html) 原文地址:https://www.cnblogs.com/jiftle/p/10303079.html

ubuntu下vim中内容拷贝到浏览器

在vim中编辑好了代码想要复制出来到浏览器或者其它地方.用yy复制后去别的地方粘帖发现根本不是当初复制的内容,非常头疼-- 这是由于vim中有它自己的一套剪贴板系统(clipboard).这套系统和ubuntu的剪贴板不互通. 见到非常多帖子说选中了想要的内容后,接下来按3个键"+y(引號.加号.字母y),这样要复制的内容就进入系统剪切板. 这仅仅说对了一半.-_- 1.首先要检查你的vim版本号是否支持+clipboard,命令是:version 或者能够输入:reg 查看是否包括×和+寄存器

ubuntu下vim中内容复制到浏览器

在vim中编辑好了代码想要复制出来到浏览器或者其他地方,用yy复制后去别的地方粘帖发现根本不是当初复制的内容,很头疼-- 这是因为vim中有它自己的一套剪贴板系统(clipboard),这套系统和ubuntu的剪贴板不互通. 见到很多帖子说选中了想要的内容后,接下来按3个键"+y(引号.加号.字母y),这样要复制的内容就进入系统剪切板. 这只说对了一半.-_- 1.首先要检查你的vim版本是否支持+clipboard,命令是:version 或者可以输入:reg 查看是否包含×和+寄存器 2.如

在VIM中使用宏macro

宏是一组命令的集合,应用及其广泛,包括MS Office中的word编辑器,excel编辑器和各种文本编辑器,Linux系统中最强大的文本编辑器之一的VIM同样支持宏操作,本节内容简要说明一下宏在VIM中使用,首先看下面几个宏的命令 q* 开始录制宏 q 停止录制宏 @* 执行宏 @@ 重复执行上次的@*命令一次 以上命令均是在VIM的一般模式(Normal)下使用的,其中*代表一个数字和单词字符,正则表达式规则是:[0-9a-zA-Z] :help recording 查看宏帮助 比如在一般模

vim中多标签和多窗口的使用

1.打开多个窗口 打开多个窗口的命令以下几个: 横向切割窗口 :new+窗口名(保存后就是文件名) :split+窗口名,也可以简写为:sp+窗口名 纵向切割窗口名 :vsplit+窗口名,也可以简写为:vsp+窗口名 vim -o file1 file2 ...  #水平打开多窗口, vim -O file1 file2 ...  #垂直打开多窗口, vim -d file1 file2 ...  #垂直打开多窗口,并且进行比较 vimdiff file1 file2 ..  #等同于上一句

谈谈Vim中实用又好记的一些命令

本文的目的在于总结一些日常操作中比较实用.有规律的Vim命令,而不致于介绍一些基础的Vim知识,比如几种插入模式,hjkl移动命令,dd删除本行,p粘贴 等等,故对Vim基本知识不够熟悉的请参见其他教程. 另外,强烈给大家推荐一款强大的Vim插件集“spf13-vim”,这是一款Vim插件集,它把常用的一些Vim插件结合起来了,满足大部分人的需求,开箱即用,而不用自己一个一个的去配置Vim插件,处理各种按键冲突等等,免去你花大量的时间用于配置Vim软件本身(比如博主最初学习Vim的时候),而不是

vim中project插件安装与使用

1 vim的project插件简介 project 插件的作用就是帮助用户以项目的形式管理源码. 2 下载project插件 a)官网:http://www.vim.org/scripts/script.php?script_id=69. b)本次安装csdn下载:http://download.csdn.net/detail/clevercode/9515570. 3 安装 (上传project-1.4.1.tar.gz 到/usr/local/src/vim/plugin/project目录

vim 中与编码有关的选项

在 Vim 中,有四个与编码有关的选项,它们是:fileencodings.fileencoding.encoding 和 termencoding.在实际使用中,任何一个选项出现错误,都会导致出现乱码.因此,每一个 Vim 用户都应该明确这四个选项的含义.下面,我们详细介绍一下这四个选项的含义和作用. 1 encoding encoding 是 Vim 内部使用的字符编码方式.当我们设置了 encoding 之后,Vim 内部所有的 buffer.寄存器.脚本中的字符串等,全都使用这个编码.V

Vim 中的变量赋值、引用与作用域

使用 let 进行变量赋值,echo 打印变量的值, unlet 销毁变量. 对于 Vim 选项还可用 set 来更方便地操作,比如 set {option}, set no{option}, set {option}?. 普通变量可以直接引用,环境变量要加前缀 $.寄存器变量要加前缀 @.Vim 选项要加前缀 &. 变量默认作用域取决于定义的位置,函数内则为函数作用域,外部则为全局变量. 赋值和引用变量时可以使用 b:,g:,l:,t: 等前缀来指定要操作哪个作用域的变量. 和其他编程语言一样