my first blog

在学习过程中突然有了记笔记的想法,这样可以时时记录学习过程,免得导师问这周干了什么的时候只能擦汗,于是就想到了搭建个人博客,用日记记录日常学习的过程。
因为文档生成有一个固定的模板,方便博客框架对文档信息进行渲染显示,因此为了避免每次都需要复制粘贴这个模板,我就用自动化脚本的方式来完成这一过程。

保存时运行脚本

vscode中下载run on save插件,并在setting.json中文件进行设置

1
2
3
4
5
6
7
8
"emeraldwalk.runonsave": {
"commands": [
{
"match": "\\.md$",
"cmd": "python ${workspaceFolder}/your_script_path.py ${file}"
}
]
}

这样就能匹配所有md文件,在保存过程中调用python脚本,
python脚本是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import re
from datetime import datetime
import sys

# 获取当前日期和时间
current_datetime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
file_path = sys.argv[1]

def update_or_insert_updated_field(content, current_datetime):
# 检测是否已存在updated字段,并准备相应的正则表达式
updated_pattern = re.compile(r'updated: [\d-]+\s[\d:]+')
date_pattern = re.compile(r'date: [\d-]+\s[\d:]+')

if updated_pattern.search(content):
# 如果存在updated字段,则更新其值
updated_content = updated_pattern.sub(f'updated: {current_datetime}', content)
else:
# 如果不存在updated字段,找到date字段并在其下插入updated字段
def replacement(match):
return f"{match.group(0)}\nupdated: {current_datetime}"
updated_content = date_pattern.sub(replacement, content)

return updated_content

with open(file_path, 'r+', encoding='utf-8') as file:
content = file.read()
updated_content = update_or_insert_updated_field(content, current_datetime)
file.seek(0)
file.write(updated_content)
file.truncate()

它能自动获取md文档,并在文档顶部的模板中更新updated时间
使用

1
hexo new page_name

就能新建一个含有原始文档模板的文件

vscode扩展插件

乐坏了,上面的脚本不用了,我直接用gpt4,0基础从0开发了vscode插件。

gpt4写起来很快,调试过程很漫长
而且没学过typescript,也没开发过vscode插件,测试代码非常非常困难
生成一个能初步完成要求的插件发布插件只有和gpt4交谈半个多小时,解决bug得要浪费一个下午

步骤大概如下

  1. 首先需要确保有node.js和vscode
  2. 运行下列代码来创建插件骨架
    1
    2
    npm install -g yo generator-code
    yo code
  3. 然后就是代码内容了,在extension.ts中编写就行了

    具体见github

其中出现比较多的问题就是正则匹配的问题,不过出现什么问题把问题描述一遍给gpt4听就完事了。

  1. 最后就是打包
1
vsce package

然后就能在vscode的插件市场的右上角以vsix的方式进行安装,就能使用了。

目前的功能只有在hexo项目下对新建的md文件插入顶部模板的作用,后续可能还会再加吧

累一天没多大收获的想法就是:可以学学prompt更好地来用gpt4

还要学习下typescript,感觉写插件什么的还挺有意思的,
下次想写一个自己的代码生成插件什么的

hexo_helper update

现在插件可以在文件保存之后自动提交文档了,美妙的了
主要的逻辑就是我默认了如果文章有了标题之后就可以进行部署

代码也比较简单就是在保存的时候直接提交命令就行
代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function deployHexoBlog() {
return new Promise((resolve, reject) => {
//const options = { cwd: 'D:\\hexo_blog\\blog' }; // 替换为您的Hexo根目录
exec('cd D:\\hexo_blog\\blog & hexo cl & hexo g & hexo d', (error, stdout, stderr) => {
console.log('stdout:', stdout);
console.log('stderr:', stderr);
if (error) {
vscode.window.showErrorMessage(`🥵 Something wrong in deploying blog: ${error}`, { modal: true });
console.error(`exec error: ${error}`);
reject(error);
return;
}
vscode.window.showInformationMessage('🥳 Yes!Blog deployed successfully!');
resolve(stdout);
});
});
}

全是GPT的功劳!
现在可以说我的插件该有名字了,也算是我的一个小项目
后期更新的话可能会引入配置文件了是,让模板和tags都能在配置中进行更改
再进一步可以引申到更多的文件类型和模板!🥰

todo list

  • 保存文件时弹出窗口选择文章tags
  • ~~完成一篇大模型公平性文献阅读 收集几篇大模型公平性论文
  • B站视频本地部署llama2 ~~下载不了模型纯纯小问题
  • 更新插件让它能在保存时自动提交
  • 搞个图床,找一些高清图像资源,把博客背景和文章封面什么的都换了