Vim集成ChatGPT:AI编程助手在编辑器中的无缝应用

news2026/5/9 19:29:48
1. 项目概述当Vim遇上ChatGPT会擦出怎样的火花如果你是一个Vim的深度用户同时又对AI编程助手充满好奇那么0xStabby/chatgpt-vim这个项目绝对值得你花上十分钟了解一下。简单来说这是一个Vim插件它把ChatGPT的能力直接塞进了你的Vim编辑器里。你不再需要频繁地在浏览器和编辑器之间切换也不用复制粘贴代码片段去提问。在Vim的缓冲区里选中一段代码敲一个快捷键AI的解读、重构建议甚至补全代码就直接出现在你眼前。这听起来可能像是一个简单的“集成”但它的价值远不止于此。对于习惯了键盘流操作、追求极致效率的Vim用户而言这种无缝的、不离手的交互方式是对工作流的一次质变。它解决的不仅仅是“方便”的问题更是思维连续性的问题。当你在思考一个复杂的函数逻辑时思路被打断去操作另一个应用再回来时可能已经忘了刚才的灵感。而这个插件让AI助手变成了一个随时待命、呼之即来的“结对编程”伙伴它就在你的编辑环境内部与你同频共振。这个项目适合所有Vim和Neovim的用户无论你是系统管理员在修改配置文件还是开发者在编写复杂的业务逻辑亦或是学生在学习算法。只要你希望在保持Vim高效操作习惯的同时获得AI的辅助它就是为你准备的。接下来我将带你深入拆解这个插件的设计思路、核心玩法以及如何让它真正成为你编码的“第二大脑”。2. 核心设计思路与架构拆解2.1 为什么是Vim插件化集成的深层逻辑在讨论这个插件本身之前我们需要先理解它为什么选择Vim作为载体。Vim不仅仅是一个文本编辑器它更是一个高度可定制、以模式编辑和键盘操作为核心哲学的效率平台。它的用户群体通常对效率工具极为敏感且具备较强的动手能力和配置意愿。将ChatGPT集成到Vim中本质上是将两个以“效率”和“智能化”见长的工具进行深度融合。传统的AI编程助手使用方式存在明显的“上下文切换成本”。你需要1从编辑器选中代码2切换到浏览器或独立应用3粘贴代码并组织问题4等待回复5理解回复6将有用的部分复制回编辑器。这个过程至少打断了两次你的深度思考。chatgpt-vim插件的设计目标就是通过Vim强大的键绑定和缓冲区管理能力将这个流程压缩到一次快捷键操作内完成让AI的反馈直接成为你编辑流的一部分。从架构上看插件扮演了一个“智能代理”的角色。它位于Vim编辑器客户端和OpenAI的API服务端之间。其核心工作是监听用户在Vim中的操作如视觉模式选择将选中的文本或当前缓冲区内容按照预设的“提示词模板”进行包装通过HTTP请求发送给OpenAI API接收返回的流式或非流式响应最后将响应内容以用户指定的方式新缓冲区、替换、插入等呈现出来。整个流程对用户是透明的他只需要关心“问什么”和“怎么用”而不需要关心“怎么连”和“怎么解析”。2.2 核心功能矩阵不止于代码补全很多人第一反应是把它当作一个高级的代码补全工具这其实低估了它的潜力。基于其与ChatGPT模型的交互能力我们可以梳理出几个核心的应用场景构成了这个插件的功能矩阵。代码解释与文档生成这是最基础也最实用的功能。选中一段你看不懂的遗留代码或者自己写了一段复杂逻辑但担心几个月后自己也看不懂让插件帮你生成注释。它不仅能生成行内注释还能生成函数级的文档字符串如Python的docstring Go的godoc甚至分析代码的算法复杂度。代码重构与优化当你感觉代码有些“坏味道”但又说不清具体怎么改时可以让AI提供重构建议。例如将冗长的条件判断改为卫语句或策略模式将重复代码提取为函数或者建议更合适的API使用方式。插件可以将建议直接生成在相邻的缓冲区供你对比和采纳。交互式调试与问题排查遇到一个诡异的bug你可以将错误信息、相关代码片段和你的假设一起发送给AI。它可以帮你分析可能的原因甚至给出逐步排查的建议。这相当于一个随时在线的、知识渊博的调试伙伴。基于上下文的代码补全与生成这超越了简单的片段补全。你可以在一个函数里写下一行描述性的注释如# 这里需要解析JSON配置文件并验证必填字段然后让插件根据该注释和已有的函数上下文生成完整的代码块。这极大地提升了从设计到实现的转换速度。自然语言驱动的编辑这是将Vim命令与AI结合的高级玩法。你可以用自然语言描述一个编辑操作比如“将选中的这些变量名从下划线风格改为驼峰风格”或者“给这个函数的所有参数添加类型提示”插件会理解你的意图并执行相应的代码转换。这个功能矩阵表明chatgpt-vim的目标是成为一个全方位的编码辅助中心而不仅仅是一个问答机器。3. 环境配置与插件安装详解3.1 前置条件API密钥与网络准备在安装插件之前有两项必须准备好的前置条件缺一不可。第一获取OpenAI API密钥。这是插件与ChatGPT对话的“门票”。你需要访问OpenAI的官网注册账户并进入API管理页面生成一个密钥。这里有一个非常重要的安全实践绝对不要将你的API密钥直接硬编码在Vim配置文件中。一旦配置文件上传到GitHub等公开仓库你的密钥将立即泄露可能导致巨大的财务损失因为API调用是计费的。正确的做法是将其设置为环境变量。例如在~/.bashrc或~/.zshrc文件中添加export OPENAI_API_KEYsk-your-actual-api-key-here然后执行source ~/.bashrc使其生效。插件会优先从环境变量中读取这个密钥。第二确保网络环境可访问OpenAI API。这是一个纯技术前提。你需要确认你的开发机器能够稳定地访问api.openai.com这个域名。由于OpenAI的API服务器位于海外在某些网络环境下可能会遇到连接超时或速度缓慢的问题。你需要自行解决网络连通性确保API请求能够正常发送和接收。这属于基础设施层面的配置与插件本身功能无关但却是它能工作的基础。3.2 插件安装包管理器与手动安装对于现代Vim/Neovim用户使用包管理器是首选方案它能自动处理依赖和更新。以下是使用主流包管理器的安装方法。使用vim-plug推荐在Vim配置文件中通常是~/.vimrc或~/.config/nvim/init.vim在call plug#begin()和call plug#end()之间添加插件的GitHub地址call plug#begin(~/.vim/plugged) Plug 0xStabby/chatgpt-vim call plug#end()保存配置文件后重新打开Vim或Neovim执行命令:PlugInstall。你会看到插件开始克隆安装。安装完成后建议重启编辑器。使用Vundle配置方式类似在call vundle#begin()和call vundle#end()之间添加Plugin 0xStabby/chatgpt-vim然后执行:PluginInstall。使用Packer.nvimNeovim专用在Packer的配置文件中如~/.config/nvim/lua/plugins.lua添加use { 0xStabby/chatgpt-vim, config function() -- 这里可以放一些初始化配置 end }保存后执行:PackerSync。手动安装如果不使用包管理器你可以直接克隆仓库到Vim的插件目录。对于Vim8或Neovim一般可以克隆到~/.vim/pack/plugins/start/或~/.local/share/nvim/site/pack/plugins/start/目录下。但手动安装无法自动更新不推荐。安装完成后你可以通过:help chatgpt-vim命令查看插件的完整帮助文档这是了解其所有功能和配置的最佳途径。3.3 基础配置让插件按你的习惯工作安装只是第一步合理的配置才能让插件顺手。核心配置是设置你的API密钥和环境。虽然我们已经将其设为环境变量但在Vim配置中显式声明也是一个好习惯并且可以设置备选方案。在你的Vim配置文件中添加如下基本设置 设置OpenAI API密钥优先从环境变量读取这里作为备用 let g:chatgpt_api_key $OPENAI_API_KEY 设置使用的模型默认为 gpt-3.5-turbo可以根据需要和预算切换为 gpt-4 let g:chatgpt_model gpt-3.5-turbo 设置API请求的基础URL一般不需要改动除非你使用代理或兼容API let g:chatgpt_api_url https://api.openai.com/v1/chat/completions 启用流式响应Streaming回复会逐字显示体验更好但可能在某些终端有问题 let g:chatgpt_stream 1 设置请求超时时间秒网络不好时可以适当调大 let g:chatgpt_timeout 30这里重点说一下模型选择。gpt-3.5-turbo速度更快、成本极低对于大多数代码解释、生成和重构任务已经足够出色。gpt-4在复杂逻辑推理、深层代码理解和生成更高质量代码方面表现更好但速度慢、成本高。建议初学者从gpt-3.5-turbo开始在遇到gpt-3.5-turbo无法解决的复杂问题时再在配置中临时切换为gpt-4进行尝试。注意API调用是收费的费用取决于模型和使用的Token数量。虽然个人轻度使用花费很少但务必保管好你的API密钥避免泄露造成意外扣费。可以定期在OpenAI后台查看使用量和费用。4. 核心功能实操与键位映射指南4.1 键位映射打造你的专属AI快捷键插件安装后默认可能没有绑定快捷键或者绑定的键位不符合你的习惯。Vim哲学的核心就是一切皆可定制。为chatgpt-vim的操作设置顺手的键位映射是提升体验的关键一步。插件提供了几个核心的命令我们需要将它们映射到快捷键上。以下是我个人经过长时间使用后觉得非常高效的一套映射方案你可以直接复制到你的配置中也可以以此为蓝本修改 视觉模式映射对选中的文本执行ChatGPT查询 我将其映射到 LeadercLeader键通常是逗号或空格按下后会在下方打开一个新窗口显示结果 vnoremap silent Leaderc :C-ucall chatgpt#Complete(visualmode(), 1)CR 普通模式映射对当前行执行查询 这个适合快速询问单行代码或错误信息 nnoremap Leadercc :call chatgpt#Complete(n, 1)CR 对当前整个缓冲区内容执行查询 在分析整个文件结构或需要全局上下文时非常有用 nnoremap Leadercb :call chatgpt#Complete(b, 1)CR 插入模式映射在光标处插入AI生成的文本 这个映射稍微复杂它先退出插入模式执行查询然后将结果插入到当前位置 inoremap C-g Esc:call chatgpt#Complete(i, 0)CR解释一下这些映射Leaderc在视觉模式下用v或V选中文本后按下这个组合键插件会将选中的文本作为问题发送。Leadercc在普通模式下将光标所在的一行作为问题发送。Leadercb将整个当前缓冲区的内容发送给AI适用于需要文件整体上下文的分析。C-g在插入模式下这是一个快速触发AI补全的快捷键。比如你刚写下一句注释按C-gAI就会基于注释生成代码。chatgpt#Complete函数的第二个参数1或0控制是否在新缓冲区打开结果。1表示在新分割的窗口中打开方便对比0表示将结果直接插入到当前光标位置或替换选中内容。4.2 基础工作流实战从提问到获得答案让我们通过一个完整的例子看看一次标准的交互是如何进行的。假设你有一段Python代码你看不懂其中复杂的列表推导式。进入视觉模式并选择代码在Vim中将光标移动到目标代码块的开头按v进入字符可视模式然后移动光标选中整段代码。或者按V进入行可视模式选中整行。触发AI查询选中代码后直接按下你之前映射的快捷键例如,c假设你的Leader键是逗号。此时你会注意到Vim的状态栏可能会显示“Sending request to ChatGPT...”之类的提示。等待与接收响应如果开启了流式响应g:chatgpt_stream 1你会看到一个新的窗口通常是水平分割在下方打开AI的回答会像有人在打字一样逐字逐句地显示出来。这比等待全部完成再一次性显示体验好得多。如果未开启流式则会等待API完全返回后一次性显示。处理结果结果会显示在一个新的缓冲区中这个缓冲区的文件类型通常会被设置为markdown以便更好地渲染AI回复的格式。你可以在这个窗口中仔细阅读AI的解释。之后你可以直接使用如果解释清楚了你可以用:q关闭这个结果窗口。复制部分内容如果你只想采纳AI生成的某段代码或注释可以用Vim的复制粘贴y和p将其挪到你的主代码文件中。继续追问你甚至可以在结果缓冲区中继续编辑你的问题例如在AI回复的后面加上“能否用更简单的方式重写”然后再次选中这段“对话历史”并触发查询实现多轮对话。插件默认会携带一定的上下文。这个流程将原本需要多个步骤、切换多个应用的任务压缩成了“选中-按键-阅读”三步思维流完全不被中断。4.3 高级用法自定义提示词与上下文管理默认情况下插件会发送你选中的文本并附加一个基本的“你是一个编程助手”的系统提示。但对于进阶用户这远远不够。我们可以通过自定义提示词Prompt来极大地改变AI的行为使其更精准地满足我们的需求。插件通常支持通过一些变量或函数来设置自定义提示前缀。具体方式需要查阅插件的文档:help chatgpt-custom-prompt。一种常见的模式是你可以定义一个全局变量来设置提示词模板let g:chatgpt_prompt_prefix 你是一个资深的Python开发专家擅长编写简洁、高效、符合PEP 8规范的代码。请专注于解决代码问题直接给出修改后的代码并附上简要解释。这样每次你的查询都会附带这个前缀AI会以Python专家的身份来回答问题风格和输出格式都会发生变化。更灵活的方式是在查询时动态指定。有些插件支持通过特殊命令传递参数。例如你可以创建一个自定义命令command! -range -nargs* ChatGPTRefactor call chatgpt#CompleteWithPrompt(line1, line2, 请以专业代码审查员的身份重构以下代码提高其可读性和性能。只输出重构后的代码并在关键改动处添加简短注释)然后你可以用:ChatGPTRefactor命令来触发一次专门用于重构的查询。上下文管理是另一个高级话题。ChatGPT模型有上下文窗口限制例如gpt-3.5-turbo通常是16K tokens。插件在多次交互中可能会累积上下文以避免对话失忆。但有时过长的上下文会导致不必要的token消耗甚至模型混淆。你需要了解插件是如何管理上下文的是每次查询独立还是会将之前几次的问答也包含进去通常插件会为每个结果缓冲区维护一个独立的对话会话。关闭缓冲区会话也就结束了。这对于控制成本和保持问题独立性是有好处的。5. 应用场景深度剖析与案例演示5.1 场景一秒懂遗留代码与生成文档这是最立竿见影的应用。接手一个老项目里面充满了神秘的变量名和复杂的逻辑。传统方式是你逐行阅读不断在脑海中构建逻辑图耗时耗力。现在你可以这样做操作直接选中那个让你困惑的函数或代码块比如一个使用了多重嵌套和位运算的算法按下快捷键。AI的魔力AI不仅会逐行解释这段代码在做什么“这行代码通过位与操作检查标志位…”更会从整体上阐述这个函数的目的“这个函数用于解析特定格式的网络数据包头部…”并可能指出其中的潜在风险“这里没有进行空指针判断如果输入为None会导致崩溃…”。生成文档你可以进一步指示AI。在得到解释后在结果缓冲区中追加一行“请为上面的函数生成完整的Python docstring包含参数说明、返回值说明和可能的异常。” 再次选中这段“历史对话”并查询一份格式规范的文档就生成了。这比你自己绞尽脑汁去写要快得多也规范得多。5.2 场景二交互式代码重构与优化你写了一个能用的函数但感觉它很“丑”或者性能可能有问题。操作选中你的函数用自定义的重构提示词如前面定义的:ChatGPTRefactor命令来触发查询。案例演示假设你有一个简单的函数用于过滤列表中的偶数并计算平方。def process_numbers(nums): result [] for n in nums: if n % 2 0: result.append(n * n) return resultAI可能会给出如下重构建议def process_numbers(nums): 过滤输入列表中的偶数并返回其平方值列表。 参数: nums (list of int): 待处理的整数列表。 返回: list of int: 偶数平方值组成的新列表。 # 使用列表推导式更简洁且通常性能更优 return [n ** 2 for n in nums if n % 2 0]AI不仅将循环改成了列表推导式还自动添加了文档字符串并可能建议使用**运算符代替*进行平方运算。你可以直观地对比新旧代码决定是否采纳。5.3 场景三基于注释的代码生成与补全这是一种“所想即所得”的编程体验。当你明确知道要做什么但不想手动敲击所有语法细节时这个功能堪称神器。操作在需要编写代码的地方先写一行清晰的注释来描述你的意图。例如在一个FastAPI项目中你想添加一个用户登录端点你可以写下# POST /auth/login # 接收JSON格式的username和password验证用户凭据。 # 如果成功返回一个JWT令牌如果失败返回401错误。然后将光标放在这行注释上或选中这几行注释按下你的AI快捷键。结果AI很可能会为你生成类似下面的完整代码from fastapi import APIRouter, Depends, HTTPException, status from pydantic import BaseModel from .auth_utils import verify_password, create_access_token from .database import get_user_by_username router APIRouter(prefix/auth, tags[authentication]) class LoginRequest(BaseModel): username: str password: str router.post(/login) async def login(request: LoginRequest): user await get_user_by_username(request.username) if not user or not verify_password(request.password, user.hashed_password): raise HTTPException( status_codestatus.HTTP_401_UNAUTHORIZED, detailIncorrect username or password, headers{WWW-Authenticate: Bearer}, ) access_token create_access_token(data{sub: user.username}) return {access_token: access_token, token_type: bearer}它生成了请求模型、路由、依赖注入占位符和完整的业务逻辑。你只需要检查并填充像verify_password这样的具体实现函数即可。这极大地加速了从设计到原型的进程。6. 常见问题排查与性能调优6.1 连接失败与API错误这是新手最常遇到的问题。当按下快捷键后Vim底部出现错误信息或者毫无反应。“API密钥无效”或“未授权”错误检查点首先确认OPENAI_API_KEY环境变量是否已正确设置并生效。在终端中执行echo $OPENAI_API_KEY看是否打印出你的密钥密钥部分被隐藏是正常的。解决方案确保在启动Vim之前环境变量已经加载。如果你是在图形界面启动的编辑器它可能没有继承终端的环境变量。一个可靠的方法是在Vim配置中直接设置let g:chatgpt_api_key sk-...仅作为临时调试切记不要提交此配置到版本控制。检查API密钥格式确保密钥以sk-开头并且没有多余的空格或换行符。网络超时或连接被拒绝检查点在终端使用curl命令测试连通性curl -I https://api.openai.com。如果连接失败或超时说明是网络问题。解决方案这需要你自行解决网络连通性问题。插件本身不提供也不应涉及任何网络代理配置。你需要确保你的系统或终端具备访问该域名的能力。可以尝试调整g:chatgpt_timeout为一个更大的值如60。“模型不存在”或“请求无效”错误检查点检查g:chatgpt_model变量的值。确保你拼写的模型名称是有效的例如gpt-3.5-turbo、gpt-4等。模型名称是大小写敏感的。解决方案查阅OpenAI官方文档确认模型名称是否正确以及你的API账户是否有权限访问该模型例如gpt-4可能需要单独申请。6.2 响应慢、流式响应不工作响应速度慢原因分析速度取决于你的网络延迟、OpenAI API的当前负载以及所选模型。gpt-4比gpt-3.5-turbo慢得多。此外如果请求的上下文很长发送了整个大文件也会增加传输和处理时间。优化建议尽量只发送必要的代码片段而不是整个文件。对于简单问题坚持使用gpt-3.5-turbo。如果网络是瓶颈除了解决网络问题别无他法。流式响应不显示或显示异常现象设置了g:chatgpt_stream 1但回复还是一下子全部出现或者显示乱码。排查某些终端或Vim的配置可能不支持或不能很好地处理流式输出。此外插件在实现流式响应时可能依赖特定的Vim版本或特性。解决方案首先尝试关闭流式响应let g:chatgpt_stream 0。如果问题消失说明是流式兼容性问题。确保你使用的是较新版本的Vim8.2或Neovim0.5。检查插件的Issue页面看是否有其他用户遇到类似问题及解决方案。6.3 成本控制与使用策略使用AI API成本是一个无法回避的话题。虽然个人使用量通常很小但养成好习惯很重要。监控用量定期登录OpenAI的API使用仪表板查看Token消耗和费用情况。关注“每请求平均Token数”和“每日总Token数”。优化请求精简上下文只发送与问题最相关的代码。避免每次都将整个文件内容发过去。明确指令在问题中清晰、具体地描述你的需求可以减少AI“猜测”和产生冗余内容所消耗的Token。善用系统提示通过g:chatgpt_prompt_prefix设置一个明确的角色和格式要求可以让AI的回答更精准减少无关输出。设置预算和提醒在OpenAI账户设置中你可以设置每月使用预算上限并配置邮件提醒。这是一个非常重要的安全阀。本地备选方案对于非常简单的代码补全或语法提示可以优先使用Vim原生的补全功能或Treesitter等静态分析工具。将ChatGPT用于那些真正需要“智能”和“理解”的复杂场景。7. 插件生态与进阶整合7.1 与LSP和自动补全的协同一个自然的疑问是有了chatgpt-vim还需要传统的LSPLanguage Server Protocol和自动补全插件如coc.nvim, nvim-cmp吗答案是需要且它们是互补关系。LSP和基于LSP的补全提供的是精确的、基于静态分析的辅助函数签名、变量类型、定义跳转、语法错误提示。这些是确定性的、即时性的不消耗网络和API费用。chatgpt-vim提供的是智能的、基于语义理解的辅助代码解释、逻辑重构、算法建议、基于注释生成代码。这些是启发式的、创造性的。一个高效的工作流是用LSP处理日常的编码“体力活”补全变量名、导包、跳转定义用chatgpt-vim处理需要思考和设计的“脑力活”。两者并不冲突你可以同时安装和配置它们。实际上你甚至可以让AI来帮你优化LSP的配置代码。7.2 探索其他类似插件与选择0xStabby/chatgpt-vim是众多Vim AI插件中的一个。社区中还有其他优秀的项目各有侧重dpayne/CodeGPT.nvim专为Neovim设计功能更现代集成度可能更高有时会提供更好的用户体验和更多配置项。madox2/vim-ai另一个流行的选择可能提供了不同的命令接口和交互方式。直接使用通用插件有些插件如nvim-dap调试或telescope.nvim模糊查找的社区插件可能集成了调用AI进行解释或生成测试用例的功能。如何选择我的建议是先试用用你最习惯的包管理器安装chatgpt-vim按照本文指南配置使用几天。评估痛点记录下你在使用过程中觉得不方便的地方。是键位不顺手是流式响应有问题还是功能不够强大对比尝试带着你的痛点去尝试其他插件。查看它们的文档、Issue和Star数看看它们是否解决了你的问题。决定去留Vim插件的哲学是“组合使用”。你甚至可以同时安装多个为不同的场景配置不同的快捷键。最终选择那个让你感觉最自然、最不打断心流的工具。7.3 自定义扩展编写你自己的AI辅助函数当你对这个插件越来越熟悉你可能会发现一些重复性的模式。例如你总是要求AI“用中文解释”或者“给出三个备选方案”。这时你可以编写自己的VimScript函数来封装这些操作进一步提升效率。例如创建一个一键生成单元测试的函数function! GenerateUnitTest() range 获取选中的代码 let selected_lines getline(a:firstline, a:lastline) let selected_code join(selected_lines, \n) 构建自定义提示词 let prompt 你是一个测试工程师。请为以下Python函数编写一个完整的pytest单元测试覆盖主要功能边界条件。\n\n . selected_code 这里需要调用插件的内部函数具体调用方式取决于插件暴露的接口 假设插件提供了一个 chatgpt#Ask(prompt) 的函数 let response chatgpt#Ask(prompt) 将响应放入新缓冲区 new setlocal buftypenofile bufhiddenhide noswapfile setlocal filetypepython call setline(1, split(response, \n)) endfunction 映射快捷键 vnoremap Leadergt :C-ucall GenerateUnitTest()CR这个例子展示了如何将AI能力封装成更专用的工具。你需要查阅chatgpt-vim插件的具体API文档来实现chatgpt#Ask这样的调用。通过这种方式你可以将AI深度融入你的个性化工作流。我个人在实际使用中已经离不开这个插件了。它最大的价值不是替代我思考而是作为一个永不疲倦的“初级研究员”帮我快速处理那些需要查阅文档、梳理逻辑的琐碎工作让我能把宝贵的精力集中在更高层的架构设计和问题定义上。刚开始可能需要适应这种新的交互方式但一旦习惯你会发现自己的编码节奏变得更加流畅。最后一个小技巧对于非常关键或复杂的逻辑不要完全依赖AI的输出一定要自己理解和测试。把它看作一个强大的副驾驶而方向盘始终在你手中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…