代码之家  ›  专栏  ›  技术社区  ›  TCSGrad

您在VIM中使用的最喜欢/最有效的宏是什么?

  •  2
  • TCSGrad  · 技术社区  · 15 年前

    我想知道Vim专家是如何在Vim中使用宏进行日常编码的,我有很多常用的自定义快捷方式/映射,但没有发现任何关于宏的好主意。

    它可能是您以前使用过的一个宏,可以极大地简化一个任务——我只需要一些关于如何在VIM中高效地使用这个特性的想法!

    5 回复  |  直到 15 年前
        1
  •  4
  •   Pierre-Antoine LaFayette    15 年前

    宏通常是一个“即时”的自动化工具。假设您有一个项目列表:

    apple
    orange
    banana
    grapes
    cantaloupe
    

    例如,您可以快速编写一个宏,使它们成为HTML列表。从单词apple的开头开始记录以下宏: i<li><Esc>A</li><Esc><CR> 进入寄存器1。

    <cr>是关键,因为它允许您跳到下一行,从而在宏执行中使用“count”修饰符,该修饰符提供多行宏执行。

    然后转到橙色的开头,使用4@1([count]@[register letter])将宏应用于其余条目以获得此结果:

    <li>apple</li>
    <li>orange</li>
    <li>banana</li>
    <li>grapes</li>
    <li>cantaloupe</li> 
    

    想象一下在200个项目的列表中使用它。节省时间没有?

    当然,这个例子是微不足道的,您可以通过搜索和替换来做到这一点,但是您可以想象更复杂的例子…

        2
  •  3
  •   gahooa    15 年前

    我使用宏来保存大量的临时自定义击键。但这是以个案为基础的。

    例如: 删除4个字符,插入模式,([]),退出插入模式,下移,后退四个空格。然后使用 . 重复一遍。

        3
  •  2
  •   Neg_EV    15 年前

    最近我在编辑C++代码时使用了一个宏。我有大约300个头文件,它们基本上是这样的:

    ... includes and other junk
    namespace foo {
       namespace bar {
          ... some classes and other code ...
       }
    }
    ... possibly more code
    

    我想添加另一个包含其他两个的名称空间。最终文件应如下所示:

    ... includes and other junk
    namespace top {
       namespace foo {
          namespace bar {
             ... some classes and other code ...
          }
       }
    }
    ... possibly more code
    

    很冗长,很容易出错。但使用VIM宏,它非常简单。只需打开所有需要更改的文件,然后记录:

    1. 搜索“命名空间foo”
    2. 在“命名空间顶部”上方插入一行
    3. 返回“namespace foo”行
    4. 单击“%”查找右大括号
    5. 在后面加上一行“”
    6. 用=a_重新格式化代码块
    7. 转到下一个文件:wn

    然后,可以在要更改文件的情况下多次运行宏。

    就我个人而言,我发现自己一直在使用录制的宏和可视块编辑命令来加快速度。首先,他们可能会有点棘手,把这个问题看作是在一个范围内的重复命令,可以使用VIM命令轻松地移动。但一旦你养成了在庄园里看到问题的习惯,他们就有机会随时为你节省时间。

        4
  •  1
  •   Rook    15 年前

    正如gahooa已经说过的,宏是解决临时性问题的快速方法。对于更持久的方法,可以定义映射或函数来执行…需要做什么。

        5
  •  0
  •   Sam    15 年前

    我喜欢用ctags和/或cscope标记我的文件,所以我有一个用于重新索引更改文件的键映射。

    例如,您正在项目栏中编辑foo.c,并做了一些更改。按下(魔术击键)Vim运行ctags-a-o foo.c

    如果你真的想变得更漂亮,你可以为每个项目创建一个单独的标签文件,还可以添加一个键映射来重新索引整个项目。

    CTAGS岩