git.vimが便利な件

vim使いながら、!gitコマンドたたくのやだなと思ったので
gitプラグインを探してら、すごくいいのに出会いました。

motemen's git-vim at master - GitHub

#README.rdoc
== Commands
[:GitAdd ] git-add or current file if not specified.
[:GitCommit ] git-commit.
[:GitStatus] Show git-status of current file or repository.
[:GitLog] Show git-log of current file or repository.
[:GitCheckout ] git-checkout. Completes git commits.
[:GitDiff ] git-diff. Completes git commits.
[:GitPull ] git-pull.
[:GitPullRebase] git-pull --rebase.
[:GitPush ] git-push. Defaults to +git push origin +.
[:GitCatFile ] git-cat-file.
[:Git ] Does any git command.
[:GitVimDiffMerge] Experimental. Call this command on unmerged file to enter vimdiff mode.
[:GitVimDiffMergeDone] Call this command after merging.

== Keymaps
[gd] :GitDiff
[gD] :GitDiff --cached
[gs] :GitStatus
[gl] :GitLog
[ga] :GitAdd
[gA] :GitAdd
[gc] :GitCommit

=== In git-status buffer
[] :GitAdd

まぁこんな感じのコマンドが使えます。

凄いのが最後のとこ

=== In git-status buffer
[] :GitAdd

\gs(:GitStatus)ってやったあと
git statusの結果が出力されるので
そこでファイル名にカーソル合わせてEnterすると:GitAddされるんですよ。
んでもって、ソース見たら、「-」も用意されてて
git reset HEADしてくれるんですよ。
(私の環境では「-」すると再描画が必要。)

#plugin/git.vim
" Show Status.
function! GitStatus()
    let git_output = s:SystemGit('status')
    call <SID>OpenGitBuffer(git_output)
    setlocal filetype=git-status
    nnoremap <buffer> <Enter> :GitAdd <cfile><Enter>:call <SID>RefreshGitStatus()<Enter>
    nnoremap <buffer> -       :silent !git reset HEAD -- ^R=expand('<cfile>')<Enter><Enter>:call <SID>RefreshGitStatus()<Enter>
endfunction

こういうことらしい。すごいな。

イメージ

例としてaaaというファイルを修正中の場合
\gsってやると

こうなる。


aaaにカーソル合わせてEnterってやると

git addされる。


ここでaaaにカーソル合わせて-ってやると
1つ目の画像の状態に戻る。


素晴らしい!!