我正在尝试使用 vim 将汇编语言文件移植到新的汇编程序。新的汇编器不支持本地标签。所以我试图在每个本地标签之前插入标签名称。但是尝试使用寄存器后跟捕获组会导致“无效表达式错误”。
示例输入:
LABEL_NAME:
MOV SP,#STACK_POINTER
MOV R7,#12 ;WAIT LOOP (3)
12$: MOV R6,#255 ;TIME WASTER
11$: MOV R5,#255 ;MUST WAIT !!!!
10$: RESET_WATCH_DOG
DJNZ R5,10$
DJNZ R6,11$
DJNZ R7,12$
期望的输出:
LABEL_NAME:
MOV SP,#STACK_POINTER
MOV R7,#12 ;WAIT LOOP (3)
LABEL_NAME12$: MOV R6,#255 ;TIME WASTER
LABEL_NAME11$: MOV R5,#255 ;MUST WAIT !!!!
LABEL_NAME10$: RESET_WATCH_DOG
DJNZ R5,LABEL_NAME10$
DJNZ R6,LABEL_NAME11$
DJNZ R7,LABEL_NAME12$
当然,这有效:
:.,10s/\(\d\+\$\)/LABEL_NAME\1/
将标签名称拉入 registera
后,这:
:.,10s/\(\d\+\$\)/\=@a/
给我这个:
LABEL_NAME:
MOV SP,#STACK_POINTER
MOV R7,#12 ;WAIT LOOP (3)
LABEL_NAME: MOV R6,#255 ;TIME WASTER
LABEL_NAME: MOV R5,#255 ;MUST WAIT !!!!
LABEL_NAME: RESET_WATCH_DOG
DJNZ R5,LABEL_NAME
DJNZ R6,LABEL_NAME
DJNZ R7,LABEL_NAME
但是这个:
:.,10s/\(\d\+\$\)/\=@a\1/
只产生这个:
E15: Invalid expression: @a\1
我正在使用 gVim 7.3。理想情况下,我想知道为什么我不能在替换语句中使用寄存器扩展后跟捕获组扩展。但替代解决方案也将受到赞赏。