在宏

时间:2015-08-06 06:32:29

标签: vim viml

我有一个大文件,我试图重新格式化,包括删除第2到第n个重复集,每个重复2到100行。

数据看起来像

element1.element2.element...field.comment

我想在第一个实例之后删除元素中的重复,所以我当然很复杂了:)并且做了像

之类的宏

在当前行上的宏Yanked第一个元素中注册p然后处理行将第一个元素拖入寄存器o然后执行,仍在宏中

:if (@p=!@o)|:.s/paste register p//g|else|:norm! j|endif

现在这个工作正常,除非它到@p<>@o :norm! j部分保持:模式的行,直到我手动转义一次或两次然后执行:norm! j命令。

我以一种更简单的方式解决了这个问题,但是想知道为什么它只是在其他部分它不会离开:ex模式。

1 个答案:

答案 0 :(得分:2)

来自:help norm

:norm[al][!] {commands}                 *:norm* *:normal*
        ...

        This command cannot be followed by another command,
        since any '|' is considered part of the command.

        ...

        An alternative is to use |:execute|, which uses an
        expression as argument.  This allows the use of
        printable characters to represent special characters.

        Example: >
            :exe "normal \<c-w>\<c-w>"

所以这可以解决问题:

:if (@p=!@o)|:.s/paste register p//g|else|:exe "norm j"|endif