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で除外 :wqtcc- コミットメッセージを書いて
: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>