前言
从2020年的vim笔记中摘选出来单独做内容的说明;
理解 vim 寄存器
在以前的笔记中只提到一点点,这里多做一些说明。 vim 不使用单一的剪贴板进行剪切、复制与粘贴操作,而是为这些操作提供了多组寄存器。当使用删除、复制与粘贴命令时,可以明确指定某一个进行操作. vim 的删除、复制与粘贴命令都会用到众多寄存器中的某一个。可以通过给命令加”{register} 前缀的方式指定要用的寄存器。若不指明,vim 将缺省使用无名寄存器。
看一些引用寄存器的例子,如果想把当前单词复制到寄存器 a 中,可执行”ayiw”,或者,可以用”bdd”,把当前整行文本剪切至寄存器 b 中。在此之后,既可以输入”ap” 粘贴来自寄存器 a 的单词,也可使用”bp”命令粘贴来自寄存器 b 的一整行文本,两者互不干扰.
复制专用寄存器(“)
当使用 y{motion}命令时,要复制的文本不仅会被拷贝到无名寄存器中,而且也被拷贝到了复制专用寄存器中,后者可用数字 0 加以引用。 复制专用寄存器,顾名思义,仅当使用 y{motion}命令时才会被赋值。换句话讲,使用 x、s、c{ motion}以及 d motion}命令均不会覆盖该寄存器。如果复制了些文本,可以确信该文本会一直保存于寄存器 0 中,直到复制其他文本时才会被覆盖。复制专用寄存器是稳定的,而无名寄存器是易变的.
有名寄存器(“a-“z)
vim 提供了组以 26 个英文字母,命名的有名寄存器。这意味着我们可以剪切(“ad{motion})、复制(“ay{motion})或者粘贴(“ap)多达 26 段文本。 用小写字母引用有名寄存器,会覆盖该寄存器的原有内容,而换用大写字母的话,则会将新内容添加到该寄存器的原有内容之后。
系统剪贴板(“+)与选择专用寄存器(“*)
当然,这个在windows/Linux里用的是比较多的,在mac上直接cmd+v就好了,没那么费事。如果想从 vim 复制文本到外部程序(反之亦然),则必须使用系统剪贴板. 如果在外部程序中用剪切或复制命令获取了文本,就可以通过”+p 命令(或在插入模式下用ctrl-r +)将其粘贴到 vim 内部。相反地,如果在 vim 的复制或删除命令之前加入相应的文本将被捕获至系统剪贴板。
表达式寄存器(“=)
vim 的寄存器通常被认为是保存一段文本的容器。然而,通过=号引用的表达式寄存器却是个例外。当从表达式寄存器获取内容时,vim 将跳到命令行模式,并显示提示符“=”。这时,我们可以输入一段 vim 脚本表达式并按Enter执行,如果返回的是字符串(或者可被强制转换成字符串的数据), vim 将会使用它。
参考
[1] Vim 7.2
[2] Practice Vim
[3] 感受Vim的强大:进阶技巧