从VIM运行终端命令?

时间:2010-12-19 23:23:32

标签: vim

我希望编写一个函数,我可以将其添加到我的.vimrc文件中,该文件将调用终端命令,然后将其绑定到<leader>u

我似乎无法让它工作。我相信我可以使用system()函数,但是文档很少,我似乎无法使用它。

有问题的终端命令是' git push origin master '。

我知道有可用于git的插件,但我不是在寻找任何这些插件,只是将终端命令绑定到组合键的简单函数。

function gitPush()
 system("git push origin master")
endfunction
:nmap <leader>u :call gitPush()

我知道这已经过了,但是vim似乎并不想让文档非常有用。

2 个答案:

答案 0 :(得分:7)

function GitPush()
    !git push origin master
endfunction

是在子shell中运行命令的方法。

编辑:用户定义的函数也必须以大写字母开头;)

答案 1 :(得分:1)

为什么使用call调用自己的函数而无法将其用于内置函数?这是三个错误之一,其他是由@Richo提到的:用户定义的函数必须以大写字母开头,或者以b:w:t:开头(请注意,这些都不是本地函数),g:s:(仅在内部脚本中,您必须在映射中将s:替换为<SID>),甚至\w:(例如,function _:foo()工作)或{filename_without_extension}#(如果文件名与\w+.vim匹配)。如果是匿名函数:

let dict={}
function dict["foo"]()
endfunction
function dict.bar()
endfunction

它也不需要从资本开始。所以正确的解决方案是:

function g:gitPush()
  call system("git push origin master")
endfunction
nnoremap <leader>u :call g:gitPush()<CR>

第三个错误是省略<CR>。我将nmap更改为nnoremap,因为尽可能使用nore。在命令开头有:不会造成伤害并且不是错误,但我只是不写它:在正常模式映射中需要启动命令模式,而不是在脚本内部。