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"。
参考链接: