夜火笔记

初探vim中的寄存器与宏

2024-04-18
笔记 vim
7分钟
1314字

最近需要对一个项目做i18n,需要对很多字符串进行替换,总是复制来复制去的,很繁琐。

win+v 一定程度上缓解了来回找内容复制的问题,但是仍然不够方便。

于是想到了使用vim的命名寄存器来粘贴固定内容,后来想起了vim可以录制宏,可以替我做更多的工作,于是恶补了下这部分的知识。

之前仅仅是知道寄存器的概念和宏录制这个东西,从来没用过,这次记录下,方便以后查。

前置知识

vim中的选择,复制,粘贴。

vim中的选择

选择到指定字符 vf vt

1
xxx,欢迎您!

想选择 欢迎您

移动光标到

normal模式下

依次输入 vf!h,命令解释:    1. v 选择模式    2. f! 查找指定的字符,这里选择模式下就是选择到 包含了    3. h 将光标移动到前一个字符,不要

当然,对于这样简单的选择,也可以直接使用 vwhvt!,和上面vf!h的选择效果是一样的。

这里的 vt 不需要使用h,因为不包含最后的

选择html标签内部的内容 vit

1
<p>你好,欢迎您!</p>

想选择 你好,欢迎您!,即为p标签中的内容。

可以像上面说的,直接使用 vf!vf<h 都可以

也可以让光标移动到这一行中的任意一处,然后输入 vit,这是针对html标签的,直接选择html标签内部的内容。

选择单引号中的内容 vi'

1
<p>你好,'某某用户',欢迎您!</p>

想选择 某某用户,移动光标到 某某用户,然后输入 vi',即可选择单引号中的内容,不包含单引号。

想包含单引号,可以使用 va'

对于双引号vi",括号vi)等,操作都类似,不再赘述。

vim中的复制

yy是复制整行

y 是复制标记内容

配合上面的选择,就可以复制指定内容了。

如最开始的例子,想复制 欢迎您,移动光标到 ,然后依次输入 vf!hy,即可复制 欢迎您

这是选择期间可视化的,如果命令很熟,可以使用 yt!,用y复制代替v选择,直接就复制好了,简化操作。

删除同理,dt!

vim中的粘贴

p是粘贴,P是粘贴到光标所在行的前面。

需要注意的是:vim中的复制粘贴都是操作的寄存器,而不是系统的剪贴板。

寄存器

无名寄存器(默认寄存器),引用方式为""""p为粘贴无名寄存器的值,所有的复制和修改操作(x、s、d、c、y)都会将该数据复制到无名寄存器

0 为复制专用寄存器,引用方式为"0"0p为粘贴寄存器0的值

1-9 为逐级临时缓存寄存器,引用方式为"1"1p为粘贴寄存器1的值

在新的数据加入时,逐级向后推移。1 的数据复制到 2,2 的复制到 3,最后的 9 寄存器内容将会被删除

a - z 或 A - Z 为字母寄存器,引用方式同上。选中内容后,"ay 为将选中内容复制到 a 寄存器

查看寄存器

:reg 查看所有寄存器

:reg a 查看寄存器a的内容

宏录制

qa 开始录制宏到寄存器a

q结束录制宏

@a执行宏a

@@重复执行宏

实际使用

假设我现在有一个处理i18n的函数 i18n(key)

1
<?php echo i18n('key'); ?>

我先将这部分内容放入寄存器a,选中后"ay

假设我现有内容需要替换

1
<div>原文字内容</div>

最终想要的格式为

1
<div><?php echo i18n('原文字内容'); ?></div>

录制宏

我现在需要录制一个宏放入寄存器w,开启录制宏 qw

光标移动到字上,在字前,粘贴寄存器a的内容 "aP

操作后如下

1
<div><?php echo i18n('key'); ?>原文字内容</div>

光标后移一位,将光标放到字上

l

选择文字到字符<

vf<

光标向前一位,不框选<

h

删除原文字内容(删除会自动将内容复制到无名寄存器)

x

1
<div><?php echo i18n('key'); ?></div>

将光标移动到'key'中任意位置,选中内容key

vi'

粘贴

p

1
<div><?php echo i18n('原文字内容'); ?></div>

完成宏录制

q

使用宏

1
<div>这样格式的文字内容</div>

现在,碰到任何这样格式的内容,我只需要将光标移动到第一个文字上,执行寄存器w中的宏即可

@w

1
<div><?php echo i18n('这样格式的文字内容'); ?></div>

之前需要不停来回复制粘贴复制粘贴的内容,一下变得操作起来轻松又愉快了。

优化

为了更好的说明,我上面的录制操作,步骤稍微多了点。

其实可以先vit,选择标签中间的内容,x删除(复制),再粘贴代码进行替换,甚至使用命名寄存器将代码分成2部分存储,直接3个粘贴搞定。不过异曲同工,目的达到了就行。

本文标题:初探vim中的寄存器与宏
文章作者:夜火/xloong
发布时间:2024-04-18
Copyright 2026
站点地图