0

我有一个大文件,我试图重新格式化,其中涉及删除每个副本 2 到 100 行的第 2 到第 n 个重复集。

数据看起来像

element1.element2.element...field.comment

我想在第一个实例之后删除元素中的重复,所以我当然变得复杂了:)并做了一个类似的宏

在宏中将当前行上的第一个元素拉到寄存器 p 中,然后处理行将第一个元素拉到寄存器o中,然后执行,仍然在宏中

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

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

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

4

1 回答 1

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
于 2015-08-06T06:56:25.390 回答