Skip to content

Latest commit

 

History

History
116 lines (103 loc) · 3 KB

20231006-dry-run-before-git-add.md

File metadata and controls

116 lines (103 loc) · 3 KB
title emoji type topics published published_at
vimで`git add`する前に`--dry-run`して確認する
🐙
tech
vim
true
2023-10-06 00:00

:::message この記事は Vim 駅伝 の 10/06 の記事です。 前回の記事は kamecha さんによる、 10/04 のddu.vimのアクション周りを便利にしようという記事でした。 :::

はじめに

vimでコードを修正した後にgit add -Aでステージングする前に、 想定外のファイルが無いか--dry-runオプションの結果を表示するスクリプトです 自分はこれが無いと生きていけません

:GitAdd -A

と入力すると

git add --dry-run -A
add ここにファイル名
add ここにファイル名
︙
execute ? (y/n) > y

とechoされるので、そのままyを入力するとステージングしてくれます

スクリプト

Vim9 Script版とLegacy Vimscript版、両方おいておきます 私は<Space>gagit add -Aするようにマッピングしています

def GitAdd(args: string)
  const current_dir = getcwd()
  try
    chdir(expand('%:p:h'))
    echoh MoreMsg
    echo 'git add --dry-run ' .. args
    const list = system('git add --dry-run ' .. args)
    if !!v:shell_error
      echoh ErrorMsg
      echo list
      return
    endif
    if !list
      echo 'none.'
      return
    endif
    for item in split(list, '\n')
      execute 'echoh' (item =~# '^remove' ? 'DiffDelete' : 'DiffAdd')
      echo item
    endfor
    echoh Question
    if input('execute ? (y/n) > ', 'y') ==# 'y'
      system('git add ' .. args)
    endif
  finally
    echoh Normal
    chdir(current_dir)
  endtry
enddef
command! -nargs=* GitAdd GitAdd(<q-args>)
nnoremap <Space>ga <Cmd>GitAdd -A<CR>

※ legacyの方は動作確認できてないです🙇無責任ですまない…

function s:GitAdd(args) abort
  let l:current_dir = getcwd()
  try
    call chdir(expand('%:p:h'))
    echoh MoreMsg
    echo 'git add --dry-run ' .. a:args
    let l:list = system('git add --dry-run ' .. a:args)
    if !!v:shell_error
      echoh ErrorMsg
      echo l:list
      return
    endif
    if !l:list
      echo 'none.'
      return
    endif
    for l:item in split(l:list, '\n')
      execute 'echoh' (l:item =~# '^remove' ? 'DiffDelete' : 'DiffAdd')
      echo l:item
    endfor
    echoh Question
    if input('execute ? (y/n) > ', 'y') ==# 'y'
      call system('git add ' .. a:args)
    endif
  finally
    echoh Normal
    call chdir(l:current_dir)
  endtry
endfunction
command! -nargs=* GitAdd s:GitAdd(<q-args>)
nnoremap <Space>ga <Cmd>GitAdd -A<CR>

:::message この記事は Vim 駅伝 の 10/06 の記事です。 次回の記事は kyoh86 さんによる、10/09 のdeno/nodeのlspスイッチング意外と気を遣うよと言う話です。🏃 :::