记录个人用到的 VSCode 技能。 主要用于 C/C++ 开发。
- 1. 搜索 \t tab 字符
- 2. 搜索行尾空格字符
- 3. 使用GitLens插件
- 4. ~/.gitconfig中配置 VSCode 为默认编辑器:
- 5. vscode cpptools 插件过大,C盘空间不足
- 6. 全局搜索和替换
- 7. Remote SSH 连接卡顿、连不上
- 8. Linux 下的 C++ 插件
- 9. 代码折叠快捷键
- 0x10 GitLens 修改默认设置
- 10. VSCode git更改视图,从默认list改为tree
- 11. 用 VSCode Clangd 插件情况下,没法调试?
- 12. 已安装配置的调试类型 'python',但其在此环境中不受支持。
- 13. 调试 Python 模块
- 14. 正则查找
- 15 打开或关闭函数参数提示(Clangd 插件)
- 16. 函数无法跳转? Clangd 配置 compile_commands.json 路径
1. 搜索 \t tab 字符
无论是单个文件内搜索,还是全局搜索; 输入\t 后, 需要 勾选正则匹配(.*那个icon):
2. 搜索行尾空格字符
\s$
3. 使用GitLens插件
可以方便的查看最近commit的修改内容,对比分支等
4. ~/.gitconfig中配置 VSCode 为默认编辑器:
[core]
#editor = vim
#editor = subl -n w # sublime
#editor = notepad++ -multiInst -nosession # notepad++
#editor = 'C:\\Program Files (x86)\\Microsoft VS Code\\code.exe' -w # vscode
#editor = 'E:\\soft\\VSCode-Insider\\Code - Insiders.exe' -w # vscode-insiders
editor = code-insiders -w # recommend VSCode with GitLens especially rebase -i moment
以后 git commit 时候编辑起来比 vim 方便多了, 例如多列编辑。 对于 rebase,由于装了 git lens 插件, 直接是 GUI 方式选择, 太方便了。
5. vscode cpptools 插件过大,C盘空间不足
官方说法是,里面的 ipch 缓存文件,是给 intellisense 用的, 可以设置最大大小, 也可以改存放路径:
https://code.visualstudio.com/docs/cpp/faq-cpp#_what-is-the-ipch-folder
6. 全局搜索和替换
按大佬们的引导,新技能get
- 展开VSCode全局搜索里的“替换”
- 输入要查的typo
- 改成正确的写法
- 全局替换
7. Remote SSH 连接卡顿、连不上
设置了如下两个选项后,基本上没问题了
"remote.SSH.useLocalServer": false
"terminal.integrated.inheritEnv": false
https://stackoverflow.com/questions/59978826/why-ssh-connection-timed-out-in-vscode
8. Linux 下的 C++ 插件
默认会提示安装 Microsoft C++ 插件,也可以考虑换掉,用 Clangd 的方案。
安装 clangd 可直接从官方github release页面下载: https://github.com/clangd/clangd/releases 。 如果自行编译,需要给 cmake 的 LLVM_ENABLE_PROJECTS 选项传入clang-tools-extra,然后等待30分钟~1小时(根据CPU情况确定)。
配置 clangd 将 clangd 安装路径放入 PATH, 然后重开 VSCode。
安装 VSCode clangd插件 搜索安装 Clangd 插件, 并禁用 Microsoft C++ 插件以避免冲突, 然后重启 VSCode。
配置 VSCode clangd插件 我配置了 Arguments 和 Clangd Path:
- Arguments 指定的是传给 clangd 命令的参数, 我通常需要跨平台编译,会在 build/linux-x64 子目录编译,而不是默认的 build 目录,因此需要显示指定 compile_commands.json 这一编译数据库文件的位置(通过cmake中开启CMAKE_EXPORT_COMPILE_COMMANDS ON开启)
- Clangd 命令的路径, 如果已经在 PATH 中其实可以不设定
- 如果设置后不生效,例如函数不识别,考虑重启VSCode
参考: 远程开发C++_4.Linux下如何打造C++完美开发IDE:clangd
9. 代码折叠快捷键
VSCode 自带了快捷键说明的 pdf 链接, 不必每次百度/google低效率查询:
搜索 fold 关键字,可以找到相关的3条快捷键:
其中 Fold/unfold region 的说明:比如要折叠一个函数,需要把光标放到函数body的大括号处,然后按 ctrl + shift + [; 不用选中整个函数,选中整个函数代码后再按快捷键反而无效。
0x10 GitLens 修改默认设置
默认情况下会开启 Code Lens, 效果是:代码文件平白无故多了一行或若干行,多出来的行显示的是“谁,多长时间之前”修改了代码。
由于鼠标或光标切换位置后,会显示浅灰色的 commit 简短信息, Code Lens 的多出来的这行就显得多余。关掉它的方法:
10. VSCode git更改视图,从默认list改为tree
11. 用 VSCode Clangd 插件情况下,没法调试?
直接复制了原来用 cpptools 工具时的 .vscode 目录过来,发现没法断点调试。
解决办法是装 CodeLLDB 插件:
然后把 launch.json 中的的 type 改为 lldb:
12. 已安装配置的调试类型 'python',但其在此环境中不受支持。
在尝试调试一个 Python 程序时, 创建的 launch.json 文件中的 "type": "python", 提示为报错。解决办法:卸载 Jupyter 插件,重启 VSCode, 重装 Jupyter 插件:
ref: https://github.com/microsoft/vscode/issues/136712
13. 调试 Python 模块
调试个人随手写的单个 .py 文件比较简单和常见。如果是用开源的第三方模块,又如何调试呢?
注意,一个模块,指的具有名为 __init__.py 文件的一个目录。VSCode 中调试模块时,还往往需要传递参数。将 launch.json 中指定 module, 并指定 args 即可。例如
git clone https://github.com/psycofdj/coverxygen
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 模块",
"type": "python",
"request": "launch",
"module": "coverxygen",
"args": [
"--xml-dir", "linux-x64/docs/xml",
"--src-dir", "../src",
"--output", "doc-coverage.info",
"--kind", "function"
]
}
]
}
14. 正则查找
例如想查找 opencv 中的 v_uint8 的定义, 并且隐约猜测这个 v_uint8 可能有多种定义, 不同平台定义不一样; 此时 F12 跳转定义就显得有点鸡肋和误导, 需要结合正则查找来“查明真相”。F12 跳转到的是:
typedef v_uint8x16 v_uint8;
15 打开或关闭函数参数提示(Clangd 插件)
打开状态:
关闭状态:
编码阶段不太喜欢这些 hint, 干扰视线。 但是纯粹阅读代码阶段, 还是希望打开。于是查找并进行设置:
16. 函数无法跳转? Clangd 配置 compile_commands.json 路径
若不配置 compile_commands.json 查找路径, 或使用了错误的路径(例如沿用了全局的配置,但是当前工程没有那样的路径)。
可手动调整指定: