🍣

Vim 上での git 仕草

2023/01/03に公開約2,700字

Vim 上で git を使う時のプラグインとかキーマップとかフローとか。

使用プラグイン

プラグインの設定

lambdalisue/gin.vim

" !git の動作に支障をきたすため環境変数 GIT_EDITOR の書き換えを禁止
let g:gin_proxy_disable_editor = v:true

キーマップ

nnoremap qt <Cmd>tabclose<CR>: タブで開いたらこれで閉じる。

git status

  • nnoremap <Space>gs <Cmd>!git status -v<CR>: -v で git add した内容を確認。
  • nnoremap <Space>gS <Cmd>GinaPreview<CR>: kuuote/gina-preview.vim で画面分割表示

git add

  • nnoremap <Space>gai <Cmd>!git add --interactive<CR>: ファイル単位での add はこちらを使う。
  • nnoremap <Space>gad :!git add --patch<Space>: 変更箇所単位での add はこちらを使う。現在のバッファだけを対象にするなら % を入力して Enter。 e のときに編集をキャンセルするときは :cq を使う。
  • nnoremap <Space>gaD <Cmd>GinPatch ++opener=tabnew %<CR>: gin.vim で変更箇所単位での add など。変更箇所にさらに変更を加える場合により使いやすいかな。
  • nnoremap <Space>gu <Cmd>silent !git add --update<CR>: 変更したファイルをすべて add。最近 git commit --all -v を使えばこれはいらなさそうと気づいた。

git commit

  • nnoremap <Space>gn :!git commit --all -v -m ""<Left>: 一行コミットメッセージですべての変更をコミット。-m "" を削除して詳細にコミットメッセージを書く時ように -v も入れているけど、やっぱりいらないかな。
  • nnoremap <Space>gN <Cmd>!git commit --all -v<CR>: 詳細にコミットメッセージを書く時はこちら。
  • nnoremap <Space>gc <Cmd>!git commit -v<CR>: git add が終わったらこちら。
  • nnoremap <Space>gam <Cmd>!git commit --amend<CR>: git add 後に直前のコミットへ混ぜる。

git push

  • nnoremap <Space>gp :!git push origin @

git diff

  • nnoremap <Space>gd <Cmd>!git diff<CR>: git add 前に変更箇所確認。
  • nnoremap <Space>gD <Cmd>GinDiff ++opener=tabnew<CR>: たくさん変更していたらバッファ上で確認をするためにこっちを使うことも。

others

  • nnoremap <Space>gbc :!git switch -c<Space>: ブランチ作成。
  • nnoremap <Space>gbo * :GinEdit ++opener=vsplit %<Left><Left>: 過去のコミットやブランチのファイルを表示。コミットハッシュやブランチ名を入力する位置に <Left> でカーソル移動。
  • nnoremap <Space>gl <Cmd>GinBuffer log --all --graph -100 --oneline<CR>: ログとグラフを一行表示。
  • nnoremap <Space>gL <Cmd>GinBuffer log --all --patch --graph -100<CR>: ログとグラフと差分をバッファに表示。
  • nnoremap <Space>gg :Gina log -p -G""<Left>: 正規表現が変更に含まれるコミットを表示。
  • nnoremap <Space>gbl <Cmd>Gina blame<CR>: インタラクティブな git blame

master に間違ってコミットした時に対処

  1. nnoremap <Space>gbr :!git branch -m temp: 現在のブランチ名を仮名に変更。
  2. nnoremap <Space>g- :!git switch -c master HEAD~<Left><Left><Left><Left><Left><Left>: 起点にするコミットにブランチ作成。
  3. nnoremap <Space>gr :!git restore --source=temp .: restore 後に git commit -p で部分的に add して commit
  4. nnoremap <Space>gbd :!git branch -D temp: 仮名のブランチを削除。

フロー

編集 → [add →] commit
30398c5525bf4f.png

GitHubで編集を提案

Discussion

ログインするとコメントできます