繁体   English   中英

从VIM运行终端命令?

[英]Run terminal command from VIM?

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

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

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

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

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

我知道这是waaay,但vim似乎并不想让文档非常可用。

function GitPush()
    !git push origin master
endfunction

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

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

为什么使用call调用自己的函数而不能将它用于内置函数? 这是三个错误之一,其他是由@Richo提到的:用户定义的函数必须以大写开头,或者用b:w:t:注意这两个都不是本地函数), g:s: (仅在脚本内部,你必须用映射中的<SID>替换s: :),甚至\\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> 我改变nmapnnoremap ,因为它是很好用nore在可能的情况。 拥有:在命令开始时没有伤害并且不是错误,但我只是不写它:在正常模式映射中需要启动命令模式,但不在脚本内部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM