当前位置:首页>Linux>Linux + VS Code 开发效率工具:Snippets 入门指南

Linux + VS Code 开发效率工具:Snippets 入门指南

  • 2026-10-11 07:50:29
Linux + VS Code 开发效率工具:Snippets 入门指南
在日常开发中,我们经常会重复输入一些固定格式的代码,比如
intmain() {return0;}

或者:

for (inti=0; i<n; ++i) {}

再比如 CMake 项目中经常写:

target_include_directories(app    PRIVATE${CMAKE_CURRENT_SOURCE_DIR}/include)

这些代码本身不难,但重复输入会浪费时间,也容易因为手误产生小问题。

这时候,Snippets 就派上用场了。

本文主要结合 Linux + VS Code + C++/CMake 开发环境,介绍 Snippets 的基本用法。内容分为六部分:

  1. Snippets 是什么?

  2. Snippets 有什么作用?

  3. Snippets 怎么用?

  4. 使用 Snippets 时的常见问题

  5. 总结


一、Snippets 是什么?

Snippets,中文通常叫做代码片段。

简单来说,它是一种“代码模板自动展开”功能。

你可以提前定义一段常用代码,并给它设置一个简短的触发词。以后写代码时,只需要输入这个触发词,再按 Tab 或 Enter,VS Code 就会自动帮你展开成完整代码。

例如,我们定义一个 C++ 的 main 函数代码片段:

{"C++ Main": {"prefix": "maincpp","body": ["#include <iostream>","","int main() {","    $0","    return 0;","}"    ],"description": "C++ main 函数"  }}

以后在 .cpp 文件中输入:

maincpp

按下 Tab,就会自动生成:

#include <iostream>intmain() {return0;}

其中,$0 表示代码展开后,光标最终停留的位置。


二、Snippets 有什么作用?

Snippets 的核心作用就是:

减少重复输入,提高编码效率,统一代码风格。

对于机器人开发、C++ 项目开发、算法验证、ROS 工程、CMake 项目管理等场景,Snippets 都非常实用。


1. 快速生成常用代码结构

在 C++ 开发中,我们经常会写一些固定结构,例如:

  • main 函数

  • for 循环

  • class 类

  • struct 结构体

  • namespace

  • try-catch

  • std::cout

  • debug 输出语句

例如定义一个 for 循环 snippet:

{"For Loop": {"prefix": "fori","body": ["for (int ${1:i} = 0; ${1:i} < ${2:n}; ++${1:i}) {","    $0","}"    ],"description": "普通 for 循环"  }}

输入:

fori

展开后:

for (inti=0; i<n; ++i) {}

这里的 ${1:i}、${2:n} 是占位符。展开后可以按 Tab 在不同占位符之间跳转。


2. 减少重复代码,提高开发速度

比如 C++ 中常用的快速 IO:

std::ios::sync_with_stdio(false);std::cin.tie(nullptr);

可以配置成:

{"Fast IO": {"prefix": "fio","body": ["std::ios::sync_with_stdio(false);","std::cin.tie(nullptr);"    ],"description": "C++ 快速 IO"  }}

以后只需要输入:

fio

就能快速生成这两行代码。


3. 统一团队或个人代码风格

在项目开发中,一些代码结构最好保持统一,比如:

  • 类定义格式

  • 头文件保护格式

  • 日志输出格式

  • 单元测试模板

  • CMake 目标定义方式

例如 C++ 类模板:

{"Class": {"prefix": "class","body": ["class ${1:ClassName} {","public:","    ${1:ClassName}() = default;","    ~${1:ClassName}() = default;","","private:","    $0","};"    ],"description": "C++ class 模板"  }}

展开后:

classClassName {public:ClassName() =default;~ClassName() =default;private:};

这样可以让项目代码更加规范。


4. 辅助 CMake 项目开发

机器人相关开发经常会涉及 CMake,例如 ROS、ROS 2、传感器驱动、运动控制库、算法模块等都离不开 CMake。

Snippets 可以帮助我们快速生成 CMake 常用配置。

例如:

{"CMake Minimal C++ Project": {"prefix": "cmakemin","body": ["cmake_minimum_required(VERSION ${1:3.16})","","project(${2:MyProject} LANGUAGES CXX)","","set(CMAKE_CXX_STANDARD ${3:17})","set(CMAKE_CXX_STANDARD_REQUIRED ON)","set(CMAKE_EXPORT_COMPILE_COMMANDS ON)","","add_executable(${4:app}","    src/main.cpp",")"    ],"description": "最小 C++ CMake 项目模板"  }}

在 CMakeLists.txt 中输入:

cmakemin

即可生成基础 CMake 项目结构。


5. 配合变量和正则表达式生成更智能的代码

VS Code snippets 支持一些内置变量,例如:

变量含义
$TM_FILENAME当前文件名
$TM_FILENAME_BASE不带扩展名的文件名
$CURRENT_YEAR当前年份
$CURRENT_MONTH当前月份
$CURRENT_DATE当前日期
$SELECTED_TEXT当前选中的文本

例如,根据当前文件名自动生成类名:

{"Class From File Name": {"prefix": "classfile","body": ["class ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/} {","public:","    ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/}() = default;","    ~${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/}() = default;","","private:","    $0","};"    ],"description": "根据文件名生成 PascalCase 类"  }}

假设当前文件名是:

user_service.cpp

展开后会生成:

classUserService {public:UserService() =default;~UserService() =default;private:};

这就是 snippet 中正则转换的典型应用。


三、Snippets 怎么用?

下面以 VS Code 为例,介绍 Snippets 的实际配置方法。


1. 打开 Snippets 配置入口

在 VS Code 中按:

Ctrl + Shift + P

打开命令面板,然后输入:

Configure User Snippets

然后选择对应语言的 snippets 文件。

如果是 C++,选择:

cpp.json

如果是 CMake,选择:

cmake.json

如果想创建所有语言都能用的 snippets,可以选择:

New Global Snippets file...

2. Snippet 的基本结构

一个 snippet 通常由四部分组成:

{"Snippet Name": {"prefix": "trigger","body": ["code line 1","code line 2"    ],"description": "description text"  }}

字段含义如下:

字段作用
Snippet Name代码片段名称
prefix触发词
body展开后的代码内容
description描述信息

例如:

{"Cout": {"prefix": "cout","body": ["std::cout << ${1:value} << '\\n';"    ],"description": "std::cout 输出"  }}

输入:

cout

展开后:

std::cout<<value<<'\n';

3. 占位符用法

Snippets 中最常用的语法是占位符。

$1、$2、$3

表示光标跳转顺序。

{"Function": {"prefix": "func","body": ["${1:void} ${2:functionName}(${3:params}) {","    $0","}"    ],"description": "普通函数模板"  }}

展开后:

voidfunctionName(params) {}

光标会依次跳转到:

  1. void

  2. functionName

  3. params

  4. 函数体


$0

表示最终光标停留位置。

{"If Statement": {"prefix": "if","body": ["if (${1:condition}) {","    $0","}"    ],"description": "if 语句"  }}

相同编号会同步修改

例如:

{"For Loop": {"prefix": "fori","body": ["for (int ${1:i} = 0; ${1:i} < ${2:n}; ++${1:i}) {","    $0","}"    ],"description": "for 循环"  }}

展开后:

for (inti=0; i<n; ++i) {}

如果把第一个 i 改成 j,后面的 i 也会同步变成 j。


4. 选项占位符

Snippets 还支持选项选择。

语法如下:

${1|选项1,选项2,选项3|}

例如 CMake 中经常用到 PRIVATE、PUBLIC、INTERFACE:

{"CMake Target Include Directories": {"prefix": "targetinc","body": ["target_include_directories(${1:target}","    ${2|PRIVATE,PUBLIC,INTERFACE|}","        ${3:${CMAKE_CURRENT_SOURCE_DIR}/include}",")"    ],"description": "给目标添加 include 目录"  }}

展开时可以选择:

PRIVATE

或者:

PUBLIC

或者:

INTERFACE

5. 变量用法

VS Code snippets 支持内置变量。

例如文件头注释:

{"File Header": {"prefix": "header","body": ["/**"," * @file $TM_FILENAME"," * @brief ${1:Description}"," * @date $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE"," */","","$0"    ],"description": "文件头注释"  }}

假设当前文件名是 main.cpp,展开后可能得到:

/*** @file main.cpp* @brief Description* @date 2026-05-14*/

6. 正则转换用法

Snippet 中还可以使用正则表达式对变量或占位符进行转换。

基本语法是:

${变量/正则/替换内容/选项}

例如,把当前文件名转换成大写:

{"Uppercase Filename": {"prefix": "upfile","body": ["${TM_FILENAME_BASE/(.*)/${1:/upcase}/}"    ],"description": "文件名转大写"  }}

如果当前文件是:

hello.cpp

展开结果:

HELLO

常见转换方式:

写法作用
${1:/upcase}转大写
${1:/downcase}转小写
${1:/capitalize}首字母大写
${1:/camelcase}转 camelCase
${1:/pascalcase}转 PascalCase

7. 常用 C++ snippets 示例

下面是一组适合 C++ 日常开发的 snippets,可以放到 cpp.json 中。

{"C++ Main": {"prefix": "maincpp","body": ["#include <iostream>","","int main() {","    $0","    return 0;","}"    ],"description": "C++ main 函数"  },"C++ Main With Fast IO": {"prefix": "mainfast","body": ["#include <iostream>","","int main() {","    std::ios::sync_with_stdio(false);","    std::cin.tie(nullptr);","","    $0","","    return 0;","}"    ],"description": "带快速 IO 的 C++ main 函数"  },"Fast IO": {"prefix": "fio","body": ["std::ios::sync_with_stdio(false);","std::cin.tie(nullptr);"    ],"description": "C++ 快速 IO"  },"For Loop": {"prefix": "fori","body": ["for (int ${1:i} = 0; ${1:i} < ${2:n}; ++${1:i}) {","    $0","}"    ],"description": "普通 for 循环"  },"Range Based For Loop": {"prefix": "fore","body": ["for (const auto& ${1:item} : ${2:container}) {","    $0","}"    ],"description": "范围 for 循环"  },"Cout": {"prefix": "cout","body": ["std::cout << ${1:value} << '\\n';"    ],"description": "std::cout 输出"  },"Debug Print": {"prefix": "dbg","body": ["std::cerr << \"${1:var} = \" << ${1:var} << '\\n';"    ],"description": "调试输出变量"  },"Class": {"prefix": "class","body": ["class ${1:ClassName} {","public:","    ${1:ClassName}() = default;","    ~${1:ClassName}() = default;","","private:","    $0","};"    ],"description": "C++ class 模板"  },"Pragma Once": {"prefix": "once","body": ["#pragma once","","$0"    ],"description": "头文件 pragma once"  }}

8. 常用 CMake snippets 示例

下面是一组适合 CMakeLists.txt 的 snippets,可以放到 cmake.json 中。

{"CMake Minimal C++ Project": {"prefix": "cmakemin","body": ["cmake_minimum_required(VERSION ${1:3.16})","","project(${2:MyProject} LANGUAGES CXX)","","set(CMAKE_CXX_STANDARD ${3:17})","set(CMAKE_CXX_STANDARD_REQUIRED ON)","set(CMAKE_CXX_EXTENSIONS OFF)","set(CMAKE_EXPORT_COMPILE_COMMANDS ON)","","add_executable(${4:app}","    src/main.cpp",")"    ],"description": "最小 C++ CMake 项目模板"  },"CMake Add Executable": {"prefix": "addexe","body": ["add_executable(${1:app}","    ${2:src/main.cpp}",")"    ],"description": "添加可执行文件目标"  },"CMake Target Include Directories": {"prefix": "targetinc","body": ["target_include_directories(${1:target}","    ${2|PRIVATE,PUBLIC,INTERFACE|}","        ${3:${CMAKE_CURRENT_SOURCE_DIR}/include}",")"    ],"description": "给目标添加 include 目录"  },"CMake Target Link Libraries": {"prefix": "targetlink","body": ["target_link_libraries(${1:target}","    ${2|PRIVATE,PUBLIC,INTERFACE|}","        ${3:library}",")"    ],"description": "给目标链接库"  },"CMake Target Compile Options": {"prefix": "targetopts","body": ["target_compile_options(${1:target}","    PRIVATE","        -Wall","        -Wextra","        -Wpedantic",")"    ],"description": "给目标添加编译选项"  }}

四、使用 Snippets 时的常见问题

1. 输入触发词后没有提示怎么办?

可以检查以下几点:

文件语言模式是否正确

VS Code 右下角应该显示当前语言类型,例如:

C++

或者:

CMake

如果语言模式不对,snippet 可能不会触发。


snippet 是否放到了正确文件中

C++ snippets 应该放在:

cpp.json

CMake snippets 应该放在:

cmake.json

JSON 格式是否正确

Snippet 配置是 JSON 格式,常见错误包括:

  • 少写逗号

  • 多写逗号

  • 引号没有闭合

  • 花括号没有配对

  • 反斜杠没有正确转义


是否启用了 Tab 补全

可以在 VS Code 设置中添加:

{"editor.tabCompletion": "on"}

也可以输入触发词后按:

Ctrl + Space

手动调出补全菜单。


2. 特殊字符怎么写?

由于 snippets 写在 JSON 文件中,所以有些字符需要转义。

双引号

如果想生成:

std::cout<<"hello"<<'\n';

在 snippet 中需要写成:

"std::cout << \"hello\" << '\\n';"

反斜杠

如果想生成 C++ 里的 \n,可以写:

"std::cout << ${1:value} << '\\n';"

或者:

"std::cout << ${1:value} << \"\\n\";"

3. 正则中的反斜杠要双写

例如正则中的:

\d+

在 JSON 字符串里要写成:

"\\d+"

这是因为 JSON 本身也使用反斜杠作为转义字符。


五、总结

Snippets 是一个非常轻量但实用的开发效率工具。

它的核心思想很简单:

把经常重复输入的代码结构,提前做成模板,需要时通过触发词快速展开。

对于 C++ 和机器人开发来说,Snippets 可以帮助我们快速生成:

  • C++ 基础代码结构

  • 类、函数、循环、调试语句

  • CMake 项目配置

  • 测试模板

  • 文件头注释

  • 根据文件名生成类名或宏定义

它并不会改变你的编程能力,但可以明显减少机械重复输入,让你把更多精力放在算法、架构和业务逻辑上。

如果你平时使用 Linux + VS Code 进行 C++、CMake、ROS 或机器人相关开发,非常推荐花一点时间配置一套自己的 snippets。配置一次,长期受益。

最新文章

随机文章