vscode安装配置

update: 2020-12-3

下载编译器,一般是用mingw-w64,可以选离线版安装包(x86_64-posix-seh)、或者msys2附带(最新)。

接着,配置环境变量Path,讲mingw的bin目录添加进去,在cmd输入gcc -v可以显示出gcc的版本,用于验证环境是否配置正确。

vscode拓展插件:

  • C/C++:提供Debug和Format功能
  • Code Runner:右键运行单文件,无法Debug
  • Bracket Pair Colorizer 2:彩虹花括号
  • One Dark Pro:好看的暗色主题

需要配置调试功能,则需要添加4个json文件。

vscode远程开发

update: 2020-12-12

在VScode中,使用ctrl+shift+x快捷键打开插件搜索窗口,输入插件Remote Development,并点击安装。

将本地密钥对的公钥内容复制到远程主机的~/.ssh/authorized_keys文件中。

若没有~/.ssh目录,先在远程主机执行一遍ssh localhost,此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码,这样就登陆到本机了。

在VS code中,使用cmd+shift+p快捷键打开命令输入窗口,输入Remote-SSH:Connect to Host...,第一次使用时需要选择Add New SSH Host配置一下,输入完成后选择第一个配置文件:xxx/.ssh/config(xxx是省略的意思)。

把登录服务器的信息添加到配置文件.ssh/config中的,该文件格式为:

Host alias
  HostName host_id
  User user_name
  Port 22
  • alias:该远程的命名
  • HostName:远程主机的IP地址
  • User:远程主机的用户名
  • port:远程主机的端口号,不填写的话,ssh默认端口号为22,如果要用其他端口号,可以在这里更改

远程端安装插件:

  • C/C++:查看定义,跳转函数
  • Code Runner:右键运行

解决Vscode提示code安装似乎损坏

update: 2020-12-8

原因:安装了一个叫background的拓展 解决:

  1. 下载一个叫Fix VSCode Checksums的拓展
  2. ctrl+shift+P打开命令面板
  3. 输入Fix Checksums: Apply
  4. 重启vscode

win10-VScode项目配置

update = 2022-07-21

launch.json:设置调试器,并通过preLaunchTask选择编译器

下方配置中clang_lldb暂时用不了,缺少lldm-mi.exe

vscode lldb-mi issue

lldb-mi

{
    "version": "0.2.0",
    "configurations": [
        {
        "name": "(clang_lldb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
        "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
        "environment": [], // 环境变量
        "externalConsole": true, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
        "MIMode": "lldb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
        "miDebuggerPath": "C:/Program Files/LLVM/bin/lldb-mi.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
        "setupCommands": [
            { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }
        ],
        "preLaunchTask": "Compile_clang++" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
    },
    {
        "name": "(clang_gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
        "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
        "environment": [], // 环境变量
        "externalConsole": true, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
        "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
        "miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
        "setupCommands": [
            { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }
        ],
        "preLaunchTask": "Compile_clang++" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
    },
    {
        "name": "(gcc_gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
        "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
        "environment": [], // 环境变量
        "externalConsole": true, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
        "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
        "miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
        "setupCommands": [
            { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }
        ],
        "preLaunchTask": "Compile_g++" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
    },
    ]
}

task.json:编译器及编译选项设置 如果是在windows上使用clang 并且同时安装有vs和mingw, clang链接是会自动使用msvs, 链接时会有LINK error。解决方法是在clang++的编译选项中添加--target=x86_64-w64-mingw

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile_g++",
            "command": "g++",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.exe",
                "-g",
                "-m64",
                "-Wall",
                "-static-libgcc",
                "-fexec-charset=GBK"
            ],
            "type": "process",
            "group": {
                "kind": "build",
                "isDefault": false
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared"
            },
            "problemMatcher": "$gcc"
        },
        {
            "type": "cppbuild",
            "label": "Compile_clang++",
            "command": "C:\\Program Files\\LLVM\\bin\\clang++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "--target=x86_64-w64-mingw",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ]
}

ref:

  • https://www.cnblogs.com/nikiss/p/14208341.html
  • https://code.visualstudio.com/docs/cpp/launch-json-reference
  • https://blog.csdn.net/qq_21567385/article/details/122795215

Linux-VScode项目配置

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile_g++",
            "command": "g++",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-g",
                "-O0",
                "-m64",
                "-Wall",
                "-static-libgcc",
                "-ltlpi"
                // "-fexec-charset=GBK"
            ],
            "type": "process",
            "group": {
                "kind": "build",
                "isDefault": false
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared"
            },
            "problemMatcher": "$gcc"
        },
        {
            "type": "cppbuild",
            "label": "Compile_clang++",
            "command": "C:\\Program Files\\LLVM\\bin\\clang++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "--target=x86_64-w64-mingw",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ]
}

launch.json

// https://code.visualstudio.com/docs/cpp/launch-json-reference
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": ["Makefile", "R5"],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "additionalSOLibSearchPath":"${workspaceFolder}/lib",
            "preLaunchTask": "Compile_g++"
        },
        {
        "name": "(clang_lldb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
        "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
        "environment": [], // 环境变量
        "externalConsole": true, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
        "MIMode": "lldb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
        "miDebuggerPath": "C:/Program Files/LLVM/bin/lldb-mi.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
        "setupCommands": [
            { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }
        ],
        "preLaunchTask": "Compile_clang++" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
    },
    {
        "name": "(clang_gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
        "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
        "environment": [], // 环境变量
        "externalConsole": true, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
        "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
        "miDebuggerPath": "gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要
        "setupCommands": [
            { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }
        ],
        "preLaunchTask": "Compile_clang++" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
    },
    {
        "name": "(gcc_gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}/${fileBasenameNoExtension}", // 将要进行调试的程序的路径
        "args": ["Makefile", "R5"], // 程序调试时传递给程序的命令行参数,一般设为空即可
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${fileDirname}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
        "environment": [], // 环境变量
        "externalConsole": false, // 使用单独的cmd窗口,与其它IDE一致;为false时使用内置终端,远程调试时必须为false
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
        "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
        "miDebuggerPath": "gdb", // 调试器路径,Windows下后缀不能省略,Linux下则不要
        "setupCommands": [
            { // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }
        ],
        "preLaunchTask": "Compile_g++" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
    },
    ]
}

vscode正则

有正则替换功能的文本编辑器都可用,这里只是用了vscode演示而已。
去除重复行正则字符串(全文重复行检索删除):
查找:^(.+)((?:\r?\n.*)*)(?:\r?\n\1)$
替换:$1$2
不能一次全部替换,要一直按「替换」或「全部替换」,虽然按的是「全部替换」,但是并没有一次「全部替换」

hexo转zola,通过vscode替换meta数据格式

替换title:
(^title: )(.*)(\n)
$1"$2"$3


替换date:
(\d{4})/(\d{1,2})/(\d{1,2})
$1-$2-$3


2020/5/16 10:10:05 == (\d{4})/(\d{1,2})/(\d{1,2})(.*)(\n)
(\d{4})-(\d{1})-(\d{1,2})


(^categories: )(.*)(\n)
[taxonomies]\ntags = ["Linux"]\n


---\n
+++\n

提取telegram图片URL:

blob:https://web.telegram.org/772f50bd-d111-4f06-acaa-1c0e2d5f5ffb

(src=")(blob:https://web.telegram.org/)(.{8}-.{4}-.{4}-.{4}-.{12})

VScode选中所有被正则匹配的结果:

windows:Alt+Enter选中全部结果

vscode插件

vscode删除重复行并排序

安装插件:Transformer,使用前需要先信任文件

ctrl + a 全选文字 ctrl + shift + P 打开命令窗口 输入:Transform:Unique Lines //删除重复行 或 Transform:Sort Lines //排序

Other

关闭vscode #ifdefine 宏开关会使代码自动暗色

打开设置,搜索C_Cpp.dimInactiveRegions 取消勾选即可

vscode 设置代码格式化的缩进为4个空格

  1. 设置里搜索tabsize,找到Editor: Tab Size,设置为4
  2. 搜索detectindentation,找到Editor: Detect Indentation,去除勾选

vscode的列编辑 ——批量增删改

列选择: shift + alt + 鼠标左键 行选择: alt + 鼠标左键

vscode 文件标签栏多行显示

  1. 进入设置
  2. 输入workbench.editor.wrapTabs,勾选该设置项即可

vscode僵尸进程批量kill

ps -ef | grep "/usr/share/code/code --type=zygote --no-zygote-sandbox" | grep -v grep | cut -c 9-15 | xargs kill -9

ps -ef | grep "/usr/share/code/code --type=zygote" | grep -v grep | cut -c 9-15 | xargs kill -9

ps -ef | grep "/usr/share/code-insiders/code-insiders --type=zygote --no-zygote-sandbox" | grep -v grep | cut -c 9-15 | xargs kill -9

ps -ef | grep "/usr/share/code-insiders/code-insiders --type=zygote" | grep -v grep | cut -c 9-15 | xargs kill -9

vscode中英文字体设置

字体名用英文逗号隔开。如果字体名中间有空格,在字体名前后加上英文单引号。如果字体包含空格或者是中文,需要添加引号。

设置第一种字体英文字体,第二种字体中文字体。在显示中文时,因为第一种字体没有中文字符,所以调用第二种字体来显示。 image

vscode设置自动识别文件编码

设置->搜索Encoding->勾选Auto Guess Encoding选项

vscode远程连接服务器

使用vscode remote ssh去连接编译服务器,报错:the input device is not a TTY

设置里搜索:remote.SSH.useLocalServer,取消勾选,再次连接编译服务器即可

或者,在settings.json里设置 "remote.SSH.useLocalServer": false,

SSH连接后自动打开Tmux

SSH连接后自动打开Tmux,同时避免与VSCode远程开发冲突 https://zhuanlan.zhihu.com/p/346594276

正则替换log文件的时间戳

假设时间戳格式为:

Format:[%Y%M%D_%h:%m:%s:%t]

vscode的正则替换规则为

src:\[\d{8}_\d{2}:\d{2}:\d{2}:\d{3}\]
dst: