如何配置 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 llvm echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc echo 'export LDFLAGS="-L/usr/local/opt/llvm/lib"' >> ~/.zshrc echo 'export CPPFLAGS="-I/usr/local/opt/llvm/include"' >> ~/.zshrc
Debian(testing)安装clangd和clang
sudo apt install clangd
, sudo apt install llvm
, sudo 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.json
, CMakeLists.txt
的内容如下:
cmake_minimum_required(VERSION 3.22) # Enable C++11 set(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
安装好clang-format
插件之后,只需在project/code
下新建.clang-format
文件,写入以下内容
抄的网上的,修改了大括号换行的部分(左大括号不单独位于一行)
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto Language: 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(定义在类中,空函数), All AllowShortFunctionsOnASingleLine: 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: AfterColon BreakStringLiterals: false # 每行字符的限制,0表示没有限制 ColumnLimit: 0 CompactNamespaces: true # 构造函数的初始化列表要么都在同一行,要么都各自一行 ConstructorInitializerAllOnOneLineOrOnePerLine: false # 构造函数的初始化列表的缩进宽度 ConstructorInitializerIndentWidth: 4 # 延续的行的缩进宽度 ContinuationIndentWidth: 4 # 去除C++11的列表初始化的大括号{后和}前的空格 Cpp11BracedListStyle: true # 继承最常用的指针和引用的对齐方式 DerivePointerAlignment: false # 固定命名空间注释 FixNamespaceComments: true # 缩进case标签 IndentCaseLabels: false IndentPPDirectives: None # 缩进宽度 IndentWidth: 4 # 函数返回类型换行时,缩进函数声明或函数定义的函数名 IndentWrappedFunctionNames: false # 保留在块开始处的空行 KeepEmptyLinesAtTheStartOfBlocks: false # 连续空行的最大数量 MaxEmptyLinesToKeep: 1 # 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), All NamespaceIndentation: None # 指针和引用的对齐: Left, Right, Middle PointerAlignment: Right # 允许重新排版注释 ReflowComments: true # 允许排序#include SortIncludes: false # 允许排序 using 声明 SortUsingDeclarations: false # 在C风格类型转换后添加空格 SpaceAfterCStyleCast: false # 在Template 关键字后面添加空格 SpaceAfterTemplateKeyword: true # 在赋值运算符之前添加空格 SpaceBeforeAssignmentOperators: true # SpaceBeforeCpp11BracedList: true # SpaceBeforeCtorInitializerColon: true # SpaceBeforeInheritanceColon: true # 开圆括号之前添加一个空格: Never, ControlStatements, Always SpaceBeforeParens: ControlStatements # SpaceBeforeRangeBasedForLoopColon: true # 在空的圆括号中添加空格 SpaceInEmptyParentheses: false # 在尾随的评论前添加的空格数(只适用于//) SpacesBeforeTrailingComments: 1 # 在尖括号的<后和>前添加空格 SpacesInAngles: false # 在C风格类型转换的括号中添加空格 SpacesInCStyleCastParentheses: false # 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格 SpacesInContainerLiterals: true # 在圆括号的(后和)前添加空格 SpacesInParentheses: false # 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响 SpacesInSquareBrackets: false # 标准: Cpp03, Cpp11, Auto Standard: Cpp11 # tab宽度 TabWidth: 4 # 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always UseTab: 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 # author author: zwyyy456 language: en code: lang: cpp leetcode: site: https://leetcode.com # credentials: # from: browser editor: use: custom command: "subl" # use: vscode
到此这篇关于配置 Sublime Text4为 C++ 编辑器的文章就介绍到这了,更多相关Sublime Text4配置C++内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论