Vim实用技巧笔记09
复制与粘贴
- 删除 delete
- 复制 yank
- 粘贴 put
- :registers命令可以查看寄存器情况
通常情况下,在讨论剪切、复制与粘贴这3组操作时,指的都是操作系统剪贴板。不过,在Vim的术语里,我们操作的是寄存器,而并非剪贴板
寄存器
Vim的删除、复制与粘贴命令都会用到众多寄存器中的某一个。我们可以通过给命令加"{register}前缀的方式指定要用的寄存器。若不指明,Vim将缺省使用无名寄存器
让我们看一些引用寄存器的例子,如果我们想把当前单词复制到寄存器a中,可执行 "ayiw,或者,可以用 "bdd,把当前整行文本剪切至寄存器b中。在此之后,我们既可以输入 "ap粘贴来自寄存器a的单词,也可使用 "bp命令粘贴来自寄存器b的一整行文本,两者互不干扰。
无名寄存器 ""
- x s d{motion} c{motion} y{motion}都会覆盖无名寄存器中的内容
复制专用寄存器 "0
- y{motion}命令专用的寄存器
黑洞寄存器 "_
- 有去无回,删除文本且不保存任何副本
系统剪切板 "+ 选择专用寄存器 "*
到目前为止,我们所讨论的寄存器都是Vim内部的。如果想从Vim复制文本到外部程序(反之亦然),则必须使用系统剪贴板
- "+p 从外部程序中用剪切或者复制命令获取了文本,粘贴到Vim内部
- C-r+ 插入模式下的命令,功能同上
linux X11视窗系统支持主剪切板 primary
Windows 和 Mac 没有主剪切板
- "+ "* 都代表系统剪切板
表达式寄存器 "=
- 可以计算数学公式
- 还可以使用Vim特定的函数和运算符。例如通过表达式寄存器来得到环境变量的值(例如"=$HOME)
- 输入表达式,然后 p 就可以了,插入模式下,C-r= 计算后值直接出现在文本中
其他寄存器(只读寄存器)
系统粘贴的一些小问题
- 如果vim没有集成系统剪贴板功能
- set autoindent 设置之后,从系统粘贴代码到vim可能会出现代码格式,缩进出现问题
- 粘贴之前使用:set paste命令,然后粘贴就会没有类似问题