sublime text自定义clang format插件格式化C++代码

2023-05-16

本文内容为在windows平台上通过 sublime text开发自定义插件实现调用clang format对C/C++代码进行格式化。需要安装LLVM,下载链接:https://github.com/llvm/llvm-project/releases

例如安装 LLVM-14.0.5-win64.exe。安装后C:\Program Files\LLVM\bin\clang-format.exe可用。

import sublime
import sublime_plugin
import subprocess

class FormatCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        # self.format1(edit)
        self.format2(edit)

    def format_file(self, file_path):
        clang_format_path = r'"C:\Program Files\LLVM\bin\clang-format.exe"'

        cfg_file = r"D:\Users\.clang-format"
        cfg_cmd = ' -style=file:' + cfg_file

        # need llvm > 14.0
        cmd_str = clang_format_path + cfg_cmd + ' -i ' + file_path
        p = subprocess.Popen(cmd_str, shell=True, stdout=subprocess.PIPE).communicate()[0]

    def format1(self, edit):
        """direct format current file"""
        file_path = self.view.window().active_view().file_name()
        self.format_file(file_path)

    def format2(self, edit):
        """save file to temp file and format"""
        whole_region = sublime.Region(0, self.view.size())
        text = self.view.substr(sublime.Region(0, self.view.size()))

        file_path = r'D:\Users\main.cpp'
        with open(file_path, "w") as f:
            f.write(text)

        self.format_file(file_path)

        with open(file_path, "r") as f:
            formatted_text = f.read()

        self.view.replace(edit, whole_region, formatted_text)

clang format创建一个format插件(by Tools > Developer > New Plugin),内容如上,保存为Sublime Text\Packages\User\format.py。

view.run_command('format'),字符串里面是插件名称

ctrl+`打开命令行,然后运行上述命令对当前文件进行格式化

创建自定义插件参考:

ref

Sublime Text 插件开发流程 - 简书

Creating Sublime Text 3 Plugins - Part 1 | CNP

https://betterprogramming.pub/how-to-create-your-own-sublime-text-plugin-2731e75f52d5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sublime text自定义clang format插件格式化C++代码 的相关文章

  • 如何在 Clang 中检测 libstdc++ 版本?

    我想用 Clang 编写一个 可移植 C 库 可移植 意味着我 在 C 预处理器中 检测编译环境中可用的 C 功能 并使用这些功能或提供我的解决方法 这与 Boost 库所做的类似 然而 某些功能的存在并不取决于语言 而是取决于标准库的实现
  • Plotly:如何设置文本格式(下划线、粗体、斜体)

    使用注释时 我尝试在绘图中为文本添加下划线 我使用添加注释 import plotly graph objects as go g go FigureWidget make subplots rows 1 cols 1 g update l
  • 在 Mac OS X Yosemite 10.10.1 上包含搜索路径

    我只是为了更改包含搜索路径顺序 我相信 I d like to change the include search path Especially I need usr local include first 但它不会因为重复而改变 我怎样
  • Clang 与 CLion:无法获取编译器信息

    我尝试通过更改在 CLion 中从 gcc 切换到 clang工具链偏爱 但现在 cmake 失败并显示以下内容 Cannot get compiler information Compiler exited with error code
  • 如何区分哪些 unicode 字符是字母(单词)还是标点符号?

    我想检测文本中的单词 即我需要知道给定文本中的哪些字符是字母 即它们可以是 口语 单词的一部分 另一方面 哪些字符是标点符号等 例如 在上面的句子中 我 想要 和 i 和 e 是这方面的单词 而空格 和逗号则不是 这样做的困难在于我希望能够
  • SQL Server 文本数据类型最大长度 = 65,535?

    我正在使用的软件使用文本字段来存储 XML 根据我的在线搜索 文本数据类型应该包含 2 31 1 个字符 目前 SQL Server 每次都会将 XML 截断为 65 535 个字符 我知道这是由 SQL Server 引起的 因为如果我直
  • 语义问题 Qt Creator:命名空间“std”中没有名为“cout”的成员

    我开始使用 Qt Creator 编写代码 对于 C 文件 我遇到很多语义问题 99 是 命名空间 yyy 中没有名为 xxx 的成员cpp文件构建 编译和输出没有问题 如果我点击例如cout 我已链接到 iostream 我是否需要在 Q
  • 如何将参数传递给 VSCode launch.json 文件中为 lldb 指定的可执行文件?

    我想在 VSCode 中调试这个命令 myExecutable f arg1 g arg2 e arg3 请注意 可执行文件需要 3 个参数 在 lldb 中运行此可执行文件时 我们需要使用 将参数传递给可执行文件 lldb myExecu
  • 我可以在 UITextView 中以编程方式选择文本吗?

    我想在 UITextView 上选择文本 类似于我们点击时看到的默认 选择 和 全选 弹出选项 我希望用户能够从我的自定义菜单中执行此操作 我玩了 selectedRange 但这似乎并没有解决问题 有任何想法吗 Thanks The se
  • 如何格式化 Pandas 中的日期列?

    我有一个数据框df看起来像这样 ID Date 0 1 2008 01 24 1 2 2007 02 17 格式为Date is Y m d 如何将日期格式化为 m d Y format 我尝试使用此语法 但它没有给出正确的格式 df Da
  • 如何使用 BeautifulSoup 只抓取可见的网页文本?

    基本上 我想用BeautifulSoup严格抓住可见文字在网页上 例如 这个网页 http www nytimes com 2009 12 21 us 21storm html是我的测试用例 我主要想获取正文 文章 甚至可能到处都有一些选项
  • 将毫秒转换为人类可读的时间流逝

    我想以人类可读的格式格式化一些命令执行时间 例如 3 gt 3ms 1100 gt 1s 100ms 62000 gt 1m 2s etc 考虑到天 小时 分钟 秒 是否可以使用C 您可以使用 TimeSpan 类 如下所示 TimeSpa
  • clang 编译器从相同的源生成不同的目标文件

    我有一个简单的 hello world Objective C 库 hello m import
  • 编译器对开关的优化是否与长 if-then-else 链不同?

    假设我在编译时已知 N 个不同的积分值 V 1 到 V N 考虑以下结构 const int x foo switch x case V 1 commands for V 1 which don t change x break case
  • UIButton 中的文本下划线

    谁能建议如何在 UIButton 的标题下划线 我有一个自定义类型的 UIButton 我希望标题带有下划线 但 Interface Builder 没有提供任何选项来执行此操作 在 Interface Builder 中 当您为按钮选择字
  • 如何在TextView中显示格式化的金额?

    我有一个货币符号String和金额double 到目前为止 我显示的金额如下 amount setText currency amount 在某些地方我有 2TextViews 显示金额 中间有填充 currency setText cur
  • 寻找引文解析器

    我需要一个解析器来扫描学术文本 提取引文 并将这些引文解析为其组成部分 作者 标题 出版日期等 我尝试过 Paracite 但它速度非常慢 而且不能产生高质量的结果 任何语言都可以 但首选 Java 看一眼ParsCit http aye
  • 使用预编译头减少 clang 编译时间

    我正在开发一个数据库项目 该项目将查询 以某种高级语言表示 编译为 C 代码 这段代码由数据库编译并执行 那部分工作得很好 现在 我正在尝试减少 C 查询代码的编译时间 我想知道是否可以使用预编译头来提高性能 该查询被转换为一个名为 Que
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • jqgrid长文本换行

    在jqgrid中 我们从数据库获取长文本 但在JQgrid中显示时需要换行 有什么方法可以换行长文本 没有任何空格 我们只有 110px 的空间用于收款人姓名字段 因为我们有多个列需要显示 我们的代码就像 name firstPayeeNa

随机推荐

  • MySQL基础汇总

    MySQL基础汇总 文章目录 MySQL基础汇总思维导图索引索引特点优缺点适用场合索引特点优缺点索引使用的注意事项什么情况适用索引什么情况不适用索引 数据库的索引数据结构二分查找树B树B 43 树B树和B 43 树的区别为什么使用B 43
  • Centos7.9离线安装Redis-5.0.4【2022年最新--保姆级部署教程-rpm安装包免费下载】

    1 安装gcc依赖 命令 xff1a yum span class token function install span y gcc c 43 43 注释 xff1a yum安装gcc依赖 2 下载Redis包 点击如下链接下载即可 Re
  • Centos7.5搭建本地Yum源【2022最新--保姆级部署】

    搭建本地yum镜像 1 查看一下系统版本 命令 xff1a cat etc centos release 注释 xff1a 查看系统版本 2 下载对应版本镜像 xff1a 下载OS镜像文件 xff1a CentOS 7 x86 64 Eve
  • Linux防火墙关闭方法

    Linux防火墙关闭方法 关闭防火墙 xff1a 1 查看状态 xff1a systemctl status firewalld 2 关闭 xff1a systemctl stop firewalld xff08 只执行这个 xff0c 重
  • CentOS7使用iptables开放特定端口

    CentOS7 默认使用firewalld防火墙 xff0c 如果想换回iptables防火墙 xff0c 可关闭firewalld并安装iptables 一 关闭firewall xff1a 关闭防火墙 systemctl stop fi
  • SDUT 加密术

    加密术 Time Limit 1000MS Memory limit 65536K 题目描述 加密技术是一种常用的安全保密手段 xff0c 利用加密技术可以把重要的数据变成经过加密变成乱码传送 xff0c 到达目的地后再利用解密手段还原 现
  • 【原创】Ubuntu Server 22.04 LTS 设置主机信息以及IP地址

    1 安装网络工具 xff0c 我们需要nmcli这个工具 span class token function apt get span span class token function install span y network man
  • 【PC微信探秘】把C#的DLL注入到微信中

    NET的DLL不能直接注入 xff0c 需要两步 xff1a 先把C 43 43 的DLL注入 xff0c 然后C 43 43 把 NET的DLL引入 xff1a span class token comment dllmain cpp 定
  • 「xrdp」- 使用 Windows 远程 Linux 主机 @20210130

    xrdp xrdp xff0c 是 RDP 协议的服务端实现 xff0c 基于 FreeRDP 和 rdesktop 的工作 xff0c xrdp 使用 RDP xff08 远程桌面协议 xff09 向用户呈现图形化界面 该项目提供一个功能
  • 使用 STM32CubeMx + VSCode 开发 STM32

    使用 STM32CubeMx 43 VSCode 开发 STM32 目的 1 使用 STM32CubeMX配置STM32开发板 xff0c 生成Makefile工程 2 使用 VSCode 开发并调试 环境及工具 1 STM32CubeMx
  • Rust 编程之道-类型系统

    类型系统 基本类型 一切皆表达式 xff0c 表达式皆有值 xff0c 值皆有类型 xff0c 所以一切皆类型 包括 xff1a 基本类型复合类型作用域返回值 Option xff1c T xff1e Result xff1c T xff0
  • 揭露网络电脑短视频营销号中的套路【完全】

    1 temp 骗局 这是存放缓存文件的文件夹 xff0c 位置在C Users 用户名 AppData Local Temp win 43 r输入 temp xff0c 我们点进去 xff0c 看到文件雀氏非常多 xff0c 但是再一看大小
  • 用中断实现流水灯

    include lt stm32f4xx h gt define GPIO Pin 6 0x0040 LED2 define GPIO Pin 7 0x0080 LED1 define PLL M 8 define PLL N 336 de
  • debian 无法使用apt-get解决办法

    刚装完debian xff0c 发现直接apt get是用不了的 xff0c 系统会提示你插入DVD xff0c 其实是源的配置问题 xff0c 只需要在apt的源里面修改下配置就可以了 打开apt源文件 sudo vi etc apt s
  • 蜗牛星际C单黑群晖加USB网卡做链路聚合

    黑群晖挂载USB网卡 一不小心入了群晖的坑 xff0c 然后就是不停的折腾 xff0c 入手一个蜗牛星际C单 xff0c 装好DS918 43 后 xff0c 家里有ASUS RT AC5300 xff0c 就想着搞个链路聚合 首先当然是去
  • CentOS 7 安装zoneminder

    这里写自定义目录标题 CentOS 7 安装zoneminder1 安装centos系统 xff0c 最小化安装2 配置源3 安装 zoneminder 以及环境4 关闭SELinux5 配置时区6 添加php网页支持7 安装配置数据库8
  • linux deploy linux 安装mariadb 无法启动解决办法

    这里写自定义目录标题 linux deploy linux 安装mariadb 无法启动解决办法 linux deploy linux 安装mariadb 无法启动解决办法 手头一个旧手机 xff0c 就想来折腾一番 xff0c 装到数据库
  • linux deploy 安装debian11 armhf中安装Zoneminder

    linux deploy 安装debian11 stable armhf 中安装Zoneminder 折腾了无数遍 xff0c 然后感觉也没啥用 安装linux deploy 手机获取root权限 安装debian xff08 armhf
  • OpenWRT 中创建docker Openwrt和其他宿主机中的docker容器通信

    这里写自定义目录标题 OpenWRT 中使用创建docker Openwrt和其他宿主机中的docker容器通信网络拓扑一 准备1 openwrt镜像 xff0c 2 安装pve 二 PVE配置1 网络配置2 创建docker networ
  • sublime text自定义clang format插件格式化C++代码

    本文内容为在windows平台上通过 sublime text开发自定义插件实现调用clang format对C C 43 43 代码进行格式化 需要安装LLVM xff0c 下载链接 xff1a https github com llvm