写点什么

如何配置 Sublime Text4 为 C++ 编辑器

作者:向阳逐梦
  • 2023-07-28
    四川
  • 本文字数:4933 字

    阅读完需:约 16 分钟

如何配置 Sublime Text4为 C++ 编辑器

概述

涉及以下插件的安装和配置Package Control Terminus LSP LSP-clangd clang-format LSP-pyright LSP-json

配置 sublime

安装Package Control以进行包管理。

Terminus

安装Terminus以实现 sublime text4 内的 terminal。

绑定快捷键:

[	{		"keys": [			"ctrl+shift+t"		],		"command": "terminus_open",		"args": {            // 打开时要执行的命令            // "cmd": "fish",			"cwd": "${file_path:${folder}}"		}	}]
复制代码

自定义在Terminus的终端中编译运行 cpp 文件:

Tools->Build System->New Build System中新建编译文件,保存为CppTerminus.sublime-build,替换内容为:

{	// MacOS	"cmd": [		"zsh",		"-c",		"clang++ '${file}' -std=c++17 -stdlib=libc++ -o '${file_path}/../bin/${file_base_name}' && ${file_path}/../bin/${file_base_name}"	],	"file_regex": "^(..{FNXX==XXFN}*):([0-9]+):?([0-9]+)?:? (.*)$",	"working_dir": "${file_path}",	"encoding": "utf-8",	"selector": "source.c, source.c++",	"variants": [		{			"name": "Run In Terminus",			"target": "terminus_exec",			"cancel": "terminus_cancel_build",			"cmd": [				"zsh",				"-c",				"clang++ '${file}' -std=c++17 -stdlib=libc++ -o '${file_path}/../bin/${file_base_name}' && ${file_path}/../bin/${file_base_name}"			]		},		{			"name": "Create Input File",			"cmd": [				"zsh",				"-c",				"touch ${file_path}/../in_out/${file_base_name}.in && open -a Sublime\\ Text ${file_path}/../in_out/${file_base_name}.in"			]		},		{			"name": "Run In Terminal",			"cmd": [				"zsh",				"-c",				"clang++ '${file}' -std=c++17 -stdlib=libc++ -o '${file_path}/../bin/${file_base_name}' && open -a Terminal.app '${file_path}/../bin/${file_base_name}'"			]		},	]}
复制代码

注意要保证源文件和bin文件夹、in_out文件夹在同一目录下。

配置 LSP + LSP-clangd

安装这两个插件,windows 和 linux 需要手动安装clangd并添加到 path。

mac 下安装 clangd

我的 mac 已经自带了clangd,安装好这两个插件即可实现语法提示; 如果没有安装clangd,通过以下命令安装:

brew install llvmecho 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrcecho 'export LDFLAGS="-L/usr/local/opt/llvm/lib"' >> ~/.zshrcecho 'export CPPFLAGS="-I/usr/local/opt/llvm/include"' >> ~/.zshrc
复制代码

Debian(testing)安装 clangd 和 clang

sudo apt install clangdsudo apt install llvmsudo apt install clang

windows 下安装 llvm

借助 scoop, scoop install llvm 然后安装 Visual Stdudio Build Tools,鉴于 windows 上 clang 默认的 c++库就是 msvc,所以就用这个吧,别折腾mingw了.

配置 LSP-clangd

Preferences->Package Settings->LSP->Settings,写入这样几行

{    // 在主页面只显示error红色下划线    //"show_diagnostics_severity_level": 1,    // 代码提示显示灯泡图标    "show_code_actions": "bulb",    // 保存时自动格式化    "lsp_format_on_save": true,}
复制代码

再到Preferences->Package Settings->LSP->Servers->LSP-clangd中,写入以下几行

// Settings in here override those in "LSP-clangd/LSP-clangd.sublime-settings"{    "initializationOptions": {        // 启用clang-tidy代码检查,可能启用后warning会比较多,自己看着办吧        "clangd.clang-tidy": true,        // 美化clangd输出的JSON        "clangd.pretty": true,    }}
复制代码

再到project/code(源文件所在目录)下新建.clang-tidy文件,写入:

Checks: "bugprone-*,\google-*,\misc-*,\modernize-*,\performance-*,\readability-*,\portability-*,\"HeaderFilterRegex: 'Source/cm[^/]*\.(h|hxx|cxx)$'CheckOptions:  - key:   modernize-use-default-member-init.UseAssignment    value: '1'  - key:   modernize-use-equals-default.IgnoreMacros    value: '0'  - key:   modernize-use-auto.MinTypeNameLength    value: '80'
复制代码

LSP-clangd 默认是使用c++98来检查代码的,要修改为c++17,需要在项目根目录下新建.clangd文件,文件内容如下:

CompileFlags:	Add: [-std=c++17]
复制代码

推荐方式为利用cmake生成compile_commands.jsonCMakeLists.txt的内容如下:

cmake_minimum_required(VERSION 3.22)# Enable C++11set(CMAKE_CXX_STANDARD 17)# 设置项目名project(LeetCpp)# 源文件aux_source_directory(. SOURCES)# 头文件include_directories(.)add_executable(${PROJECT_NAME} ${SOURCES})
复制代码

通过cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=1生成compile_commands.json文件,注意要在build目录下,且build的上级目录存在CMakelists.txt

安装好clang-format插件之后,只需在project/code下新建.clang-format文件,写入以下内容

# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProtoLanguage: Cpp# BasedOnStyle: LLVM# 访问说明符(public、private等)的偏移AccessModifierOffset: -2# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)AlignAfterOpenBracket: Align# 连续赋值时,对齐所有等号AlignConsecutiveAssignments: false# 连续声明时,对齐所有声明的变量名AlignConsecutiveDeclarations: false# 右对齐逃脱换行(使用反斜杠换行)的反斜杠AlignEscapedNewlines: Right# 水平对齐二元和三元表达式的操作数AlignOperands: true# 对齐连续的尾随的注释AlignTrailingComments: true# 不允许函数声明的所有参数在放在下一行AllowAllParametersOfDeclarationOnNextLine: false# 不允许短的块放在同一行AllowShortBlocksOnASingleLine: true# 允许短的case标签放在同一行AllowShortCaseLabelsOnASingleLine: true# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), AllAllowShortFunctionsOnASingleLine: None# 允许短的if语句保持在同一行AllowShortIfStatementsOnASingleLine: true# 允许短的循环保持在同一行AllowShortLoopsOnASingleLine: true# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数), # AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)AlwaysBreakAfterReturnType: None# 总是在多行string字面量前换行AlwaysBreakBeforeMultilineStrings: false# 总是在template声明后换行AlwaysBreakTemplateDeclarations: true# false表示函数实参要么都在同一行,要么都各自一行BinPackArguments: true# false表示所有形参要么都在同一行,要么都各自一行BinPackParameters: true# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效BraceWrapping:  # class定义后面  AfterClass: false  # 控制语句后面  AfterControlStatement: false  # enum定义后面  AfterEnum: false  # 函数定义后面  AfterFunction: false  # 命名空间定义后面  AfterNamespace: false  # struct定义后面  AfterStruct: false  # union定义后面  AfterUnion: false  # extern之后  AfterExternBlock: false  # catch之前  BeforeCatch: false  # else之前  BeforeElse: false  # 缩进大括号  IndentBraces: false  # 分离空函数  SplitEmptyFunction: false  # 分离空语句  SplitEmptyRecord: false  # 分离空命名空间  SplitEmptyNamespace: false# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)BreakBeforeBinaryOperators: NonAssignment# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似), #   Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似), #   Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom#   注:这里认为语句块也属于函数BreakBeforeBraces: Custom# 在三元运算符前换行BreakBeforeTernaryOperators: false# 在构造函数的初始化列表的冒号后换行BreakConstructorInitializers: AfterColon#BreakInheritanceList: AfterColonBreakStringLiterals: false# 每行字符的限制,0表示没有限制ColumnLimit: 0CompactNamespaces: true# 构造函数的初始化列表要么都在同一行,要么都各自一行ConstructorInitializerAllOnOneLineOrOnePerLine: false# 构造函数的初始化列表的缩进宽度ConstructorInitializerIndentWidth: 4# 延续的行的缩进宽度ContinuationIndentWidth: 4# 去除C++11的列表初始化的大括号{后和}前的空格Cpp11BracedListStyle: true# 继承最常用的指针和引用的对齐方式DerivePointerAlignment: false# 固定命名空间注释FixNamespaceComments: true# 缩进case标签IndentCaseLabels: falseIndentPPDirectives: None# 缩进宽度IndentWidth: 4# 函数返回类型换行时,缩进函数声明或函数定义的函数名IndentWrappedFunctionNames: false# 保留在块开始处的空行KeepEmptyLinesAtTheStartOfBlocks: false# 连续空行的最大数量MaxEmptyLinesToKeep: 1# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), AllNamespaceIndentation: None# 指针和引用的对齐: Left, Right, MiddlePointerAlignment: Right# 允许重新排版注释ReflowComments: true# 允许排序#includeSortIncludes: false# 允许排序 using 声明SortUsingDeclarations: false# 在C风格类型转换后添加空格SpaceAfterCStyleCast: false# 在Template 关键字后面添加空格SpaceAfterTemplateKeyword: true# 在赋值运算符之前添加空格SpaceBeforeAssignmentOperators: true# SpaceBeforeCpp11BracedList: true# SpaceBeforeCtorInitializerColon: true# SpaceBeforeInheritanceColon: true# 开圆括号之前添加一个空格: Never, ControlStatements, AlwaysSpaceBeforeParens: ControlStatements# SpaceBeforeRangeBasedForLoopColon: true# 在空的圆括号中添加空格SpaceInEmptyParentheses: false# 在尾随的评论前添加的空格数(只适用于//)SpacesBeforeTrailingComments: 1# 在尖括号的<后和>前添加空格SpacesInAngles: false# 在C风格类型转换的括号中添加空格SpacesInCStyleCastParentheses: false# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格SpacesInContainerLiterals: true# 在圆括号的(后和)前添加空格SpacesInParentheses: false# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响SpacesInSquareBrackets: false# 标准: Cpp03, Cpp11, AutoStandard: Cpp11# tab宽度TabWidth: 4# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, AlwaysUseTab: Never
复制代码

命令行使用 sublime text4 打开文件

mac 下添加软连接: ln /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl

debian 下执行sudo ln -s /opt/sublime_text/sublime_text /usr/local/bin/subl

之后就能用subl test.cpp命令来调用 sublime text4 打开test.cpp了。

leetcode 相关配置

安装 leetgo: brew install j178/tap/leetgo

在预期的 leetcode 项目目录下执行leetgo init,然后配置leetgo.yaml

# leetgo project level config, global config is at /Users/zwy/.config/leetgo/config.yaml# for more details, please refer to https://github.com/j178/leetgo# authorauthor: zwyyy456language: encode:  lang: cppleetcode:  site: https://leetcode.com#  credentials:#    from: browsereditor:  use: custom  command: "subl"  # use: vscode
复制代码


发布于: 刚刚阅读数: 5
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022-06-01 加入

某公司芯片测试工程师,嵌入式开发工程师,InfoQ签约作者,阿里云星级博主,华为云·云享专家。座右铭:向着太阳,追逐梦想!

评论

发布
暂无评论
如何配置 Sublime Text4为 C++ 编辑器_向阳逐梦_InfoQ写作社区