解决Sublime Text写markdown无法直接粘贴图片的问题

嵇财
2023-12-01

因为工作需要,经常要写各种报告,用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.监视文本剪贴板,按下“快捷键”如果是图片文件后缀名,自动用![xxxxx](xxxx)插入文档。结果发现,这个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")

绑定快捷键即可

 类似资料: