Vim - 寄存器
Vim - 理解寄存器
Section titled “Vim - 理解寄存器”Vim 提供了一组寄存器,它们本质上是文本的存储位置。把它们想象成多个命名的剪贴板。这个特性对于暂存(复制)、删除和粘贴文本非常有用,尤其是在处理多段文本或跨不同文件时。
- 将文本暂存(复制)到寄存器
- 从寄存器粘贴文本
- 列出可用寄存器及其内容
- 探索不同类型的寄存器
将文本暂存到寄存器
Section titled “将文本暂存到寄存器”要将文本暂存到特定寄存器,请在暂存命令(y)前面加上 "(双引号),后面跟着寄存器的名称(一个字母、数字或符号)。如果省略寄存器名称,Vim 会使用“无名”寄存器。
语法:"<register-name><yank-command>
例如,将当前行暂存到寄存器 a 中:
"ayy将当前单词暂存到寄存器 b 中:
"byw类似地,使用 d 删除文本或使用 c 更改文本也会填充寄存器。例如,"add 会删除当前行并将其存储到寄存器 a 中。
从寄存器粘贴文本
Section titled “从寄存器粘贴文本”要从特定寄存器粘贴文本,请在粘贴命令(p 或 P)前面加上 " 和寄存器名称。
语法:"<register-name><paste-command>
例如,将寄存器 a 的内容粘贴到光标之后:
"ap将寄存器 b 的内容粘贴到光标之前:
"bP列出可用寄存器
Section titled “列出可用寄存器”要查看所有寄存器的内容,请使用命令:
:registers或其更短的别名:
:reg你也可以显示特定寄存器,例如,查看寄存器 a、b 和 0:
:reg a b 0此命令非常有用,可以查看有哪些文本可供粘贴。
Vim 支持几种类型的寄存器,每种都有特定的行为:
无名寄存器(")
Section titled “无名寄存器(")”用 "" 表示(或者仅仅是不指定寄存器)。这是默认寄存器。任何使用 y 暂存或使用 d、c、s、x 删除的文本,在未指定寄存器时都会存入此处。未指定寄存器名称的 p 或 P 会从此寄存器粘贴。
命名寄存器(a 到 z)
Section titled “命名寄存器(a 到 z)”有 26 个命名寄存器,从 "a 到 "z。当你使用小写字母时(例如,"ayy),寄存器内容会被覆盖。当你使用大写字母时(例如,"Ayy),暂存的文本会被附加到该寄存器的现有内容后面(例如,如果寄存器 a 包含 “hello”,使用 "Ayy 暂存行 ” world” 会使寄存器 a 包含 “hello\n world”)。这非常适合收集多段文本。
编号寄存器(0 到 9)
Section titled “编号寄存器(0 到 9)”这些由 Vim 自动管理:
- 寄存器
"0(暂存寄存器):包含最近一次y(暂存)命令的文本。 - 寄存器
"1到"9(删除/更改历史记录):"1包含最近一次删除或更改命令的文本(除非它非常小,小于一行,且不涉及行级删除)。"2包含倒数第二次删除的文本,依此类推,直到"9。这形成了较大删除操作的历史记录。
这对于恢复最近删除的文本很有用。例如,如果你使用 dd 删除了一行,然后又用 dd 删除了一行,你可以使用 "2p 粘贴第一行删除的文本,并使用 "1p 粘贴第二行。
这些寄存器提供信息,不能直接写入(尽管有些会自动更新):
| 寄存器 | 描述 |
|---|---|
"% | 当前文件名。 |
"# | 当前窗口的备用文件名。 |
": | 最近执行的 Ex 命令(命令行命令)。 |
". | 最后插入的文本。(在插入模式下使用 Ctrl-R . 或在普通模式下使用 ".p 时非常有用) |
"/ | 最后搜索的模式。 |
- 黑洞寄存器(
"_):暂存或删除到此寄存器的任何文本都会被丢弃。如果你想删除文本而不影响无名或编号寄存器,则非常有用(例如,"_dd)。 - 系统剪贴板寄存器(
"*和"+):如果 Vim 编译时支持剪贴板,"*通常指 X11 selection(主剪贴板,常用于鼠标中键粘贴),"+指系统范围的剪贴板(与 Ctrl+C/Ctrl+V 一起使用)。将当前行复制到系统剪贴板:"+yy。从系统剪贴板粘贴:"+p。这对于与其他应用程序交互极其有用。参见:help clipboard。 - 表达式寄存器(
"=):允许你评估一个表达式并使用其结果。当你在普通模式下输入"=(例如用于粘贴)或在插入模式下输入Ctrl-R =时,Vim 会提示你输入一个表达式。例如,在插入模式下输入Ctrl-R =strftime('%Y-%m-%d')<CR>会插入当前日期。参见:help expression-register。