どうもNeoVimとVSCodeを割と両方使ってるものです。
VSCodeは仕事で使っているのですが、やはりある程度GUI寄りということでデフォルトちょうどいい感じのショートカットが設定されていません。
今回なるべく速く基本的なGit操作を行う方法を考えてみたためご紹介します。
VSCodeの設定紹介 + fzfの紹介になります
環境
- VSCode version 1.6.2
拡張機能
- Gitlens
- VSCode Vim
- fzf
ファイル操作
まず一番基本的な操作のGit add, Git commit, Git pushあたりはGitlensのショートカットを割り当てるだけで割と問題は解決します。
Git操作管理マネージャーに移動
settings jsonにGit scm(Git操作管理マネージャー)に移動するショートカットを割り当てます
"vim.normalModeKeyBindings": [
{
"before": ["<leader>", "f", "g", "s"],
"commands": ["workbench.view.scm"]
}
],
Add, Commit, Push
keybindins.jsonに
Git add, Git commit, Git pushを実施するショートカットを割り当てます。
{
"key": "ctrl+a",
"command": "git.stageAll",
"when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
},
{
"key": "ctrl+c",
"command": "git.commitStaged",
"when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
},
{
"key": "shift+p",
"command": "git.push",
"when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
},
上記の設定で
- f g s でscmに移動
- <ctrl-a>で全てGit add
- <ctrl-c>でコミット+コミットメッセージ書き込み
- <shift-p>でpush
の4操作で完結することができます。
Diff、Unstage
その他にもファイルごとにstageする設定や、ファイルの差分を確認するショートカットは以下で設定可能です。
{
"key": "a",
"command": "git.stage",
"when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
},
{
"key": "space",
"command": "list.selectAndPreserveFocus",
"when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
},
{
"key": "ctrl+u",
"command": "git.unstageAll",
"when": "sideBarFocus && activeViewlet == 'workbench.view.scm'"
},
Pull
Git pullについては、普通にコマンドを打つのが一番融通が聞くかなと思います。
git pull
上記コマンドで対応し、origin 以外のupstreamなど追加で必要であれば随時追加していくという形で良いかなと思います。
Stash, Apply
Stash, Applyについてはおそらくaliasを使用し、コマンドを打つのが一番早いだろうと考えます。
alias gst="git stash save"
alias gstp="git stash pop"
alias gstl="git stash list"
特定の過去のstashを検索してpopする場合には下記のfst関数を.zshrc(or bash_profile)に記載すると良いかなと思います。
# Git Stash pop
fst() {
local stash
stashes=$(git stash list) &&
stash=$(echo "$stashes" | fzf -m) &&
git stash pop $(echo "$stash" | awk '{print $1}' | sed "s/://")
}
ブランチ操作
Create Branch
おそらくブランチの作成はVSCode Action(ctrl+shift+p)で表示される、「Git:Create Branch」が良い選択肢かなと思いました。
ただブランチの作成に関しては自分はgit checkout -b
にaliasをzshrcの設定で書き込んでいるため、もしかしたらコマンドを打つ方が若干早いかもしれません。
.zshrc(or bash_profile)に以下を追加
alias gcb="git checkout -b"
Delete Branch
ブランチ削除についてもVSCode Actionsでの「Git:Delete Branch」が良いかなと思ったのですが、これだと複数のブランチ削除ができないためにちょっと使い勝手が良くないかなと思いました。
そこで私は、git branchで表示されるものをfzfで検索し、選択したものをgit branch -d として渡すようにbashに設定いたしました。
自分としては以下が一番使い勝手が良いかなと思いました。
zshrc(or bashrc)に以下を追加
# Git delete branch
fbrad() {
local branches branch
branches=$(git --no-pager branch -vv) &&
branch=$(echo "$branches" | fzf -m) &&
git branch -d $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
}
terminalでfbrad
と入力し、削除したいブランチをTabで選択したあとにEnterを押すことで複数ブランチの削除が可能になります。
Checkout
ブランチのcheckoutについては、VSCode Actionの「Git:Checkout to」で十分かなと思いました。
ちなみにfzf的な解法で言うと、以下のfbrコマンドでチェックアウトすることも可能です。
# Git Checkout
fbr() {
local branches branch
branches=$(git --no-pager branch -vv) &&
branch=$(echo "$branches" | fzf +m) &&
git checkout $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
}
コメント