The useful command
:r!date
is not so useful in gVim for Windows (not Cygwin's gVim) because Windows has its own date function which does not do what I want.
So, something like
:r!c:\cygwin\bin\date
would be great. But that's a lot 开发者_运维百科to type. And considering that I might want to call a few things this way, it would be nice to write a function, which I could pass an argument foo
and it would run
:r!c:\cygwin\bin\foo
What's the best way to do this? It should be:
- Permanent: stored in
.vimrc
or some startup file. - Executed with as few keystrokes as possible.
Any suggestions for good places to create mappings are appreciated.
Thanks!
I think, a simpler solution for day-to-day use (especially if you are interested in only one of the many system-like commands) would be creating a custom synonym-command:
:command! -nargs=1 -range=% RR <line1>,<line2>read! c:\cygwin\bin\<args>
This tells Vim to create a new command named RR
that accepts a range
and one (mandatory) argument. The command just passes arguments to
read!
prepending c:\cygwin\bin\
to the argument.
You could even provide a file completion for the files in c:\cygwin\bin\
directory. All you need for that to work is to create completion-list
function like this:
function! RRComplete(A, L, P)
return system('dir /b /l c:\cygwin\bin')
endfunction
and then specify the name of that function when creating the command:
:command! -nargs=1 -complete=custom,RRComplete -range=% RR <line1>,<line2>read! c:\cygwin\bin\<args>
:h strftime()
?
Otherwise, a longtime ago I wrote system() wrappers in order to execute external programs from vim either on *nix, or on win32-gvim with cygwin's bash or $COMSPEC as &shell.
精彩评论