Learn Vim Efficiently 3

这里介绍点命令、寄存器和宏。点命令比较有用,寄存器和宏比较鸡肋。

一、 点命令

点命令 . 可以重复你在vim中的改变。

1.1 change in vim

在vim中,究竟什么被视为一个改变?

简单的来说,从进入插入模式到退出之间的所有操作!

1.2 一个点命令的快捷使用方式

比如说,现在我们有这样一段文本:

1
2
3
const int a = 1;
const int b = 2;
int c = 3;

现在我们想要将所有的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
2
3
4
5
hello
vim
macros
are
awesome

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.

作者

Desirer

发布于

2023-11-22

更新于

2023-11-24

许可协议