一份菜单

Vi和Vim宏教程:如何录制和播放

Vim宏-录制和播放
使用Vim Macro功能,可以在编辑器中记录和播放一系列动作。

本文使用两个详细的示例说明如何在Vi和Vim编辑器中执行记录和播放。

在Vim中录制和播放的高级步骤

  1. 通过按q开始记录,然后按小写字母命名宏
  2. 在Vim编辑器中执行任何典型的编辑和操作,这些将被记录
  3. Stop 记录 通过 pressing q
  4. 按@,然后按宏名称,播放录制的宏
  5. 要多次重复宏,请按:NN @宏名称。 NN是一个数字

示例1:使用Vim宏在文件内部生成序列号

1.启动sequence-test.txt文件以生成序列。

$ vim sequence-test.txt

2.进入插入模式并输入“1 .” as shown below

类型:Esc i,然后按1。

$ vim sequence-test.txt
1.

3.开始录制并将其存储在寄存器a中。

类型:Esc q,后跟一个

  • q indicates to start the 记录
  • a indicates to store the 记录s in register a
  • 当您执行q a时,它将显示“recording”在vi的底部。

4.将第一行复制到第二行以使两行带有1。如下所示

类型:Esc yy,然后按p

  • yy将复制当前行
  • p will 糊 the line that was just copied
$ vim sequence-test.txt
1.
1.

注意: Vim will still show 记录 at the bottom as shown below.

Vim记录信息
: Vim showing 记录 message at the bottom

5.增加数量。

类型:控制一个

通过将光标放在第二行,按Ctrl + a,将数字递增到2。如下所示。

$ vim sequence-test.txt
1.
2.

注意: vim will still show 记录 at the bottom.

6. Stop the 记录

类型:q

Press q to stop the 记录. 您’将会注意到,vim底部的录制消息现在已消失。

7. Repeat the 记录 98 times.

类型:98 @ a

  • 现在,通过键入98 @ a重复此工作
  • @a重复宏“a” 上e time.
  • 98 @ a重复宏“a”98次生成序列号1–100,如下所示使用宏。
Vim宏录制和播放
:使用宏在Vim中生成序列号

示例2:用不同的参数重复Vim宏

本示例说明如何执行具有不同输入的相同命令。即用不同的参数构架相同的命令。

在执行宏之前:change-password.sql

$ vim change-password.sql
Annette
Warren
Anthony
Preston
Kelly
Taylor
Stiller
Dennis
Schwartz

记录并执行宏后:change-password.sql

$ vim change-password.sql
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';

1.打开仅包含名称的change-password.sql。

$ vim change-password.sql
Annette
Warren
Anthony
Preston
Kelly
Taylor
Stiller
Dennis
Schwartz

2.开始录制并将其存储在寄存器a中。

类型:q a

  • q indicates to start the 记录
  • a indicates to store the 记录s in register a
  • 当您执行q a时,它将在vi的底部显示消息记录。

3.进入插入模式并输入ALTER USER

类型:I(大写i),然后是“ALTER USER ”

将光标放在第一行的任意位置,然后按I。这将带您到该行的第一个字符。输入ALTER USER

4.复制下一个单词(即名称)

类型:Esc w yw

  • 按Esc,然后按w转到下一个单词(name)。
  • yw,复制当前单词(name)。

5.转到末尾并输入IDENTIFIED BY‘

类型:Esc A,后跟” IDENTIFIED BY ‘”

  • 按Esc键,再按A键将光标移至该行的末尾,然后键入空格。
  • 类型IDENTIFIED BY‘

6.粘贴复制的名称

类型:Esc p

Press Esc, and then type p to 糊 the name that was copied in the step #4.

7.在最后填写报价。

类型:Esc A,后跟‘;

按Esc键,然后按A到行尾,然后‘;

8.跳到下一行并停止记录。

类型:Esc j,后跟q

  • j移至下一行。
  • q to stop the 记录

注意: vi底部显示的录制消息现在将消失。在此阶段,change-password.sql将如下所示。

Vim宏录制
: Vim Macro completed the 记录

9.用相应行中的参数重复宏

类型:8 @ a

  • 现在通过键入8 @ a重复此作业8次
  • @a重复宏“a” 上e time.
  • 8 @ a重复宏“a”如下所示,自动完成了8次该行的其余部分
Vim宏播放录制
:Vim宏播放完成

推荐读物

Vim 101骇客,作者:Ramesh Natarajan。我是一个命令行迷。因此,我自然很喜欢Vi和Vim编辑器。几年前,当我在Linux上编写大量C代码时,我常常阅读所有可用的Vim编辑器技巧和窍门。根据我的Vim编辑器经验,我’已编写了Vim 101 Hacks电子书,其中包含有关各种Vim高级功能的101个实用示例,这些将​​使您在Vim编辑器中快速高效地工作。即使您已经使用Vi和Vim编辑器好几年了,而且还没有读过这本书,也请您帮个忙,并阅读这本书。 Vim编辑器的功能会让您惊讶。

很棒的Vim编辑器文章

以下是一些很棒的Vi / Vim编辑器 教程 对您可能会有所帮助。

注意:subscribe to 极客的东西不要错过任何未来 Vi和Vim编辑器提示和技巧.

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 41 评论… 加一 }

  • 袋熊 2009年1月16日,上午2:25

    嗨,谢谢你的g
    如果你有时间 。在vim中写寄存器–非常有趣且有问题的主题。非常感谢!

  • 家常便饭 2009年1月16日,上午8:03

    是的,感谢您提供这些提示。

  • Snucko 2009年1月16日,下午2:53

    很棒的文章,谢谢你的提示

  • 霍华德 2009年1月19日,上午6:55

    (注意:这是我在Linux Today上开始的有关本文的线程的后续内容)

    While I find this to be a very good introduction to macros in Vim, I must point out that vi does not have macro facilities. I 真实ize that 99% of Linux distros soft-link vi to Vim, but that doesn’使Vim和vi相同。

    我们当中有很多人使用“real”vi在我们的日常工作中(我的团队,其中一个),虽然我们大多数人都知道vi的局限性,但仍有一些不’t。他们阅读了这样的文章,希望了解有关平台上主编辑器的更多信息,只是发现这样做没有’t apply to them.

    我对本系列文章的作者的建议是验证在vi中有效的内容和在Vim中仅有效的内容,并相应地更改标题和文章。 IE:这篇文章的标题应该是:“Vim宏教程:如何记录和播放”.

    如果你不这样做’不知道vi有什么功能,请安装“nvi”包。在基于Debian的系统上,这就像运行一样简单“apt-get install 英伟达” as root, or “sudo apt-get install 英伟达”如果您使用sudo。然后,您可以通过运行“nvi”在控制台提示符下。

  • 萨提亚·莫西(SathiyaMoorthy) 2009年1月20日,上午6:45

    感谢您指出。

    I thought everybody is using vim, so mentioning vi / vim would be the same. But 真实ized that vi is still used, 通过 reading your comment.
    我会照顾的。

    但是我相信,将自己升级到vim是更好的选择。

  • 霍华德 2009年1月20日,下午12:56

    萨提亚·莫西(SathiyaMoorthy),我没有选择将vi更新为Vim的选项。我在一家非常大型的美国公司工作,实际上有数百个Sun Solaris服务器。服务器附带vi作为标准编辑器,而Vim不是’即使在允许的软件列表上。我无法升级它们。虽然我非常了解vi,但我的团队中的一些成员却不了解vi,并且不断在Internet上寻找帮助他们的教程。这就是为什么我发表我的第一条评论。

    我对Vim非常熟悉,已经使用了10多年。我喜欢Vim,并在我的个人开发服务器上使用它(主要用于编写shell和Perl脚本,但是我还在该盒子上维护了一些C程序),更不用说在我的所有Unix和Linux(和Windows!)计算机上了。相信我,如果我可以将这些盒子从vi升级到Vim,我会的。

  • 安德鲁 2009年2月20日,下午2:01

    这是一个很好的技巧,我已经使用vim多年了,这是在代码中进行重构时的最爱

  • 诺顿 2009年5月22日,上午7:20

    如何保存它(宏)?

  • 帕拉塞塞亚 2009年8月18日,上午2:14

    这是u编写的不错的教程。
    我要感谢你。
    如果你有时间,我想要一些vim的东西

  • Vim.org上的模态 2009年12月16日,下午3:03

    {CM Norton},是的,您可以保存一个宏。它’只是一个文本字符串。

    Say you record a macro into register a then you can 糊 the recorded sequence used 通过 pasting register a ( “ap ). The 糊d output helps you to see the actual macro sequence recorded. It’s also handy if you’ve recorded a long macro and made a mistake as you can just past the sequence, correct the 糊d sequence, and yan it back into the register you used ( “aY or “ayy ).

    在vimrc文件中,可以使用宏设置寄存器。

  • 杰扎什 2010年1月5日,下午2:38

    甜言蜜语,谢谢!

  • 贝帕拉斯 2010年4月12日,晚上11:58

    你好,

    这是非常好的文章。
    谢谢你

  • 大卫·里弗斯 2010年7月7日,上午12:16

    通过一些练习,这无疑将非常有用!

  • 苏拉吉 2010年8月3日,上午10:04

    哇,这篇文章很棒而精彩。 。 。
    每个技巧的这些极客知识都很精彩,可以在OS上执行快捷方式….

  • 拉里 2010年9月7日,下午3:31

    霍华德在上述评论中说香草六不’支持宏,那’只是不正​​确。 vi确实支持宏,但不支持’t支持使用q键录制宏。

    In vi, create a line that says this. The ^[ is a literal 退出ape character and you’将最有可能必须键入ctrl-v,然后按Exc键。

    o#^ [71a-^ [j0

    确保光标在该行上并键入:

    “udd

    您’ve just deleted the line and stored it in buffer u as a macro. 您 can play it back at any time in normal mode 通过 typing:

    @u

  • 拉里 2010年9月7日,下午3:32

    hem… that’Esc键,而不是Exc键。

  • 匿名 2011年3月18日,上午12:34

    嗨,拉梅什,
    真实ly a powerful method, i wondered if we have some option to save these macro’s.

  • 保罗 2011年3月18日,上午10:22

    谢谢!我偶然发现了q,但是没有’不知道如何使用它。

  • 克里希纳萨米 2011年3月26日,下午6:14

    98 @ a E16:无效的范围错误显示linux vi编辑器

  • 纳西姆丁·安萨里(Nasimuddin Ansari) 2011年5月26日,上午1:53

    嗨SathiyaMoorthy,

    感谢您的踩踏和演奏步骤。只需按照您编写的步骤来学习此有用的提示,真是太神奇了。感谢您为此付出的努力和时间。

  • 匿名 2011年7月1日,下午3:40

    I find your examples 真实 confusing. 您 put “esc” before stuff. The “esc”用于从输入或替换模式退出回到命令模式。 vi / vim / gvim处于命令模式,除非您放入“input mode”(命令:a,A,i,I,o,O)或“replacement mode” (commands: c,s,R).

    您 start off with an “esc” but you are in “command mode”已经,您应该使用“esc” to leave 输入模式.

  • 贾拉尔·哈吉霍拉马利 2011年7月11日,上午3:19

    非常感谢这些提示

  • 萨拉夫·普雷特·恩杜 2011年8月16日,上午5:54

    @SaathiaMoorthy好,我首先要感谢您提供了如此出色的教程。但是,我的问题’我面对的宏是在录制宏时,如果我‘yank’ a line and ‘paste’在另一个地方成功完成。但是,当我播放宏时,当然是同一行‘yanked’ but is never 糊d anywhere . Also the macro stops at first run 上ly and shows ‘NN lines yaked’ at the bottom. I’m使用旧的软呢帽(uname -a表示它是Redhat 4)。如果可以找出这个问题,那就太好了。

  • 卡兹 2011年10月27日,上午2:55

    整洁的解释。竖起大拇指!

  • 雷克什紫外线 2011年11月1日,上午4:53

    萨拉夫
    你在哪里粘贴线
    ->same file
    ->differnt file
    ->are u using “:e filename” to open the file
    i have a tip for you, when you want to copy multiple things from differnt place and need to 糊 at multiple locations, then use “ay or “ap(此处复制的内容保存在寄存器a中,类似地,您可以复制到不同的寄存器中,稍后通过引用名称来使用它”)。我希望小费是有益的。

    雷克什紫外线

  • 阿拜 2011年11月2日,上午1:17

    98 @ a E16:无效的范围错误显示linux vi编辑器

  • 罗伯特·沙利文 2011年11月10日,上午10:08

    感谢您的有用提示。我会添加一个提示,如果您没有,那就使用以下命令’确保使用什么寄存器存储宏:
    :reg

    谢谢!

  • 达比 2012年3月7日,上午11:30

    I 真实ize you are just teaching a demo 上 macros, but instead of writing a macro to change the change-password.sql file, I’d这样写。

    :g /^.*.$/ s //其他用户& IDENTIFIED BY ‘&’;/

  • 查尔斯 2012年5月14日,上午10:30

    在最近几天的某个时候,宏调用已退出。例如:new创建一个
    窗口和“ap是在该窗口中显示宏a。要么“mp显示宏m。
    “ap不执行任何操作。 :reg显示所有寄存器,所以我知道它们仍然存在。
    我做了些什么来禁用“ap?
    非常感谢你!
    Cjharles

  • nish 2012年6月2日,下午4:35

    Sathiyamoorthy,

    只是想对这个惊人的文章表示感谢。它节省了我很多次的体力劳动。

  • 潘卡 2012年6月13日,上午6:49

    谢谢,不错的方法…

  • 沃尔特 2012年9月12日,上午9:38

    非常感谢

  • 转基因 2013年3月24日,下午6:51

    您的网站太棒了-我总是很惊讶关于Linux和网络的任何话题都对您有帮助。保持出色的工作

  • 2013年3月28日,下午11:42

    非常感谢这个帖子!我不仅学到了录制宏的知识,还学到了ctrl + a增量命令! Vim永不停止吹我。

  • 雷克什紫外线 2013年3月29日,晚上9:50

    if the macro fails the whole 记录 fails, this is 上e big drawback

    例如,如果宏找到一个模式“b”排成一行并替换为“d”然后转到下一行。如果我们运行宏10次,它将停止在第三行本身。
    对于宏无法满足条件的这种情况,有人能解决吗?

    a b c
    a b c
    一个
    a b c
    a b c
    a b c
    a b c

  • 苏拉提 2013年4月9日,下午5:19

    非常感谢出色的教程。这对我很有帮助。我还在您的博客上找到了其他一些有用的文章。

  • 吉列尔莫 2013年6月3日,上午11:33

    非常感谢您!这非常有帮助。

  • 斯里尼瓦斯 2013年9月29日,上午4:07

    非常感谢。这对我很有帮助。

  • 萨利纳斯 2013年12月20日,上午6:45

    Thank you, 真实ly useful.

  • 利塞伊尔 2015年4月28日,上午3:39

    嗨,总是欢迎有一个明确的例子ðŸ™,

    问:是否可以在现有文本中添加项目符号编号?即迅速列出清单?
    I tried using column selection (CTRL V) but i was stopped when i tried to increment the selection that I just 糊d :/

  • 贾布尔 2015年11月2日,上午8:58

    I ran across this page while looking for a way to include commands for 上e specific file. I use 英伟达, and I have a data file I use as a TODO list, and whenever I edit it, I always set the same two commands:

    :set ignorecase
    :map = kmwj:.m $ ^ M’w

    I’m hoping to find a way to automatically define these two whenever I open the file in 英伟达.

    的建议“upgrade”vim是有问题的,因为vim缺少很多vi’我依赖的功能。一世’自1983年以来一直使用vi,而当我使用vim时,我不可避免地会遇到一些问题’我正在做一个编辑,命令只是做’t exist.

    When that happens, the path of least resistance has always been to install 英伟达 and ditch vim, so I never can remember what missing functionality I had encountered. It usually 上ly happens shortly after I begin using a newly installed system.

发表评论