vimspectorとは
Vimでも、ブレークポイント張って、デバッガーのように使えるよ!っていう便利なプラグイン。
Debug Adapter Protocol (DAP)によって実現してる感じっぽいです
導入方法、使い方を軽く紹介していきます!
導入方法
vimspectorのGitHubページにもろもろ書いてますが、いつも使っている、ダークパワーのdein.vimで導入してみます。
dein_lazy.toml
buildに、デバッガーしたい言語用オプションを書き込みます。
参考→Language dependencies
今回は、PythonとNodeでデバッグしてみようかと思います。
※遅延読み込み不要な方は、lazyじゃなくておkです。
repo='puremourning/vimspector'on_ft=['python','javascript']build='./install_gadget.py--enable-python--force-enable-node'
使い方
インストールは、完了したのですが、利用するまでに少し設定が必要です。
様々な設定値は、.vimspector.json
で表現します。
adapters
実行時に利用するadapterを設定します。
インストール時に選択した言語のadapterは自動的に設定されています。
※vimspectorフォルダーのgadgets/linux/.gadgets.json
に記入されてます。
自分で設定することも可能です。
${gadgetDir}
は、<vimspector home>/gadgets/<OS>
となってます。
つまり、adapter設定するときは、基本この変数使います。
※他の変数はこちら
configurations
デバッガー起動する際の、設定値を記入します。
起動時、どういうコマンドを実行するか設定しておかないといけません。。。
ここは、利用パターンによって変わってくると思うので、各自調整しちゃってください。
python_file
- program
に、実行対象ファイルパスを指定。
python_test
- gitRootPath
を作業ディレクトリに設定し
- 引数に、-m pytest
を指定して、テスト動作するように。
{"adapters":{"vscode-node":{"command":["node","${gadgetDir}/vscode-node-debug2/out/src/nodeDebug.js"],"name":"node2","type":"node2"},"vscode-python":{"command":["node","${gadgetDir}/vscode-python/out/client/debugger/debugAdapter/main.js"],"name":"vscode-python"}},"configurations":{"python_file":{"adapter":"vscode-python","configuration":{"name":"Python: Current File","type":"python","request":"launch","cwd":"${fileDirname}","program":"${file}","args":[],"stopOnEntry":true,"externalConsole":false,"debugOptions":[]},"breakpoints":{"exception":{"raised":"N","uncaught":"Y"}}},"python_test":{"adapter":"vscode-python","variables":{"gitRootPath":{"shell":["git","rev-parse","--show-toplevel"]}},"configuration":{"name":"Python: Test","type":"python","request":"launch","cwd":"${gitRootPath}","args":["-m","pytest"],"stopOnEntry":true,"externalConsole":true,"debugOptions":[]},"breakpoints":{"exception":{"raised":"N","uncaught":"Y"}}},"javascript_file":{"adapter":"vscode-node","configuration":{"name":"JavaScript: Current File","request":"launch","cwd":"${fileDirname}","program":"${file}","args":[],"protocol":"auto","stopOnEntry":true,"externalConsole":false},"breakpoints":{"exception":{"all":"N","uncaught":"Y"}}}}}
実行してみる!
準備は整ったので、実行する!
サンプルソースで実行してみます。
deftest():foriinrange(10):test_var=ireturntest_varif__name__=="__main__":test_var=123result=test()print(result)raiseException(123)# わざと例外だす
test_var=123
実行
ファイルを開いた状態で、下記コマンド実行します。
call vimspector#LaunchWithSettings({'configuration':'python_file'})
※call vimspector#Launch()
で、選択して実行することもできます。
例外のところで自動的に止まるかと思います!
左上パネルで、止まった時点の変数内容丸見えですね!
VimspectorToggleBreakpoint
VimspectorWatch
指定した変数を監視します。:VimspectorWatch test_var
test_varを常に監視しちゃいます!
使いやすくする!
実行は同じコマンドで実行したいので、filetypeで動的に値変更するようにして、.vimspector.json
の設定値に規則性をもたせるようにしました。(python_file, javascript_file, sh_fileのように。)
function! LaunchFileDebug()call vimspector#LaunchWithSettings({'configuration':&filetype.'_file'})endfunction