2010-12-19 14 views
2

ターミナルコマンドを呼び出す.vimrcファイルに追加できる関数を書き、それを<leader>uにバインドします。VIMから端末コマンドを実行しますか?

私はそれを仕事に得ることができないようです。私はsystem()関数を使うことができると信じていますが、利用可能なドキュメントはほとんどなく、動作させることはできません。

問題のターミナルコマンドは 'git push origin master'です。

私はgitで利用できるプラグインがあることを知っていますが、私はこれらを探しているわけではなく、ターミナルコマンドをキーの組み合わせにバインドする単純な関数です。

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

これはわかりませんが、vim does notはドキュメントを非常に利用可能にしたいと思うようです。

Tyが

+2

あなたは ':help'について知っていますよね? ':help system()'は 'system()'関数のドキュメントを示しています。 ':help shell'は' shell'コマンドのドキュメントを提供しています。そのすぐ下に '!'コマンドのドキュメントがあります。 –

+2

関連するメモで、シェルコマンドを実行する目的がgitとやりとりする場合は、git関連のVimプラグイン(fugitiveやVCSCommandなど)を使うほうがずっと良いでしょう。逃亡のページへのリンク:http://www.vim.org/scripts/script.php?script_id=2975 –

答えて

7
function GitPush() 
    !git push origin master 
endfunction 

サブシェルでコマンドを実行する方法です。

EDIT:ユーザー定義関数があまりにも大文字で始める必要があります。)

1

あなたは組み込みのためにそれを使用するために、独自の関数を呼び出すと失敗するcallを使うのはなぜ?ユーザ定義関数は、大文字で始まるか、b:,w:,t:(いずれもローカル関数ではないことに注意してください)、g:s:(スクリプト内でのみ使用してください)の3つのエラーの1つです。 \w:(たとえば、function _:foo()の場合)または{filename_without_extension}#(ファイル名が\w+.vimの場合)であってもs:<SID>に置き換える必要があります。匿名機能の場合:

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> 

3番目のエラーは<CR>を省略しています。可能であればnoreを使用するとよいので、nmapnnoremapに変更しました。コマンドの最初に:を置いても問題はありませんが、エラーではありませんが、私はそれを書きません。通常のモードマッピングではコマンドモードを開始する必要があります。

関連する問題