Vim 练习 - 录制和播放宏 (macro)

Vim · hkliya · Created at · Last by hkliya Replied at · 2626 hits
1

关于宏

VIM用户可以使用宏来录制编辑动作过程,然后再播放以减少重复操作。
具体命令如下:

qa:开始录制宏,并将宏保存到寄存器a中(你也可以把“a”想象成宏的名称),开始后会在状态栏显示“recording”
q:停止录制
@a:播放寄存器a中的宏

练习一

编辑前

# Appending text:
The name "Vim" is an acronym for "Vi IMproved"
The name "Vim" is an acronym for

# Editing text:
Vim is a text editor originally released by Bram Moolenaar in 1991 for the Amiga
Trivia: Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga

# Deleting text:
Vim has a vi compatibility mode
Vim has a vi compatibility mode but when not in this mode Vim has many enhancements over vi

编辑后

将文件中的三对文本中的第二行都变得跟第一行一样。结果如下:

# Appending text:
The name "Vim" is an acronym for "Vi IMproved"
The name "Vim" is an acronym for "Vi IMproved"

# Editing text:
Vim is a text editor originally released by Bram Moolenaar in 1991 for the Amiga
Vim is a text editor originally released by Bram Moolenaar in 1991 for the Amiga

# Deleting text:
Vim has a vi compatibility mode
Vim has a vi compatibility mode

操作解释

qa 开始录制宏
j 下移一行
yy 复制一行
p 粘贴
j 下移一行
dd 删除一行
q 停止录制
2@a 播放两次

如果你这个比较简单,也没有什么实用价值,那就看下面这个吧。


练习二

编辑前

Annette
Warren
Anthony
Preston
Kelly
Taylor
Stiller
Dennis
Schwartz

编辑后

ALTER USER Annette IDENTIFIED BY 'Annette';
ALTER USER Warren IDENTIFIED BY 'Warren';
ALTER USER Anthony IDENTIFIED BY 'Anthony ';
ALTER USER Preston IDENTIFIED BY 'Preston';
ALTER USER Kelly IDENTIFIED BY 'Kelly ';
ALTER USER Taylor IDENTIFIED BY 'Taylor';
ALTER USER Stiller IDENTIFIED BY 'Stiller';
ALTER USER Dennis IDENTIFIED BY 'Dennis';
ALTER USER Schwart IDENTIFIED BY 'Schwart';

操作解释

q a: 开始录制宏,存储到寄存器a中
I “ALTER USER ”: 在行首插入“ALERT USER ”
Esc w yw:复制光标后的用户名
A “IDENTIFIED BY '”:到行尾输入IDENTIFIED BY ‘
Esc p:粘贴之前复制的用户名
A “';”:在行尾关闭引号
Esc j q:下移一行并结束录制
8@a:播放宏8次


参考资料:Vi and Vim Macro Tutorial: How To Record and Play


「软件匠艺社区」旨在传播匠艺精神,通过分享好的「工作方式」和「习惯」以帮助程序员更加快乐高效地编程。
共收到 7 条回复
644

你好,lee,我这里有个小问题想请教一下。有时候我在vim里面新建并编辑了一个含有中文的markdown文件,然后保存为[文件名].md。当我用其他的markdown IDE打开的时候里面的中文全是乱码。但是如果我反过来,现在IDE里面编辑含有中文的md文件,再在vim中打开,中文正常显示,而且也没有其他的附加代码,或者是说明编码格式的代码。这是为什么呢?

1
hkliya · #2 ·

#1楼 @gavin_weiming 你试一下:set encoding=utf-8,如果可以的话,加到 .vimrc 里。

30
lvjian700 · #3 ·

这个赞,一直不知道 Record 怎么用。第二个例子,我直接上正则

1
hkliya · #4 ·

#3楼 @lvjian700 正则是我的弱项,经常会刻意逃避,得找个时间练习一下。

30

#4楼 @hkliya 哈哈,不过这个 Record 例子很赞。 Record 一直不会用,有空学习一下。

正则

%s/\w\+/ALTER USER \0 IDENTIFIED BY '\0'

或者

%s/\(\w\+\)/ALTER USER \1 IDENTIFIED BY '\1'

  • \0 读取 matched 的字符
  • \1 读取 matched 的第一个 group
644

#2楼 @hkliya 正解!如果加上set encoding=utf-8,不同文件之间的编码问题算是解决了。但是我发现了另一个问题:工具栏那一块儿的中文变成了乱码!今天下午就是吃了encoding的亏啊,一不留神把_vimrc弄的一团糟。我尝试着把工具栏的语言调成英文set langmenu=en,结果在:help langmenu里面找到了一句让我崩溃的话{only available when compiled with the +menu and +multi_lang features}。这个的意思是如果你的Vim在出(编)生(译)的那一天没有添加这一个参数的话,那么他是不支持工具栏语言转换的。果不其然,我的Vim不行。于是,我暴力的通过set guioptions-=m将工具栏去掉了,2333! 谢谢Lee!

1
hkliya · #7 ·

#6楼 @gavin_weiming 哈哈,你玩的比我好,我都没折腾过这些选项。一直用的现成的,系统语言是英文。

需要 Sign In 后回复方可回复, 如果你还没有账号你可以 Sign Up 一个帐号。