将vscode打造成无敌的IDE初步探索vscode,解放生产力
Posted 奇妙之二进制
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将vscode打造成无敌的IDE初步探索vscode,解放生产力相关的知识,希望对你有一定的参考价值。
上一节给大家介绍了vscode,今天带领大家一步步搭建vscode下的C/C++开发环境。
1、如何安装插件
以安装C/C++插件为例:
打开vscode,按照以下步骤安装
2、C/C++插件–C/C++开发必备
从事Linux C/C++开发,C/C++是必须安装的第一个插件,它提供了代码智能、调试、浏览等功能。vscode的所有插件都会安装在C:\\Users\\用户名\\.vscode\\extensions
目录下。
接下来探索下C/C++插件的功能。熟悉二进制君的同学都知道,二进制君的治学态度是,一个课题必定要研究彻底,穷尽到没有内容可以研究为止。所以对于vscode的插件,二进制君坚持的态度就是宁缺勿滥,对于插件的每一个配置,也都尽量彻底了解,以发挥插件的最大功能。
代码智能补全提示:
C语言glibc库,C++ STL库都支持。
代码导航:
- 跳转定义
- 跳转声明
- 跳转类型定义
- 跳转引用
跳转定义的快捷键是F12
,但是我们更习惯使用ctl+鼠标左键单击。
此外还增加了代码格式化、符号重命名(F2
)、头文件和源文件相互切换(alt+O
)、文件内符号跳转、全局符号跳转等功能。
左侧还增加了一个大纲视图,自动解析出当前文件的符号:
配置代码格式化:
安装了C/C++插件后就支持代码格式化功能了,也不用去安装额外的代码格式化插件。C/C++代码格式都是基于clang-format
工具做的,安装C/C++插件后就自动安装了clang-format工具,只不过有一些配置需要我们自己设置(vscode这点做得不好),截图如下:
代码格式化需要指定格式化风格,提供了自定义(配置为file)、Google、LLVM等。
对于C/C+,谷歌风格是一个不错的风格,建议大家采用,关于谷歌风格的说明可以参考:https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/contents/
最后,再开启保存自动格式化功能,还可以设置格式化模式(整个文件格式化、只对改动处格式化):
关于代码格式化工具clang-format,我们会另开一篇介绍。
3、为代码中的括号添上一抹亮色
在代码编写过程中,各种括号 [()] 必不可少。然而,随着代码量的增加,你有没有因为括号的嵌套太多,而导致代码难以阅读?
我们来看看下面的代码:
这还让我们怎么愉快地Code Review或是改代码?
不用怕!vscode支持为代码中各种结对的括号兄弟们提供了颜色高亮等功能。
配置中搜索bracket:
我们再来看看,配置之后的效果。各个结对的括号兄弟都有了不同的颜色。不管是Code Review或是改代码,都便利了许多呢!
默认匹配三层颜色后,颜色又重复循环,但别担心,支持自定义每一层的颜色:
下面定义了6种颜色,大家贴到自己的setting.json文件里即可使用。
"workbench.colorCustomizations":
"editorBracketHighlight.foreground1": "#ffd700",
"editorBracketPairGuide.activeBackground1": "#ffd7007f",
"editorBracketHighlight.foreground2": "#da70d6",
"editorBracketPairGuide.activeBackground2": "#da70d67f",
"editorBracketHighlight.foreground3": "#87cefa",
"editorBracketPairGuide.activeBackground3": "#87cefa7f",
"editorBracketHighlight.foreground4": "#3905f7",
"editorBracketPairGuide.activeBackground4": "#3905f7",
"editorBracketHighlight.foreground5": "#66031c",
"editorBracketPairGuide.activeBackground5": "#66031c",
"editorBracketHighlight.foreground6": "#04f541",
"editorBracketPairGuide.activeBackground6": "#04f541",
"editorBracketHighlight.unexpectedBracket.foreground": "#ff0000",
, // 开启原生括号着色
"editor.guides.bracketPairs": "active",// 开启 active 时的代码块边缘导轨线着色
"editor.bracketPairColorization.enabled": true // 开启括号匹配上色功能
4、代码片段一触即发–解放生产力
代码片段英文叫code snippet,就是事先准备好一些常用的代码片段,在敲代码时,只需输入前缀,如果匹配到了就会自动提示你是否采用。vscode无需安装任何插件就可以实现这一功能。
先秀一把效果,写一个类要敲一堆东西,比如构造函数、析构函数,为何不提炼成代码片段呢?
我们来插入自己的代码片段:
点击User Snippets后会弹出一个小框,我们输入想要的语言简称即可为该语言创建代码片段,如c、cpp、py,会为该语言创建一个json文件。代码片段的书写语法这里就不细说了,感兴趣自行百度,这里我根据谷歌风格写了一个C++的代码片段:
"for":
"prefix": "for",
"body": [
"for ($size_t $i = $1:0; $i < $2:len; $i++) ",
" $3",
""
],
"description": "A Code snippet for 'for' loop"
,
"forr":
"prefix": "forr",
"body": [
"for (int $i = $1:len - 1; $i >= $2:0; $i--) ",
" $3",
""
],
"description": "Code snippet for reverse 'for' loop"
,
"do":
"prefix": "do",
"body": [
"do ",
" $1",
" while($2:condition);"
],
"description": "Code snippet for do...while loop"
,
"while":
"prefix": "while",
"body": [
"while ($1:condition) ",
" $2",
""
],
"description": "Code snippet for while loop"
,
"foreach":
"prefix": "foreach",
"body": [
"for(auto& $var : $1:list) ",
" $2",
""
],
"description": "Code snippet for const range-based for loop (c++11) statement"
,
"foreachconst":
"prefix": "foreachconst",
"body": [
"for(const auto& $var : $1:list) ",
" $2",
""
],
"description": "Code snippet for const range-based for loop (c++11) statement"
,
"if":
"prefix": "if",
"body": [
"if ($1:condition) ",
" $2",
""
],
"description": "Code snippet for if statement"
,
"else":
"prefix": "else",
"body": [
"else ",
" $1",
""
],
"description": "Code snippet for else statement"
,
"else if":
"prefix": "else if",
"body": [
"else if ($1:condition) ",
" $2",
""
],
"description": "Code snippet for else-if statement"
,
"enum":
"prefix": "enum",
"body": [
"enum $1:MyEnum ",
" $2",
";"
],
"description": "Code snippet for enum"
,
"enum class":
"prefix": "enum class",
"body": [
"enum class $1:MyClass $2 ;"
],
"description": "Code snippet for enum class (c++11)"
,
"class":
"prefix": "class",
"body": [
"class $1:MyClass ",
" public:",
" $1();",
" $1($1 &&) = default;",
" $1(const $1 &) = default;",
" $1 &operator=($1 &&) = default;",
" $1 &operator=(const $1 &) = default;",
" ~$1();",
"",
" private:",
" $2",
";",
"",
"$1::$1() ",
"",
"",
"$1::~$1() ",
""
],
"description": "Code snippet for class"
,
"classi":
"prefix": "classi",
"body": [
"class $1:MyClass ",
" public:",
" $1() = default;",
" $1($1 &&) = default;",
" $1(const $1 &) = default;",
" $1 &operator=($1 &&) = default;",
" $1 &operator=(const $1 &) = default;",
" ~$1() = default;",
"",
" private:",
" $2",
";"
],
"description": "Code snippet for class with inline constructor/destructor"
,
"namespace":
"prefix": "namespace",
"body": [
"namespace $1:MyNamespace ",
" $2",
" // $1"
],
"description": "Code snippet for namespace"
,
"#ifdef":
"prefix": "#ifdef",
"body": [
"#ifdef $DEBUG",
"$1",
"#endif // $DEBUG"
],
"description": "Code snippet for #ifdef"
,
"#ifndef":
"prefix": "#ifndef",
"body": [
"#ifndef $1:1",
"$2",
"#endif // !$1"
],
"description": "Code snippet for #ifndef"
,
"#if":
"prefix": "#ifdef",
"body": [
"#ifdef $1:0",
"$2",
"#endif // $1"
],
"description": "Code snippet for #if"
,
"struct":
"prefix": "struct",
"body": [
"struct $1:MyStruct ",
" $2",
";"
],
"description": "Code snippet for struct"
,
"switch":
"prefix": "switch",
"body": [
"switch ($1:switch_on) ",
" case $2:A:",
" $3",
" break;",
" default:",
" break;",
""
],
"description": "Code snippet for switch statement"
,
"try":
"prefix": "try",
"body": [
"try ",
" $1",
"",
"catch (const std::exception&) ",
" $2",
""
],
"description": "Code snippet for try catch"
,
"union":
"prefix": "union",
"body": [
"union $1:MyUnion ",
" $2",
";"
],
"description": "Code snippet for union"
,
"cout":
"prefix": "cout",
"body": [
"std::cout << \\"$1:/* message */\\" << std::endl;"
],
"description": "Code snippet for printing to std::cout, provided the header is set"
,
"#inc":
"prefix": "#inc",
"body": [
"#include \\"$1\\""
],
"description": "Code snippet for #include \\" \\""
,
"#inc<":
"prefix": "#inc<",
"body": [
"#include <$1>"
],
"description": "Code snippet for #include < >"
,
"#def":
"prefix": "#def",
"body": [
"#define $1 ($2)"
],
"description": "Code snippet for #define ( )"
,
"main":
"prefix": "main",
"body": [
"int main(int argc, const char** argv) ",
" $1"
" return 0;",
""
],
"description": "Code snippet for main function"
"join":
"prefix": "join",
"body": [
"if($1:thread_.joinable()) ",
" $1.join();"
" LOG(INFO) << "$1 join success";
""
],
"description": "Code snippet for thread join"
更多精彩内容,下期见…
以上是关于将vscode打造成无敌的IDE初步探索vscode,解放生产力的主要内容,如果未能解决你的问题,请参考以下文章
将vscode打造成无敌的IDE打造shell IDE--三大神器