如何使用let保存包含多个命令的宏?

问题描述 投票:0回答:2

我目前正在学习用Vim编程,我决定制作一个宏来快速编译和运行C代码,所以我做了这样的:

save quickrun.c
!gcc quickrun.c -o quickrun
!quickrun

它按预期工作,没有问题,但后来我尝试将宏保存在 _vimrc 文件中,并且使用“let”仅使用一个命令保存其他宏没有任何问题,例如

let @a = '!gcc file.c'

但是我想保存所有3个命令以便在宏中编译和运行,我该怎么做?

vim
2个回答
3
投票

将一系列命令永久地放入寄存器中是一个非常奇怪的想法。通常,人们使用寄存器通过从某个脚本中提取部分代码或通过使用 q 记录按键序列来动态构建命令。问题是你只有 26 个具有固定名称的插槽,这对于存储通用命令序列非常不方便。


更常见的解决方案是设置用户命令或映射(或两者)。您可以在 vimrc 中定义一个命令(必须以大写字母开头!),如下所示:

command! QRun save quickrun.c | !gcc quickrun.c -o quickrun | !quickrun

条形符号 (|) 是 Vim 脚本中的命令分隔符,即在交互模式下也允许使用。之后,您可以像执行其他命令一样执行命令:
:QRun

。如果您觉得“QRun”太难输入,您可以另外定义一个键映射以节省几次击键。


此外,您可能应该修改脚本以使用参数,并摆脱“另存[as]”以支持简单的“更新”,等等。


3
投票
:!

,你需要以冒号开头。然后你就可以使用

|
:
let @a = ":save ... | !gcc ... \<CR> !quickrun\<CR>"

更好的解决方案是映射:

nnoremap keys execute ":save ... <bar> !gcc ... <bar> !quickrun<CR>"

但是对于 C 代码,您通常可以只使用 
:make

    

© www.soinside.com 2019 - 2024. All rights reserved.