一、准备工作
1、查看sublime支持的python版本:打开sublime软件后,点击菜单栏的view按钮,选择显示控制台,会在软件的下方出现sublime控制台,在控制台输入以下命令查看sublime内置的python版本

比如我的sublime内置版本是python3.18.12,下面所有的配置教程将以python3.8.12为基础进行。
2、由于我们在给sublime配置AI增强功能时,需要调用外部deepseek的api,sublime内置了3.18.12的python版本,但是这个内置的python其实不支持安装外部依赖,所以接下来需要安装一个python3.8.12的虚拟环境,在虚拟环境中配置所需要的网络请求依赖包。通过配置sublime的python的依赖加载路径来加载虚拟环境中的python3.8.12的依赖包,变相扩展了sublime内置的python3.8.12的能力。
推荐为sublime的插件创建一个独立的 Python 虚拟环境,并在其中安装 requests 模块。
创建虚拟环境
打开终端,进入一个你可以管理的目录:
cd ~/sublime_plugins
python3 -m venv env
这会创建一个名为 env 的虚拟环境。
激活虚拟环境
在终端中激活虚拟环境:
source env/bin/activate # macOS/Linux
env\Scripts\activate # Windows
安装 requests 模块
在虚拟环境中安装 requests:
pip install requests
修改插件代码
在插件代码的开头,添加虚拟环境路径:
import sys
sys.path.append("/path/to/your/virtualenv/lib/python3.x/site-packages")
替换 /path/to/your/virtualenv 为你的虚拟环境路径。例如:
sys.path.append("/Users/xxx/sublime_plugins/env/lib/python3.8/site-packages")
二、开启配置DeepSeek增强型Sublime
1、在菜单栏选择 Tools -> Developer -> New Plugin。
2、新建插件后,把下面的代码复制到插件文件中,注意需要替换为自己的api_key和base_url
import sublime
import sublime_plugin
import sys
# 添加虚拟环境路径(替换为你的虚拟环境路径)
sys.path.append('/Users/zhaoqingchen/.pyenv/versions/sublime_plugin_env/lib/python3.8/site-packages')
from openai import OpenAI
class OpenAiChatCommand(sublime_plugin.TextCommand):
def run(self, edit):
# 获取选中的文本
selection = self.view.sel()
if not selection or len(selection[0]) == 0:
sublime.message_dialog("请先选中一些文本!")
return
# 获取选中的内容
selected_text = self.view.substr(selection[0]).strip()
if not selected_text:
sublime.message_dialog("选中的文本为空!")
return
# 构造 OpenAI 客户端
client = OpenAI(
api_key="sk-xxxx",
base_url="https://xxxx,
)
# 是否流式返回
s_value = True
try:
# 调用 OpenAI API
chat_completion = client.chat.completions.create(
model="deepseek-r1",
messages=[
{
"role": "user",
"content": selected_text, # 使用选中的文本作为输入
}
],
stream=s_value,
)
# 处理流式返回
response_text = ""
if s_value:
for chunk in chat_completion:
# 获取思维链内容
if hasattr(chunk.choices[0].delta, 'reasoning_content'):
response_text += f"{chunk.choices[0].delta.reasoning_content}"
# 获取最终返回的内容
if hasattr(chunk.choices[0].delta, 'content'):
if chunk.choices[0].delta.content is not None and len(chunk.choices[0].delta.content) != 0:
response_text += chunk.choices[0].delta.content
else:
response_text = chat_completion.choices[0].message.content
# 在选中的文字后插入 API 的响应内容
for region in selection:
self.view.insert(edit, region.end(), "\n\n" + response_text)
except Exception as e:
sublime.message_dialog(f"请求出错: {str(e)}")
3、配置右键菜单
打开或创建 Context.sublime-menu 文件:
路径:Packages/User/Context.sublime-menu。
添加以下内容:
[
{
"caption": "发送选中文本到 API",
"command": "open_ai_chat"
}
]
4、完成以上设置,基本上你的sublime就具备了deepseek增强能力。快来体验吧
三、问题排查一些知识点
Sublime Text 的命令名称是区分大小写的。如果命令名称在插件中定义为 SendSelectionToApiCommand,那么 view.run_command() 中的名称必须是 send_selection_to_api(命令名称是类名的小写形式,且去掉 Command 后缀)。
检查方法:
确保插件代码中的类名和命令名称一致。例如:
class SendSelectionToApiCommand(sublime_plugin.TextCommand):
def run(self, edit):
sublime.message_dialog("Command triggered!")
类名:SendSelectionToApiCommand
命令名称:send_selection_to_api
如果命令名称拼写错误,Sublime Text 无法识别该命令。
我另外实现一个一键配置sublime的deepseek插件,请将下面代码保存到python文件中,然后随意打开一个终端运行即可
import os
import subprocess
import sys
HOME_DIR = os.path.expanduser("~") # 获取用户主目录
VENV_DIR = os.path.join(HOME_DIR, "sublime_plugin_env") # 配置虚拟环境路径
# Sublime 插件路径
SUBLIME_USER_DIR = os.path.join(HOME_DIR, ".config", "sublime-text", "Packages", "User") # Linux 示例
if sys.platform == "darwin": # macOS
SUBLIME_USER_DIR = os.path.join(HOME_DIR, "Library", "Application Support", "Sublime Text", "Packages", "User")
elif sys.platform == "win32": # Windows
SUBLIME_USER_DIR = os.path.join(HOME_DIR, "AppData", "Roaming", "Sublime Text", "Packages", "User")
PLUGIN_FILE = os.path.join(SUBLIME_USER_DIR, "open_ai_chat.py")
MENU_FILE = os.path.join(SUBLIME_USER_DIR, "Context.sublime-menu")
# 检查并创建虚拟环境
def create_virtualenv():
if not os.path.exists(VENV_DIR):
print("创建虚拟环境...")
subprocess.run([sys.executable, "-m", "venv", VENV_DIR], check=True)
else:
print("虚拟环境已存在,跳过创建。")
# 激活虚拟环境并安装依赖
def install_dependencies():
print("激活虚拟环境并安装依赖...")
pip_path = os.path.join(VENV_DIR, "bin", "pip") if sys.platform != "win32" else os.path.join(VENV_DIR, "Scripts", "pip")
subprocess.run([pip_path, "install", "--upgrade", "pip"], check=True)
subprocess.run([pip_path, "install", "requests", "openai"], check=True)
# 生成 Sublime 插件代码
def generate_plugin():
print("生成 Sublime 插件代码...")
plugin_code = f"""
import sublime
import sublime_plugin
import sys
# 添加虚拟环境路径(替换为你的虚拟环境路径)
sys.path.append('{os.path.join(VENV_DIR, "lib", "python3.8", "site-packages")}')
from openai import OpenAI
class OpenAiChatCommand(sublime_plugin.TextCommand):
def run(self, edit):
# 获取选中的文本
selection = self.view.sel()
if not selection or len(selection[0]) == 0:
sublime.message_dialog("请先选中一些文本!")
return
# 获取选中的内容
selected_text = self.view.substr(selection[0]).strip()
if not selected_text:
sublime.message_dialog("选中的文本为空!")
return
# 构造 OpenAI 客户端
client = OpenAI(
api_key="sk-xxxx", # 替换为你的 OpenAI API Key
base_url="https://xxxx", # 替换为你的 API Base URL
)
# 是否流式返回
s_value = True
try:
# 调用 OpenAI API
chat_completion = client.chat.completions.create(
model="deepseek-r1",
messages=[
{{
"role": "user",
"content": selected_text, # 使用选中的文本作为输入
}}
],
stream=s_value,
)
# 处理流式返回
response_text = ""
if s_value:
for chunk in chat_completion:
# 获取思维链内容
if hasattr(chunk.choices[0].delta, 'reasoning_content'):
response_text += f"{{chunk.choices[0].delta.reasoning_content}}"
# 获取最终返回的内容
if hasattr(chunk.choices[0].delta, 'content'):
if chunk.choices[0].delta.content is not None and len(chunk.choices[0].delta.content) != 0:
response_text += chunk.choices[0].delta.content
else:
response_text = chat_completion.choices[0].message.content
# 在选中的文字后插入 API 的响应内容
for region in selection:
self.view.insert(edit, region.end(), "\\n\\n" + response_text)
except Exception as e:
sublime.message_dialog(f"请求出错: {{str(e)}}")
"""
with open(PLUGIN_FILE, "w", encoding="utf-8") as f:
f.write(plugin_code)
# 配置右键菜单
def configure_menu():
print("配置右键菜单...")
menu_content = """
[
{
"caption": "发送选中文本到 API",
"command": "open_ai_chat"
}
]
"""
with open(MENU_FILE, "w", encoding="utf-8") as f:
f.write(menu_content)
# 主函数
if __name__ == "__main__":
print("开始配置 Sublime AI 增强功能...")
create_virtualenv()
install_dependencies()
generate_plugin()
configure_menu()
print("配置完成!请重启 Sublime Text 并测试 AI 增强功能。")