ゴリラ.vim #3
daisuzu(@dice_zu
)
-
VimConfに登壇したり、
- 2017: How ordinary Vim user contributed to Vim
- 2018: Migrating plugins to standard features
-
ゴリラ.vimの運営だったり、
-
ゴリラ.vimで発表したり、
- #1: Vimと外部コマンド
- #3: Vimの動作を調べる(🆕)
-
普段はVimでGoを書いている
- 起動時間が遅い
- 何がかおかしい
- Vimをマスターしたい!
|--startuptime|オプションをつけてVimを起動すると、
指定したファイルに経過時間や処理内容が出力される。
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.016 000.016: --- VIM STARTING ---
~~~~~~~~~~~~~~~~~~~~~ 略 ~~~~~~~~~~~~~~~~~~~~~
101.727 000.002: --- VIM STARTED ---
詳細は|profile|参照
" 例
:profile start profile.log
:profile! file */tree.vim
:Tree
:qa " Vimを終了しないと結果が出力されない
:[count]verb[ose] {command}
count
が
- 1以上 ファイル viminfo が読み書きされたとき
- 2以上 コマンド ":source" でファイルを読み込んだとき
- 5以上 検索されたタグファイルとインクルードファイル全て
- 8以上 autocommand のグループが実行されたファイル
- 9以上 実行された autocommand 全て
- 12以上 実行された関数全て
- 13以上 例外が発生/捕捉/終了/破棄されたとき
- 14以上 ":finally" 節において保留されている全て
- 15以上 実行された Ex コマンド全て (200 文字から後は切り捨て)
:debug {command}
" 例
function! Hoge()
let s = 'h'
let s .= 'o'
let s .= 'g'
let s .= 'e'
return s
endfunction
# デバッグ用にビルドする
# ./configureは省略
CFLAGS=-ggdb3 STRIP=$(which true) make
termdebugを使うと便利。
:packadd termdebug
:Termdebug ./src/vim
ただ、MacでGDBを使えるようにするのはちょっと面倒... (参考: MojaveでGDB 8.3を使う)
元ネタはVim Advent Calendar 2017の2日目の記事
必要なもの:
- lcov
- カバレッジ用にビルドしたVim
# ./configureは省略
CFLAGS=--coverage LDFLAGS=--coverage make
# まずはゼロカバレッジの初期データを作る
cd ./src
lcov -c -i -b . -d objects -o objects/coverage_base.info
# Vimを起動して即終了する
VIMRUNTIME=../runtime ./vim --clean -c 'q'
# ↑のカバレッジデータを作る
lcov -c -b . -d objects/ -o objects/coverage_quit.info
lcov -a objects/coverage_base.info \
-a objects/coverage_quit.info \
-o objects/coverage_baseline.info
# カバレッジをリセットしておく
lcov -z -d objects/
# smileコマンドを追加
VIMRUNTIME=../runtime ./vim --clean -c 'smile | q'
# ↑のカバレッジデータを作る
lcov -c -b . -d objects/ -o objects/coverage_smile.info
lcov -a objects/coverage_base.info \
-a objects/coverage_smile.info \
-o objects/coverage_result.info
# genhtmlコマンドに-b(--baseline-file)オプションをつける
genhtml -b objects/coverage_baseline.info \
objects/coverage_result.info -o objects