【嵌入式工具】Keil自制格式化插件

1 前期教程

  • 【嵌入式工具】Keil下载,安装,配置教程大全

2 前言

  上面的前期教程当中,对keil的下载,安装以及配置都讲得非常清楚了,但是最近遇到一个问题,那就是网上找的代码非常杂乱,即使使用AStyle插件对其进行格式化之后,行尾空格或者文件末尾空行仍然消除不掉,让强迫症的我非常不适,因为我非常喜欢VSCode中保存文件即删除行尾空格和文件末空行的设置,于是就想给Keil这个“上古编辑器”也整一个。

3 keil插件制作

  好在Keil虽然样式老,但还支持插件扩展功能,因此可以自己写一个插件来实现想要的功能,不过首先需要对插件运行原理有一个基本的了解。

  插件设置在菜单栏Tools中:
【嵌入式工具】Keil自制格式化插件_第1张图片

【嵌入式工具】Keil自制格式化插件_第2张图片

这个界面非常简单,就是三个框设置:运行指令(点击按钮执行的是哪个指令),初始位置(指令执行时所在的位置,可能涉及到当前文件夹的问题),参数(指令运行时需要添加的参数);右边三个复选框,其中Run Minimized是指运行时不产生黑框(如果有的话),Prompt for Argument字面意思理解应该是会弹出参数输入的提示,没用过,Run Independent,独立运行,也没用过。
  重点是参数部分,!E表示当前编辑的文本文件;$E表示当前编辑的文本文件所在的文件夹。其他的就不怎么常用了。

其他更多指令建议参考这篇文章


  OK,理解了基本逻辑,现在就可以开始制作插件,使用的编程语言是最熟悉的python,但是由于这里的Command不支持py脚本,还需要自己导出成执行程序,使用的是pyinstaller这个包。

【Python】pyinstaller完整使用教程

  我想要实现的功能主要是删除每一行的行尾空格以及文件末尾的多余空行(只保留一个空行),代码如下:

## format.py
import chardet, sys, glob

def format_file(filename, default_encoding='gb2312'):
    '''	@func: 去除文件末空白行, 去除行尾空格
        @para	filename:文件名; default_encoding:默认编码
        @return: None
    '''
    try:
        content = open(filename, 'rb').read()  # 以字节方式读取
    except:
        print("文件"+filename+"打开失败")
    source_encoding = chardet.detect(content)['encoding']
    string = content.decode(source_encoding if source_encoding else default_encoding, 'ignore')
    out = "\n".join(map(str.rstrip, string.rstrip().splitlines())) #删除文件末空行,并去除行尾空格
    out = out + "\n"  #行尾加一行空行
    if out == string:
        print("文件"+filename+"不需要格式化")
        return
    with open(filename, 'w') as f:
        f.write(out)
    print("文件"+filename+"格式化完成")

if __name__ ==  "__main__":
    try:
        filename = sys.argv
        filelist = sum(list(map(glob.glob, filename[1:])), []) #获取所有文件名
        # print(filelist)
        list(map(format_file, filelist))
    except Exception as e:
        print(str(e))
        # print("参数传入错误或没有传入参数")

然后再使用pyinstaller将脚本导出成执行程序:

pyinstaller -Fw ./format.py

参数可以按照下面这张图设置,实现的是一个文件夹中所有.c.h文件都格式化:

【嵌入式工具】Keil自制格式化插件_第3张图片

4 其他教程

  • kei的几个插件——个人觉得这几个插件都意义不大,因为这几个功能可以用 快速模板 一定程度上代替,而且插件会删除掉更改历史记录,即不能撤回,不是很方便。
  • 改变文件可读属性——这个有点意思,使用的指令不是执行程序,而是bat文件,且内容比较全面。

你可能感兴趣的:(嵌入式专栏,keil,教程,插件,python,格式化)