如何给`makeprg`

时间:2017-07-26 06:19:26

标签: vim parameter-passing keymapping

我有一个构建脚本" 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])和&#39; i [nstall]&#39中的单个字符组成;分别

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

1 个答案:

答案 0 :(得分:3)

首先,没有<F7-a>符号,您无法同时按 F7 A 来定义触发的映射。您可以做的是映射序列,写为<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

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

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