deepseek增强sublime保姆级教程

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


image.png

比如我的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 增强功能。")

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容