[倚天屠龙记] vim 复制与粘贴

    

    对于任何一款文本编辑器而言,复制与粘贴都是最基本的功能,vim在此方面自然不甘示弱。事实上,得益于其丰富的移动命令,vim的复制与粘贴是相当快捷而高效的。

    vim的复制命令是y和Y,它是yank的简写,粘贴命令是p和P,是paste的缩写。y可以复制任何文本块,而Y是整行整行的复制,p是粘贴到光标之后,P是粘贴到光标之前。要查看这两个命令的帮助请分别输入:help y和:help p。
    y命令的基本使用方式是在其后加上移动指令,例如y$表示复制从光标当前位置到行尾的文本,y0则复制当前位置到行首(仍保持原来的字符顺序),y5l则复制光标后面的5个字符,yw则复制当前字符到本单词末尾。整行复制可以使用yy或者Y,例如yy和Y表示复制当前行,而5yy或者5Y则复制从当前行开始的5行内容,数字前缀代表重复的惯例在此处适用。使用:5,10y则可以复制从第5行到第10行的内容。

    复制了文本之后,移动光标到一个新的地方,按下p即可将刚才复制的内容粘贴到此处,P则是粘贴到光标之前的位置。

    想必所有人都对windows下记事本的鼠标拖动选择文本块印象深刻,vim虽然不提倡使用鼠标,但类似的功能照样不会缺失,这就是vim的一个非常有用的模式--Visual mode,该模式的使用方式是,先移动光标到文本块的起始位置,按v键,然后继续移动光标到文本块的末尾,vim会将光标经过的文本块高亮显示(这就是Visual-mode得名原因),这些高亮的文本块就处于选中状态,这时就可以对它进行复制或者删除了,按下y则复制选中的内容,按下d则删除它,如果按下Y,则将选中区块的每一行全部选中,即便首尾两行可能并未整行选中,因为用Y进行复制就是以行为单位进行复制。ggvGy从文件的开头复制到最后一行的开始处,因为G只能到最后一行的行首,所以这个命令不能复制全文件,但可以再加上移动到行尾的命令$就可以办到:ggvG$y。

    如果vim的复制与粘贴功能仅仅是以上这些,那么它与windows下的记事本相比没什么优势可言,后者只要动动鼠标就可以轻松实现同样的功能,但接下来vim的一个非常简单同时又非常重要的概念,就不是记事本这样的编辑器所具备的了,这就是寄存器。
    vim的寄存器不是指CPU的寄存器,它其实是一个存放文本的缓冲区,你可以将你复制的文本放到指定的寄存器中,粘贴的时候再将指定寄存器中的文本粘贴出来。寄存器的名称有0-9这十个数字命名的寄存器,还有a-zA-Z这26个字母的大小写所命名的52个寄存器,此外还有一些预置的有特殊意义的寄存器如 " : % # = * + ~ - / 这些特殊字符所代表的寄存器。
    寄存器的使用方式是在复制与粘贴的时候用引号指定所用的寄存器名称,例如将光标所在行的内容复制到寄存器a中的命令是"ayy或者"aY,粘贴时指定将寄存器a中的内容粘贴到光标之后则用命令"ap,任何时候如果想查看寄存器a的内容可以使用:reg a,或者:register a,如果想查看全部寄存器的内容则用:reg或者:register。寄存器的内容也可以手工修改,将寄存器a的内容修改为hello的命令是:let @a="hello",不过这对于只读的寄存器无效。
    接下来简单介绍一下各个寄存器的意义,要看详细的帮助文档请输入:help registers。
    引号寄存器是默认的,也就是你在进行复制与粘贴的时候如果没有指定寄存器,则使用的将是这个寄存器。除了复制之外,删除和改写命令也会将旧的文本写入到这个寄存器,这样你在删除了一段文本之后,到另一个地方直接粘贴,就可以实现剪切的效果。
    数字标号寄存器,0号寄存器存放了最后一次复制的内容(注意删除是不存放的,这是它与引号寄存器的区别),但是如果最后一次复制指定了别的寄存器,则它的内容不会更新。1-9这九个数字寄存器是用来做删除的历史记录用的,它们会记录最后九次的删除或者被改写的文本内容。1号寄存器存放的是最后一次删除或者改写命令的旧文本,前提是这个删除或者改写没有指定别的寄存器,并且修改的内容超过了一整行的内容(也就是包含换行符),而如果是在一行内部进行的小的删除操作,则删除的内容是存到了减号寄存器而不是1号寄存器。当执行了多次删除操作时,vim会将上一个寄存器的内容移到下一个寄存中去,1的旧文本存到2中,2的旧文本存到3中,依次此类,形成删除操作的历史记录。利用这个删除的历史记录功能,你可以完成一些排序操作,你只要按一定的顺序进行删除再按相同或者相反顺序进行粘贴,就可以达成目的。
    字母标号寄存器,a-zA-Z这52个寄存器是供用户使用的,它们的内容只有你明确指定使用它进行复制或者删除才会改变。往小写字母寄存器存入新的内容会覆盖原来的内容,而往大写字母寄存器存入新内容则是在对应小写字母寄存器中进行追加。
减号寄存器是小删除操作(删除内容不超过一行)专用的寄存器,当删除内容不足一行时,旧的文本会自动存入此寄存器,如果超过1行,则写入的是数字寄存器。
    冒号、点号、百分号和井号这四个寄存器都是只读的,你只能读取它的内容而不能进行修改,因为它们的意义是固定的。点号寄存器存放了你最后一次在插入模式下输入的文本块。百分号寄存器的内容是当前文件的名称,包含全路径,这样可以在编辑过程中通过"%p来将当前文件的名称粘贴到光标处。冒号寄存器存放的是执行的最后一条冒号命令,例如如果你刚刚通过:w命令保存了命令,则这个寄存器的内容就是w。
    接下来有一类非常重要的寄存器,星号寄存器*和加号寄存器+,这两个寄存器是vim与外部(比如系统)交换文本的缓冲区,如果你在浏览器中复制了一段网页上的文字,那么在vim的这些寄存器中也就保存了这段内容,你就可以将其粘贴到vim正在编辑的文件中来,同样你也可以将文件中的一段文本复制到星号寄存器,就可以在浏览器直接进行粘贴,粘贴的文本即是你刚才在vim中复制的文本。
    下划线寄存器_,也就是所谓的黑洞寄存器,它的特点是只进不出,任何存入此寄存器的内容都将被丢弃,你不能通过此寄存器读出存入的内容,这就是它被称为黑洞寄存器的原因。如果你在删除的时候不希望删除的内容放入任何一个寄存器,哪怕是引号寄存器,就可以使用在删除操作之前加上"_来达到目的,虽然这个看起来没什么用处。
    左斜杠寄存器/存储的是最后一次搜索的文本。
    此外,还有一个表达式寄存器,也就是等号寄存器=,它并不存储任何文本内容,并且也是只读的。按下"=,光标就会移动到命令行,然后你可以输入一个表达式,可以是通常的算术运算,也可以是vim特定的函数和运算符,完成后回车再按p键,vim就会将表达式的值粘贴到文件中。比如你想在文件中插入当前行的行号,就可以输入"=line(".")<CR>p,就会将光标所在行的行号贴到文件中,这里<CR>是回车换行符。
    此外还有一些其它的寄存器,如拖拽寄存器等,由于我不大使用,就不一一进行介绍了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值