Learn Vim Efficiently 3
这里介绍点命令、寄存器和宏。点命令比较有用,寄存器和宏比较鸡肋。
一、 点命令
点命令 .
可以重复你在vim中的改变。
1.1 change in vim
在vim中,究竟什么被视为一个改变?
简单的来说,从进入插入模式到退出之间的所有操作!
1.2 一个点命令的快捷使用方式
比如说,现在我们有这样一段文本:
1 | const int a = 1; |
现在我们想要将所有的int都替换为float:
\int<Enter>
- 这时你将定位到第一个int
cwfloat<Esc>
- change word改变一个单词,然后输入float
n.
- 继续下一个搜索,然后用点命令重复改变
点命令的最佳使用场景就是变量更名,当你修改完一个变量的名字,移动光标到下一个变量,然后应用点命令。
二、寄存器
在vim中有10种类型的寄存器,不过我并不打算全部介绍它们。
关于寄存器,我们要知道:
- 有哪些?
- 怎么往寄存器里存值?
- 怎么从寄存器里取值?
2.1 start by 4 types register
- 匿名寄存器:
""
- 拷贝寄存器:
"0
- 数字寄存器:
"1-9
和字母寄存器:"a-z
- small delete register:
"-
寄存器总是以双引号开头,后面跟着一个符号。
匿名寄存器,是我们最常用的寄存器。这里的常用,是它被vim使用,而不是我们主动显式地调用。之前讲的dd,yy,p
快捷方式都是往匿名寄存器里存值或取值。
拷贝寄存器,是我们使用y
操作符时关联的寄存器。注意yy
命令会同时拷贝匿名寄存器和拷贝寄存器,利用这点我们就能得到一个缓存。比如说先用yy
再用dd
,此时匿名寄存器被更新,如果想用第一次复制的内容,需要从拷贝寄存器拉值"0p
。
数字寄存器和字母寄存器都是常规寄存器,主要是往里面存值和取值。
samll ddelete register主要用于小单词的存取。当你diw
一个单词的时候,这个单词就会存在这个寄存器中。
2.2 寄存器存取值
对寄存器的操作都很简单,用双引号来调用一个寄存器,后面跟上你的命令。
比如,现在你有以下文本:
1 | const int a = 1; |
"ad3l<esc>
向左删除3个字符,存在寄存器a中j
移动到下一行"ap
从寄存器a中取值
三、宏
3.1 是什么?
宏可以看作一系列操作的录制,它能帮助你避免许多的重复劳动,在你需要的时候自动执行预先录制好的操作。
3.2 录制宏
如果要录制宏,当然需要一个能存储的宏的容器,在vim中,自然就是寄存器了。
录制宏
1 | q<寄存器名> |
结束录制
1 | q |
比如说,录制宏到寄存器4
1 | q4 |
之后,寄存器4会记录下你的每一个按键操作。
记得结束录制。
3.3 使用宏
使用宏也很简单,用@
调用存在寄存器里的宏。
1 | @<寄存器名> |
或者
1 | @@ Execute the last executed macros |
这个命令直接执行上一次录制的宏。
举一个例子:我们想要大写每一个单词
1 | hello |
With your cursor at the start of the line “hello”, run:
1 | qa0gU$jq |
The breakdown:
qa
starts recording a macro in the a register.0
goes to beginning of the line.gU$
uppercases the text from your current location to the end of the line.j
goes down one line.q
stops recording.
To replay it, run @a
. Just like many other Vim commands, you can pass a count argument to macros. For example, running 3@a
executes the macro three times.
Learn Vim Efficiently 3