如何编写函数或宏来将参数发送到gVim for Windows中的系统调用?

时间:2010-01-29 18:00:54

标签: windows macros vim

有用的命令

:r!date

在gVim for Windows(而不是cygwin的gVim)中没有那么有用,因为Windows有自己的日期功能,它不能满足我的需要。

所以,像

:r!c:\cygwin\bin\date

会很棒。但要输入的内容很多。考虑到我可能想以这种方式调用一些东西,编写一个函数会很好,我可以传递一个参数foo然后运行

:r!c:\cygwin\bin\foo

最好的方法是什么?它应该是 1)永久(存储在vimrc或一些启动文件中) 2)尽可能少地执行击键。任何有关创建映射的好地方的建议都值得赞赏。

谢谢!

2 个答案:

答案 0 :(得分:2)

我认为,这是一种日常使用的简单解决方案(特别是如果您使用的话) 只会对许多类似系统的命令中的一个感兴趣) 自定义同义词命令。

:command! -nargs=1 -range=% RR <line1>,<line2>read! c:\cygwin\bin\<args>

这告诉Vim创建一个名为RR的新命令,它接受一个范围和一个范围 (强制性)论证。该命令只是将参数传递给read!前置 c:\cygwin\bin\参与论证。

您甚至可以为c:\cygwin\bin\中的文件提供文件完成功能 目录。您所需要的只是创建完整列表函数,如下所示:

function! RRComplete(A, L, P)
    return system('dir /b /l c:\cygwin\bin')
endfunction

然后在创建命令时指定该函数的名称:

:command! -nargs=1 -complete=custom,RRComplete -range=% RR <line1>,<line2>read! c:\cygwin\bin\<args>

答案 1 :(得分:1)

:h strftime()

否则,很久以前我写system() wrappers是为了从* nix上的vim执行外部程序,或者使用cygwin的bash或$ COMSPEC作为&amp; shell在win32-gvim上执行外部程序。