使用源代码中的参数使vim运行脚本

时间:2019-06-04 21:41:23

标签: python vim

我将vim用作编写shell(bash)和Python程序的编辑器。通常,我需要将不同的参数传递给我开发的程序,以便以不同的组合进行测试/调试。对于C源代码,Makefile负责构建和运行素材,因此可以在下一个选项卡中对其进行编辑,每当我按F9键(执行“ make run”)时,都会将新参数传递给程序。没有用于脚本的Makefile之类的东西,因此我必须在Konsole的下一个选项卡中手动运行它们,更改参数,这似乎效率很低。

以Python为例,我在.vimrc中具有以下设置:

autocmd FileType python call Python_source()
func! Python_source()
    setlocal number cursorline
    setlocal shiftwidth=2
    setlocal foldmethod=indent

    map <F9> :w \| :!python %<CR>
    imap <F9> <Esc> :w \| :!python %<CR>
    ...
endfunc

有什么方法可以将参数存储在脚本源代码中(例如,在注释中),然后将其作为参数传递给脚本,如下所示:

#vimparameter='-f -a --bus 1'

在.vimrc中:

map <F9> :w \| :!python % $vimparameter<CR>
imap <F9> <Esc> :w \| :!python % $vimparameter<CR>

还是通过F9快捷方式执行的其他任何合理的方法来轻松更改然后将参数传递给脚本?

按照我的@Matt的建议,modelines可用于传递一些预定义的行作为命令的参数:

autocmd FileType python call Python_source()
...
func! LWargs()
    set lw=''
    doautocmd BufRead
    if len(&lw) > 0 && len(&lw) < 512
        return ' ' . &lw
    endif
    return ''
endfunc

func! Python_source()
...
    map <F9> :w \| :exe '!python' '%:p' . LWargs()<CR>
    imap <F9> <Esc> :w \| :exe '!python' '%:p' . LWargs()<CR>
...
endfunc

然后在源代码中可以使用以下参数预定义参数:

# vim: lw=--bus\ 10\ -f

应该设置“ modeline”。

1 个答案:

答案 0 :(得分:1)

您可以使用“模式行”来设置一些通常不使用的选项。 'lispwords'似乎很好(除非您是LISP程序员):这是一个局部缓冲区的字符串,仅用于lisp缩进。所以你可以在python中做

# vim: lw=-f\ -a\ --bus\ 1

import sys
print(sys.argv)

在vimscript中类似:

update
"ensure modeline is re-read
doautocmd BufRead
let l:args = (len(&lw) < 500) ? &lw : ''
exe '!python' shellescape(expand('%:p')) l:args