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"。

参考链接:

results matching ""

    No results matching ""