kiyo_hikoのブログ

メモ+日記?

VimScript:プログラムソースコードから関数名一覧を配列に取り出す

というものを書いた 。 条件を変えれば色々に使いそうな予感。

考え方

① バッファの全行をリストにする
② 特定パターンでfilterする
③ 文字列置換で関数名だけ取り出してmapする

簡単!

現実に作ったもの

function FunctionList()
  let l:funs=getline(1, '$')->filter({ _,s -> s =~ '^[ \t]*function\W' })
  let l:result = []
  for l:fun in l:funs
    let l:fun = substitute(l:fun, '.*function[ \t]*', '', '')
    let l:fun = substitute(l:fun, '\W*$', '', '')
    call add(l:result, l:fun)
  endfor
  return l:result
endfunction

自分の目標は果たしたので一旦終わり。

消化できてない疑問(放置)

  • mapにlambdaを適用する方法が調べきれなかった。
    • 日和って別配列にaddするコードになった。
  • substituteが破壊的に文字列置換するのか副作用無しで結果を返すのかがよくわからない。
    • 日和って代入した。