寄存器
"ayiw
把当前单词复制到寄存器a中
"ap
把寄存器a的内容插入到当前行的光标之后
:put a
把寄存器a的内容插入到当前行的下方,无论是字符还是行。
:reg "0
查看复制专用寄存器的内容
1. 无名寄存器("
):当使用x、s、d{motion}、c{motion}、y{motion}
及其对应的大写命令都会覆盖无名寄存器的内容。
2. 复制专用寄存器("0
):仅使用y{motion}
才会被赋值。
3. 有名寄存器("a---"Z
):用小写字母引用有名寄存器,会覆盖该寄存器的原有内容;而使用大写字母,会将新内容添加到该寄存器的原有内容中。
4. 黑洞寄存器:"_d{motion}
会直接删除文本且不覆盖无名寄存器内容,这才是真正意义的删除。
5. 系统剪切板("+
)和选择专用寄存器("*
):以上寄存器针对于vim内部的,如果要将文本内容复制到其他应用程序,就要用到系统剪贴板。
6. 表达式寄存器("=
):在插入模式下,输入<C r>={表达式或者一个变量i}
就会插入表达式的值或者变量i的值。
7. 其他寄存器:只可以读。
寄存器 | 内容 |
---|---|
"% | 当前文件名 |
". | 上次插入的文本 |
"/ | 上次查找的模式,可用:let 赋值 |
": | 上次执行的Ex命令 |
复制与粘贴
<C r>{register}
插入寄存器的内容到文本
xp
互换该字符与后一个字符
ddp
互换该行与下一行
yyp
复制该行到下一行
宏
重点是宏中的每条命令都可被重复执行!
- 录制宏:
q{register}
保存宏到寄存器。再按q
停止录制宏。 - 宏执行:
{number}@{register}
执行n次宏。@@
重复执行上次宏。 - 并行执行:
:normal @{register}
在高亮选区中的每一行上执行宏。:%normal i//
注释所有行,符号%代表整个文件范围。 - 追加命令给宏:
q{大写字母}
如qA
给寄存器a继续添加宏。 - 编辑宏:由于宏都保存在寄存器的内容中,只需改变寄存器的内容,就可以改变宏。可以用
:let @a={内容}
直接给a寄存器赋值。也可以这样:
- 使用
put a
或者"ap
将寄存器内容输出到文档中; - 修改完后,
"ay$
保存到a寄存器中。
- 使用