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
- 2. からの繰り返し
: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>