Vim-中插件-vim-spector-使用

参考 B 站

启用一个语言的调试器, 在 Plug 后加 --enable 如:

1
Plug 'puremourning/vimspector', {'do': './install_gadget.py --enable-python'}

注意安装相关依赖.

注意设置模板文件.

在使用这个插件调试之前, 项目路径下需要有 .vimspector.json 文件.

.vimspector.json 文件的编写

参考

同样需要一个 Debug Adapter 来连接 Vimspector 和实际的 debug 工具.

概念

替换和变量

${...} 中包括:

  • 环境变量, 如 ${PATH}
  • 预定于变量, 如 ${workspaceRoot}, ${file}
  • 不是上述变量, 其值会在运行时要求用户输入

几个变量的含义:

  • ${fileBasenameNoExtension}, 表示去掉后缀的相对文件名, 如 /path/to/xyz.cc => xyz
  • ${USER}, 环境变量 USER

传递给 debug adapter 的命令行参数写为:

1
"args": { "one", "Two", "three"},

其他写法见文章.

默认值

语法为:

1
${variable name:default value}

default value 可以是任意字符, 除了 } 需要转义, 表示 \ 需要用 \\.

如:

1
2
3
4
5
{
"configuration": {
"program": "${script:${file\\}}"
}
}

\\} 的作用就是转义一个 }.

这里要求用户指定一个脚本, 默认路径是当前脚本.

强制类型 (coercing type)

强制为 JSON 值:

1
#json

强制为 string 值:

1
#s

如:

1
"stopOnEntry#json": "${stopOnEntry:true}"

这里 stopOnEntry 的结果就为 true 而不是 "true".

配置格式

所有的 Vimspector 配置都被定义在一个 JSON 对象中.

基本格式为:

1
2
3
4
{
"adapters": { <object mapping name to <adapter configuration> },
"configurations": { <object mapping name to <debug configuration> }
}

adapters 键值对是可选的, 因为可以写在 configuration 中.

文件和位置

只需要 .vimspector.json 文件位于项目的根路径下.
官方给的示例配置文件中有几个需要替换:

  • <vimspector home>, 安装 Vimspector 的路径, 可以直接写路径, 也可以设定 g:vimspector_base_dir 变量
  • <OS>, 表示系统, 替换为 linux, macos 之类
  • <filetype>, 替换为文件类型

适配器配置

格式为:

1
2
3
4
5
6
7
8
{
"$schema": "https://puremourning.github.io/vimspector/schema/gadgets.schema.json#",
"adapters": {
"<adapter name>": {
<adapter configuration>
}
}
}

adapters 块下可以定义任意数量的适配器. 如果几个适配器用相同的名称, 运行最后一个.

扩展 adapters

使用 extends 键值对来继承已有的 adapter:

1
2
3
4
5
6
7
8
{
"adapters": {
"my-custom-debugpy": {
"extends": "debugpy",
"command": [ "python3", "-m", "debugpy" ]
}
}
}

这里就是继承自 debugpy 适配器.

Debug 配置

可以每个项目配置一个, 也可以全局给某个文件类型配置.

项目和全局配置

可以在几个位置对项目的 debug 进行配置:

  • g:vimspector_configurations, 指定目录
  • <vimspector home>/configurations/<OS>/<filetypes>/*.json
  • .vimspector.json, 位于项目目录下

找到 .vimspector.json 文件后, 其路径用于 ${workspaceRoot} 的值.

出现在 .vimspector.json 的配置会覆盖其他配置目录下的配置.

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"$schema": "https://puremourning.github.io/vimspector/schema/vimspector.schema.json#",
"configurations": {
"<configuration name>": {
"adapter": "<adapter name>",
"filetypes": [ /* list of filetypes this applies to */ ],
"configuration": {
"request": "<launch or attach>",
<debug configuration>
}
}
}
}

Ad-hoc 配置 (临时配置)

可以让 Vimspector 忽略硬盘上的配置文件, 而是使用一些临时配置, 通过调用:

1
call vimspector#LaunchWithConfigurations( dict )

dict 是字典.

如:

1
2
3
4
5
6
7
8
9
10
11
let pid = <some_expression>
call vimspector#LaunchWithConfigurations( {
\ "attach": {
\ "adapter": "netcoredbg",
\ "configuration": {
\ "request": "attach",
\ "processId": pid
\ }
\ }
\ } )

配置选择

指定一个 debug configuration 并使用, 用:

1
call vimspector#LaunchWithSettings( #{ configuration: 'name here' } )

设置默认的 debug configuration, 用 "default": true :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"configurations": {
"use this one": {
"default": true,
"adapter": " ... ",
"configuration": {
// ...
}
},
"don't use this one": {
// ...
}
}
}

阻止自动选择

设置 "autoselect": false, 如:

1
2
3
4
5
6
7
8
9
"configurations": {
"Don't use this by default!": {
"autoselect": false,
"adapter": " ... ",
"configuration": {
// ...
}
}
}

其也会覆盖 "default": true

每个文件类型一个默认选项

利用 filetype, 如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"configurations": {
"Node": {
"adapter": "vscode-node",
"filetypes": [ "javascript" ],
"default": true,
"configuration": {
"request": "launch",
"protocol": "auto",
"stopOnEntry": true,
"console": "integratedTerminal",
"program": "${workspaceRoot}/test.js",
"cwd": "${workspaceRoot}"
}
},
"Python": {
"adapter": "debugpy",
"filetypes": [ "python" ],
"default": true,
"configuration": {
"request": "launch",
"program": "${workspaceRoot}/test.py",
"stopOnEntry": true,
"cwd": "${workspaceRoot}"
}
}
}
}

扩展配置

同样利用 extends 来继承:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"configurations": {
"run - simple": {
"adapter": "CodeLLDB",
"configuration": {
"program": "${workspaceRoot}/myapp",
"env": {
"BASEPATH": "${workspaceRoot}"
},
"args": []
}
},
// run with some fixed options
"run - test mode": {
"extends": "run - simple",
"configuration": {
"args": [ "-mode", "test" ]
}
},
// run with some different environment vars
"run - verbose mode": {
"extends": "run - test mode",
"configuration": {
"env": {
"LOGLEVEL": "verbose"
}
}
}
}
}

预定义变量

:

  • ${dollar} - has the value $, can be used to enter a literal dollar
  • $$ - a literal dollar
  • ${workspaceRoot} - the path of the folder where .vimspector.json was found
  • ${workspaceFolder} - the path of the folder where .vimspector.json was found
  • ${gadgetDir} - path to the OS-specific gadget dir (/gadgets/)
  • ${file} - the current opened file
  • ${relativeFile} - the current opened file relative to workspaceRoot
  • ${relativeFileDirname} - path of opened file relative to workspaceRoot
  • ${fileBasename} - the current opened file’s basename
  • ${fileBasenameNoExtension} - the current opened file’s basename with no file extension
  • ${fileDirname} - the current opened file’s dirname
  • ${fileExtname} - the current opened file’s extension
  • ${cwd} - the current working directory of the active window on launch
  • ${unusedLocalPort} - an unused local TCP port

Vim-中插件-vim-spector-使用
http://example.com/2022/11/29/Vim-中插件-vim-spector-使用/
作者
Jie
发布于
2022年11月29日
许可协议