0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

copilot.vim 導入によって打たなくてよくなった文字数をカウントする

Last updated at Posted at 2024-12-17

ストーリー

「はぁ?効果測定?そんなの効果あるに決まってるだろ?」

というわけでまぁ効果があるのか測定しろとのことなので、とりあえず github copilot を導入したことによって打たなくてよくなったキータイプの回数を数えてみることにしました。1

やりたいこと

私は copilot.vim で github copilot を使ってます。
とりあえず tab キーを押して補完を採用したときに copilot が自分の代わりに打ってくれた文字列をファイルに1か月くらいどんどん貯めていけば、後で wc コマンドで文字数カウントできそうですね。

下記の方法は vim-9.0.0749 で動作確認しました。neovim とかは違うのかな。わかんない

copilot.vim を編集

vim ~/.vim/pack/github/start/copilot.vim/autoload/copilot.vim

まずはファイル末尾に下記の function を新規追加します。

" Function to append Copilot completions to a log file
function! Copilot_AppendCompletion(completion)
  let l:logfile = expand("~/.copilot_completions.log")
  call writefile([a:completion], l:logfile, "a")
endfunction

次に、下記の場所に

    " HERE -------------------------------
    call Copilot_AppendCompletion(text)
    " HERE -------------------------------

という行を1行追加します。

function! copilot#Accept(...) abort
  let s = copilot#GetDisplayedSuggestion()
  if !empty(s.text)
    unlet! b:_copilot
    let text = ''
    if a:0 > 1
      let text = substitute(matchstr(s.text, "\n*" . '\%(' . a:2 .'\)'), "\n*$", '', '')
    endif
    if empty(text)
      let text = s.text
    endif

    call copilot#Request('notifyAccepted', {'uuid': s.uuid, 'acceptedLength': copilot#doc#UTF16Width(text)})
    call s:ClearPreview()
    let s:suggestion_text = text

    " HERE -------------------------------
    call Copilot_AppendCompletion(text)
    " HERE -------------------------------

    return repeat("\<Left>\<Del>", s.outdentSize) . repeat("\<Del>", s.deleteSize) .
            \ "\<C-R>\<C-O>=copilot#TextQueuedForInsertion()\<CR>" . (a:0 > 1 ? '' : "\<End>")
  endif
  let default = get(g:, 'copilot_tab_fallback', pumvisible() ? "\<C-N>" : "\t")
  if !a:0
    return default
  elseif type(a:1) == v:t_string
    return a:1
  elseif type(a:1) == v:t_func
    try
      return call(a:1, [])
    catch
      return default
    endtry
  else
    return default
  endif
endfunction

suggestion_text が確定した直後ですね。リンクで言うと、この辺。
https://github.com/github/copilot.vim/blob/release/autoload/copilot.vim#L511

以上です

動作風景

test.c を github copilot で編集してみましょう。

動画の上半分は、 tail -F~/.copilot_completions.log をモニターして、リアルタイムにどんな感じにファイル追記されているのかを見せているだけです。

ちゃんと tab キーを押した瞬間にファイルに追記されていますね。

1か月後とかに

wc ~/.copilot_completions.log

とかで文字数を数えてみましょう

  1. まぁこんなことしなくても組織管理者へはどれだけ補完がなされたかの統計情報が AcceptRate としてレポートされるらしいんですが。組織管理者じゃないし見方わかんないので

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?