如何为 `makeprg` 提供可变参数

How to give variable arguments to `makeprg`

我有一个构建脚本 "maker",我打算将其设置为 makeprg。该脚本有两个参数:flag_verboseflag_install,前者建议是否给出详细输出(对于每个程序),后者如果构建成功则导致安装。

现在我想设置一些按键映射,例如: <F7-(a/d/j/z/i)> :make <return> :copen 在这里,我想对制造商脚本提出一个论点。 flag_verboseflag_install 分别由 (a[apt}/d[x]/j[avac]/z[all]) 和 'i[nstall]' 中的单个字符组成。

所以基本上我想根据 <FN-x> 键击为脚本提供不同的参数,x 是不同的标志。 我可以在 vimrc 或 vimscript 中设置这样的功能吗?如果是,怎么办?

首先,没有 <F7-a> 符号,您不能定义通过按 F7A 触发的映射同时。您可以做的是映射 序列 ,写为 <F7>a.

因此,您可以定义以下一组映射:

nnoremap <F7>a :make a<CR>:copen<CR>
nnoremap <F7>d :make d<CR>:copen<CR>
...

这可以通过元编程来简化:

for s:arg in ['a', 'd', 'j', 'z', 'i']
    execute printf('nnoremap <F7>%s :make a<CR>:copen<CR>', s:arg)
endfor

但我会选择这个解决方案,它准备了不完整的命令行并将光标定位在将放置参数的位置。有了这个,你只有一个映射,并且有可能不传递或传递多个参数。缺点是您还必须按 Enter 来启动命令:

noremap <F7> :execute 'make '<Bar>copen'<Left><Left><Left><Left><Left><Left><Left><Left>