因为工作需要,经常要写各种报告,用Markdown非常方便,用过文本编辑器就可以开始写,而且可以自动生成PDF文件,排版效果统一。
以前用VS Code,工作中经常需要截图,配合插件写MD舒服的不要不要的,但是VS Code的启动速度和SB、Notepad++之文本编辑器差了一个档次,经过一段时间的挣扎,终于决定换主力文本编辑器为Sublime Text3,但是用着用着发现,写MD的插件对于图片处理非常糟糕,所谓的插入image功能,只是说可以插入一个“![]()”的字符串,剩下的还是要你自己去写。我的天哪。太繁琐了。
别人不行,那我就自己写吧。
目标是和VS Code一样,图片复制到剪贴板,然后一个“快捷键”,自动保存到md文件下image目录,按照日期进行排列命名,说干就干,结果发现剪贴板是个难题,Sublime Text 3 只支持文本剪贴板,要想图片剪贴板,python需要安装第三方库,怎么把第三方库装到Sublime Text 3 的python环境里面去?不会啊!
换思路
1. 用截图软件截图,设置自动保存到md文件同目录的image子目录上,写一个插件,每次按下“快捷键”,将最新的“image/xx.jpg”,写入文档。
2.监视文本剪贴板,按下“快捷键”如果是图片文件后缀名,自动用插入文档。结果发现,这个sb3的剪贴板非常干脆,不能支持文件,好了,只能实现上一个思路。
说干就干,直接贴代码
import sublime
import sublime_plugin
import sys
import os
class SaveImage(sublime_plugin.TextCommand):
flist=[]
path = ""
def on_done(self, id):
if(id < 0):
return
print(self.flist[id])
def run(self, edit):
# self.view.insert(edit, 0, "")
full = self.view.file_name()
print("full", full)
[p,f] = os.path.split(full)
print("p", p)
print("f", f)
# 处理剪贴板
clipf = sublime.get_clipboard()
print("clipf", clipf)
for root,dirs,files in os.walk(os.path.join(p,"image")):
print("root", root)
print("dirs", dirs)
print("files", files)
mtime=0
lastfile=""
for f1 in files:
(main,ext) = os.path.splitext(f1)
print("ext",ext)
if ext and ext.lower() not in [".jpg",".png",".gif",".bmp",".jpeg"]:
continue
mtime1 = os.path.getmtime(os.path.join(root,f1))
if mtime < mtime1:
lastfile = os.path.join("image", f1)
mtime=mtime1
self.flist = files
self.path = root
for regoin in self.view.sel():
self.view.insert(edit,regoin.begin(),"![%s]()"%lastfile)
# self.view.show_popup_menu(self.flist, self.on_done)
Sublime Text3 保存在 packages目录下,自己同名目录,同名.py
测试执行
view.run_command("save_image")
绑定快捷键即可