从VIM运行终端命令?
问题描述:
我想编写一个函数,我可以添加到我的.vimrc文件中,该文件将调用终端命令,然后将其绑定到<leader>u
。从VIM运行终端命令?
我似乎无法让它工作寿。我相信我可以使用system()函数,但只有很少的文档可用,我似乎无法使它工作。
有问题的终端命令是'git push origin master'。
我知道有插件可用于git,但我不寻找任何这些,只是一个简单的函数来绑定一个终端命令到一个组合键。
function gitPush()
system("git push origin master")
endfunction
:nmap <leader>u :call gitPush()
我知道这是waaay out,但vim似乎并不想让文档非常可用。
泰
答
function GitPush()
!git push origin master
endfunction
是在子shell运行命令的方式。
编辑:用户定义的函数必须以大写字母开头太;)
答
为什么使用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
。在命令开始时有:
不会造成伤害,并且不是错误,但我只是不写它:在正常模式映射中需要启动命令模式,但不在脚本内部。
你知道':help',对吧? ':help system()'显示'system()'函数的文档。 ':help shell'为你提供'shell'命令的文档,在它下面你会看到'!'命令的文档(你可能想要的)。 – 2010-12-19 23:29:59
在相关说明中,如果您希望使用shell命令的目的是与git进行交互,那么使用git相关的Vim插件(比如'fugitive'或VCSCommand)会更好。以下是逃犯页面的链接:http://www.vim.org/scripts/script.php?script_id=2975 – 2010-12-19 23:58:14