记录个人用到的 VSCode 技能。 主要用于 C/C++ 开发。

1. 搜索 \t tab 字符

无论是单个文件内搜索,还是全局搜索; 输入\t 后, 需要 勾选正则匹配(.*那个icon):

VSCode使用技巧

2. 搜索行尾空格字符

\s$

VSCode使用技巧

3. 使用GitLens插件

可以方便的查看最近commit的修改内容,对比分支等

VSCode使用技巧

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盘空间不足

VSCode使用技巧

官方说法是,里面的 ipch 缓存文件,是给 intellisense 用的, 可以设置最大大小, 也可以改存放路径:

https://code.visualstudio.com/docs/cpp/faq-cpp#_what-is-the-ipch-folder

VSCode使用技巧

6. 全局搜索和替换

VSCode使用技巧

按大佬们的引导,新技能get

  1. 展开VSCode全局搜索里的“替换”
  2. 输入要查的typo
  3. 改成正确的写法
  4. 全局替换

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

VSCode使用技巧

参考: 远程开发C++_4.Linux下如何打造C++完美开发IDE:clangd

9. 代码折叠快捷键

VSCode 自带了快捷键说明的 pdf 链接, 不必每次百度/google低效率查询:
VSCode使用技巧

搜索 fold 关键字,可以找到相关的3条快捷键:
VSCode使用技巧

其中 Fold/unfold region 的说明:比如要折叠一个函数,需要把光标放到函数body的大括号处,然后按 ctrl + shift + [; 不用选中整个函数,选中整个函数代码后再按快捷键反而无效。

0x10 GitLens 修改默认设置

默认情况下会开启 Code Lens, 效果是:代码文件平白无故多了一行或若干行,多出来的行显示的是“谁,多长时间之前”修改了代码。
由于鼠标或光标切换位置后,会显示浅灰色的 commit 简短信息, Code Lens 的多出来的这行就显得多余。关掉它的方法:

VSCode使用技巧

10. VSCode git更改视图,从默认list改为tree

VSCode使用技巧

11. 用 VSCode Clangd 插件情况下,没法调试?

直接复制了原来用 cpptools 工具时的 .vscode 目录过来,发现没法断点调试。

解决办法是装 CodeLLDB 插件:
VSCode使用技巧

然后把 launch.json 中的的 type 改为 lldb:

VSCode使用技巧

12. 已安装配置的调试类型 'python',但其在此环境中不受支持。

在尝试调试一个 Python 程序时, 创建的 launch.json 文件中的 "type": "python", 提示为报错。解决办法:卸载 Jupyter 插件,重启 VSCode, 重装 Jupyter 插件:

VSCode使用技巧

ref: https://github.com/microsoft/vscode/issues/136712

13. 调试 Python 模块

调试个人随手写的单个 .py 文件比较简单和常见。如果是用开源的第三方模块,又如何调试呢?

注意,一个模块,指的具有名为 __init__.py 文件的一个目录。VSCode 中调试模块时,还往往需要传递参数。将 launch.json 中指定 module, 并指定 args 即可。例如

VSCode使用技巧

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;

VSCode使用技巧

15 打开或关闭函数参数提示(Clangd 插件)

打开状态:
VSCode使用技巧

关闭状态:
VSCode使用技巧

编码阶段不太喜欢这些 hint, 干扰视线。 但是纯粹阅读代码阶段, 还是希望打开。于是查找并进行设置:

VSCode使用技巧

VSCode使用技巧

16. 函数无法跳转? Clangd 配置 compile_commands.json 路径

若不配置 compile_commands.json 查找路径, 或使用了错误的路径(例如沿用了全局的配置,但是当前工程没有那样的路径)。

可手动调整指定:

VSCode使用技巧

相关文章: