Vim实用技巧-寄存器

Vim实用技巧-寄存器

[TOC]

无名寄存器实现删除.复制与粘贴操作

在Vim中,我们操作的是寄存器,不是粘贴板.

交换字符

我们经常会拼错一些单词,假设情况如下

image-20190801001132350

F空格会定位到咱们之前打的一个空格,x命令剪切这个空格放到一个无名寄存器当中,p将此空格粘贴到从无名寄存器中取出然后放到新的位置.

因此xp的意思是讲两个字符交换一下位置.

交换行

x命令剪切当前的字符,而dd命令剪切当前的行放到无名寄存器当中.

image-20190801001559166

就如之前用xp一样,p总是粘贴到当前字符之后.

复制当前行

image-20190801001839057

可以这样复制当前行

我丢失了我的复制!!怎么办

1
2
3
copy_and_paste/collection.js
collection = getCollection();
process(somethingInTheWay, target);

假设我们想要复制collection到无名寄存器然后替换somethingInTheWay到我们复制的地方,

image-20190804035317892

比如我们先用yiw复制了collection然后在用diw删除了somethingInTheWay然后用p复制

但是我们法宣我们复制够来的是diw删除的东西,这是因为这些常规操作都会将删除掉的内容复制到无名寄存器.

深入了解vim寄存器

如果我们不想把其放入到无名寄存器当中,我们可以使用"aiw等操作,这可以把其放入到a寄存器当中.当粘贴的时候可以使用"ap等操作.

无名寄存””

我们最好在需要执行无名寄存器的时候用””,这样我们可以显式的使用它就不容易出错.

复制专用寄存器”0

当我们使用了y{commend}的时候,要复制的问题本不仅仅会被拷贝到无名寄存器当中,而且也被复制到了专用寄存器当中,后者的数字0加以引用.

复制寄存器,当使用y{commend}命令时才会被赋值.换句话说其他的命令不会被放到"0中.如我们签名的操作,我们可以用一下的操作来规避

image-20190804041333966

有名寄存器”a-“z

Vim提供了26个英文字母命名的有名寄存器.我们可以使用a-z26个寄存器,小写的寄存器会覆盖原有内容,大写虎在之前的内容之后拼接,

黑洞寄存器

黑洞寄存器是有去无回的寄存器,如果我们使用"_d{motion}Vim将删除该文本而不保存任何的副本.

image-20190804041813903

系统剪切板”+和专用寄存器”*

如果我们想将内容复制到Vim外部呢?

就要使用系统剪切板”+了.

如果在外面剪切了复制的内容,就可以时可用”p+命令将其粘贴到Vim内部.相反的如果在Vim复制删除之前使用”+,相应的文本就到了系统剪切板.

win和mac os没有主剪切板的概念,因此"+"*可以混合用.

表达式寄存器

"=当我们想从表达式寄存器中获取内容的时候,Vim将会跳转到命令行模式,并显示"=",这时候,我们可以输入一段Vim脚本并且按下<CR>执行.

其他寄存器

另外VIm提供了几种隐式寄存器,他们是只读寄存器

image-20190804042532510

用寄存器当中的内容可以替换高亮区域的文本

比如说在之前的例子中,我们可以进入修改模式后,执行操作粘贴来替换已经复制的内容.

image-20190804042709456

当我们在选择模式使用p的时候,首先会将其内容粘贴到位置,然后再把替换掉的内容

粘贴到无名寄存器当中.

交换两个词

比如说我们想交换两个词的位置.我们可以这样做

image-20190804043213671

首先我们先将chipe单词删除,然后记录下位置,跳转到fish,进入选择模式用p,注意这里的p会将fish替换后再将fish放入到无名寄存器当中..m回到原来的位置后粘贴.

将寄存器中的内容粘贴出来

p指定将寄存器中的文本粘贴到光标之后,作为补充,vim提供了P命令用于插入到光标之前.

xp为例子,寄存器仅仅包含一个字符.因此p命令直接将寄存器的内容粘贴到当前光标所在的位置之后.

我们怎样才能知道p命令的文本粘贴到当前字符之前还是之后呢?取决于这个指定的寄存器如何赋值.面向行的赋值或者删除操作,将创建面向行的寄存器;而面向字符的复制或者删除操作,则创建面向字符的寄存器.一般而言,使用p命令的结果会一目了然.

作者认为:但是在小范围的复制粘贴中使用,<C-r>{register}更加直观

粘贴面向行的区域

当要粘贴的内容来自于面向行的寄存器的时候,pP命令会把它们粘贴至当前行的上一行或者下一行.

Vim提供的gpgP命令同样可以将把文本粘贴到行或行后,复制多行文本的时候gP很管用.

image-20190805000529079

与系统剪贴板进行交互

谢谢您的鼓励~