我的C代码在我用VIM编辑的LaTeX文件中,位于'm
和'n
标记之间。它包含LaTeX格式化命令,这些命令必须首先删除,等等。因此我需要使用管道(作为标准输入)将'm
和'n
之间的代码转换为我的外部Windows程序mergeC.exe
(用C编写),在必要的转换后,它应将正确的代码存储到文件PROG.c
中,其中PROG
应替换为VIM寄存器"p
的内容(例如,文件名应为SmithNormal.c
)。随后,应通过执行shell命令gcc PROG.c -o PROG.exe
编译PROG.c
。我希望将VIM命令(宏)存储到寄存器"g
中,以便写入@g
将执行这两个操作。
我是一个VIM初学者,我可以写:'m,'nw !mergeC
,这是可行的,但不知道如何将寄存器"p
中的名称传递给mergeC
(它应该像mergeC PROG
那样,PROG
将被存储到argv[1]
中)。
我已经试验过类似这样的命令
:'m,'n w !mergeC getreg('p')
这导致错误消息。
1条答案
按热度按时间pes8fvy91#
你就快到了。
:help getreg()
是检索寄存器内容的正确方法,但是在:!
之后,被求值的表达式只有%
和friends(参见:help cmdline-special
),因此getreg('p')
将被直接传递给shell,shell不知道如何处理它。为了在
:!
命令中获取getreg('p')
的内容,您需要:help :execute
:其在将结果与命令的其余部分连接之前评估
getreg('p')
,然后执行完整的命令。我没有你的
mergeC
命令,所以我即兴创作了一个人造的例子如下:现在,您的问题是将其放入寄存器中。我建议在这种情况下进行记录,因为由于所有引号和特殊字符,手动设置寄存器可能会被证明是复杂的: