在宏中退出 exe 模式
Exiting exe mode in a macro
我试图重新格式化一个大文件,其中涉及删除第 2 到第 n 个重复集,每次重复 2 到 100 行。
数据看起来像
element1.element2.element...field.comment
我想在第一个实例之后删除元素中的重复,所以我当然变得复杂了:)并做了一个类似
的宏
在宏中 Yanked 当前行的第一个元素以注册 p,然后处理行将第一个元素 Yank 到寄存器 o
然后做,仍然在宏中
:if (@p=!@o)|:.s/paste register p//g|else|:norm! j|endif
现在这工作正常,除了当它到达 @p<>@o
行时 :norm! j
部分停留在 :
模式直到我手动转义一次或两次然后执行 :norm! j
命令。
我用更简单的方法解决了这个问题,但想知道为什么它只在 else 部分不会离开 :ex 模式。
来自: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
我试图重新格式化一个大文件,其中涉及删除第 2 到第 n 个重复集,每次重复 2 到 100 行。
数据看起来像
element1.element2.element...field.comment
我想在第一个实例之后删除元素中的重复,所以我当然变得复杂了:)并做了一个类似
的宏在宏中 Yanked 当前行的第一个元素以注册 p,然后处理行将第一个元素 Yank 到寄存器 o
然后做,仍然在宏中
:if (@p=!@o)|:.s/paste register p//g|else|:norm! j|endif
现在这工作正常,除了当它到达 @p<>@o
行时 :norm! j
部分停留在 :
模式直到我手动转义一次或两次然后执行 :norm! j
命令。
我用更简单的方法解决了这个问题,但想知道为什么它只在 else 部分不会离开 :ex 模式。
来自: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