vim剪贴板的使用
1. vim复制命令
1.1. 常用方法
- 复制当前行:
yy
复制自选区域: 先
v
进入visual模式,用kjhl
控制上下左右选择好要复制的区域,然后y
复制选中区域如果要按行选择的话,则使用[Shift-v]进入visual line模式即可
黏贴:
- 光标后黏贴:
p
- 光标前黏贴: [Shift-p]
- 光标后黏贴:
1.2. 其他用法
- nyy:n表示大于1的数字,复制n行
- yw:从光标处复制至一个单子/单词的末尾,包括空格
- ye:从光标处复制至一个单子/单词的末尾,不包括空格
- y$:从当前光标复制到行末
- y0:从当前光标位置(不包括光标位置)复制之行首
- y3l:从光标位置(包括光标位置)向右复制3个字符
- y5G:将当前行(包括当前行)至第5行(不包括它)复制
- y3B:从当前光标位置(不包括光标位置)反向复制3个单词
2. 使用寄存器实现丰富的剪贴板功能
vim提供了10类寄存器:
- 匿名寄存器
""
- 编号寄存器
"0
到"9
- 小删除寄存器
"-
- 26个命名寄存器
"a
到"z
- 3个只读寄存器
":,
".,
"%
- Buffer交替文件寄存器
"#
- 表达式寄存器
"=
- 选择和拖放寄存器
"*
,"+
,"~
- 黑洞寄存器
"_
- 搜索模式寄存器
"/
可在vim中通过:help registers
查看帮助,通过:reg
可以查看当前各寄存器中的值。
2.1. 匿名寄存器
使用d, c, s, x等删除字符的命令或者y等复制字符的命令时,被操作的字符会进入匿名寄存器""
。当你执行黏贴命令p时,黏贴的就是匿名寄存器里的值。
2.2. 编号寄存器
编号寄存器从"0
到"9
共10个,其中"0
保存这最近拷贝的字符串,"1
到"9
保存着最近9次删除掉的字符串。
- 当用户指定拷贝操作的寄存器(如
"ay
)时,该拷贝数据不会被写入"0
。 "0
寄存器很有用,比如我们copy了一段文本然后用它替换另一段文本。 这时默认匿名寄存器""
中的值就变成了被替换文本,如果还需要用copy的文本继续替换的话就需要"0p
了。
2.3. 小删除寄存器
不足一行的小删除则会被放到小删除寄存器中("-),起作用的删除操作符也包括s, c, d, x。 例如:
- dw # 删除一个词
- d9l # 删除9个字符
- cb # 向前更改一个词
与"0
寄存器类似,当用户指定寄存器并进行删除时,"-
不会被写入。
2.4. 命名寄存器
命名寄存器有"a
到"z
共26个,这些寄存器只有当我们指定时才会被使用。比如我们要复制一段文字,存入匿名寄存器"a
,只要使用v
选中这段文字,执行"ay
录制宏,这段文字就进入了"a
寄存器;然后使用"ap
即可黏贴这段文字。
2.5. 只读寄存器
只读寄存器共3个,它们的值是由vim提供的,不允许改变:
".
:上次insert模式中插入的字符串。使用.
命令可以重复上次操作,使用的就是".
寄存器。"%
:当前文件名,不是全路径,也不是纯文件名,而是从当前vim的工作目录到该文件的路径。比如你执行vim golang/gc.md
打开了一个文件,那么"%p
输出的就是golang/gc.md
":
:上次命令模式下键入的命令。使用@:
可以执行上次命令。
2.6. 交替文件寄存器
交替文件寄存器"#
存储着当前vim窗口(Window)的交替文件。交替文件(alternate file)是指 Buffer中的上一个文件,可通过Ctrl+^来切换交替文件与当前文件。
2.7. 表达式寄存器
表达式寄存器"=
主要用于计算vim脚本的返回值,并插入到文本中。当我们键入"=
后光标会移动到命令行,此时我们可以输入任何vim脚本的表达式。 例如3+2,按下回车并且p则会得到5。
2.8. 选择和拖放寄存器
选择和拖放寄存器包括"*
, "+
, 和"~
,这三个寄存器的行为是和GUI相关的。
"*
和"+
都是指系统剪切板(clipboard),例如"*yy
即可复制当前行到剪切板,以供其他程序中粘贴;其他程序中复制的内容也会被存储到这两个寄存器中,可以通过"*p
在vim中进行黏贴。- 在Mac下执行
:set clipboard=unnamed
会使得系统剪切板寄存器"*
和vim默认的匿名寄存器""
始终保有同样的值,即vim和系统共用剪切板。 - 有文本拖拽到vim时,被拖拽的文本被存储在
"~
中。vim默认的行为是将"~
中内容插入到光标所在位置。
2.9. 黑洞寄存器
所有删除或拷贝到黑洞寄存器"_
的文本将会消失。这是为了在删除文本的同时不影响任何寄存器的值。
2.10. 搜索寄存器
搜索寄存器"/
用于存储上一次搜索的关键词。在normal模式下按下/即进入search模式,输入关键字并按下回车即可。
- 该寄存器是可写的,例如:let @/ = "maniafish"将会把"maniafish"写入该寄存器。 下次使用
/
搜索时不输入搜索词直接回车便会搜索"maniafish"。
参考链接: