Vim で Git を使う
lambdalisue/gina.vim を使っています。
まだまだ試行錯誤中。
さくっと
- ログ表示:
<Leader>gl
- バッファでログ表示:
<Leader>gL
- diff表示:
<Leader>gd
- ステータス表示:
<Leader>gs
- ブランチ表示:
<Leader>gbb
- push (ブランチ名に応じて master を変更):
<Leader>gp
- 開いているファイル、選択行を Github で開く:
<Leader>oG
- 差分から検索:
<Leader>gg
vimrc
nnoremap <silent> <Leader>gl :!git gl -100<CR>
nnoremap <silent> <Leader>gL :Gina log --graph -100<CR>
nnoremap <silent> <Leader>gd :!git diff<CR>
nnoremap <silent> <Leader>gs :!git status<CR>
nnoremap <Leader>gbb :call popup_atcursor(systemlist('git branch'), #{ moved: "any", border: [], minwidth: &columns/3, minheight: &lines/4 })<CR>
nnoremap <Leader>gp :!git push origin master
nnoremap <Leader>oG :Gina browse :<CR>
xnoremap <Leader>oG :Gina browse :<CR>
nnoremap <Leader>gg :Gina log -p -G""<Left>
変更内容を全コミット
- 単純なコメント:
<Leader>gn
- 詳細なコメント:
<Leader>gu
<Leader>gc
vimrc
nnoremap <Leader>gn :!git commit -a -m ""<Left>
nnoremap <silent> <Leader>gu :silent !git add -u<CR>
nnoremap <silent> <Leader>gc :!git commit -v<CR>
変更内容の一部をコミット
- 比較的単純な場合
<Leader>ga
<Leader>gc
vimrc
nnoremap <silent> <Leader>ga :call popup_create(term_start(['git', 'add', '-p'], #{ hidden: 1, term_finish: 'close'}), #{ border: [], minwidth: &columns*9/10, minheight: &lines/2 })<CR>
nnoremap <silent> <Leader>gc :!git commit -v<CR>
- 比較的複雑な場合
<Leader>gS
- 対象のファイルで
pp
- 当該コミットに取り込む対象を
dor
で反映、dol
で除外 :w
qt
cc
- コミットメッセージを書いて
:wq
-
- からの繰り返し
-
:bdeletle
で終わり。
vimrc
nnoremap <silent> <Leader>gS :Gina status -s<CR>
call gina#custom#mapping#nmap('status', 'cc', ':<C-u>Gina commit -v --group=status<CR>', {'noremap': 1, 'silent': 1, 'buffer': 1, 'nowait': 1})
nnoremap qt :tabclose<CR>
直前のコミットを master ブランチにする
- ブランチ名変更:
<Leader>gbr
- 直前のコミットのブランチ名を master へ:
<Leader>g-
vimrc
nnoremap <Leader>gbr :!git branch -m<Space>
nnoremap <Leader>g- :!git switch -c master HEAD~<Left><Left><Left><Left><Left><Left>
履歴を辿って変更内容を確認
- リポジトリのファイルを開いて
<Leader>bl
-
<CR>
,<BS>
でコミットを辿ってe
,s
でコミットメッセージを表示 -
qt
で終わり。
vimrc
nnoremap <silent> <Leader>gbl :Gina blame<CR>
call gina#custom#mapping#nmap('blame', 's', ':<C-u>Gina show<CR>', {'noremap': 1, 'silent': 1, 'buffer': 1, 'nowait': 1})
call gina#custom#mapping#nmap('blame', 'e', '<Plug>(gina-blame-echo)', {'noremap': 0, 'buffer': 1, 'nowait': 1})
nnoremap qt :tabclose<CR>