🧑🏫
Vimで現在のファイルのgit diffを確認する
この記事はVim駅伝の2023-12-15の記事です。
前回の記事はAmaさんのVimで、位置を指定できる winline()
を作成するです。
vim-jp slackの#tech-spartan
というチャンネルで話題になり、書いてみました。
Git管理下のファイルを開き、適当な変更を加えて以下のコマンドを入力するとdiffを見ることができます。
new | r !git diff #
-
new
- 空のファイルで新しいウィンドウを開く
-
r !git diff #
「newしてgit diffをreadする」という動作をほぼそのままコマンドにした形になっています。spartanも覚えやすいですね。
頻繁に使うのであれば、コマンド化して、もうすこし整形すると見やすいと思います。
こんな感じはどうでしょうか。
command! GitDiff new
\ | setlocal buftype=nofile bufhidden=delete noswapfile
\ | setfiletype gitcommit
\ | execute 'read !git diff #'
\ | setlocal readonly nobuflisted
\ | normal! gg
-
new
- 空のファイルで新しいウィンドウを開く
-
setlocal buftype=nofile bufhidden=delete noswapfile
- 編集対象としないことを設定
-
special-buffers
のdirectory
を参考にした
-
setfiletype gitcommit
- ファイルタイプをgitcommitに設定(ハイライトのため)
-
execute 'read !git diff #'
- 前掲の
read !git diff #
と同じだが、あとにコマンドを続ける必要があるため、execute
で実行する
- 前掲の
-
setlocal readonly nobuflisted
- 編集対象としないことを設定 その2
-
read !git diff #
はバッファの書き換えなので、readonly
はそれより後に設定する必要がある - 他のオプションは先でも後でも良いのだが、まとめると1行が長くなりすぎるので適当に分割した
-
normal! gg
- カーソルをバッファ先頭へ復帰
また、new
のかわりにenew
やtabnew
を使ったり、git diff
のオプションを追加したりして改造できます。お試しあれ。
なお、denops環境ではgin.vimの使用がおすすめです。
Discussion