aider.nvim

aider.nvim

Neovim 插件实现快速访问 AI 编码助手

aider.nvim 是一款 Neovim 插件,集成了 Aider AI 编码助手。该插件支持在 Neovim 内启动 Aider,提供终端窗口和后台运行模式,并可自动管理上下文。aider.nvim 配备自定义设置和默认快捷键,方便用户在 Vim 环境中使用 AI 辅助编码。作为一个实验性项目,它旨在将 AI 编码助手无缝融入 Vim 工作流程。

AiderNeovim插件AI编码助手终端集成缓冲区管理Github开源项目

Neovim 的 Aider 插件

这是一个简单的 Neovim 插件,允许你在 Neovim 内部打开一个终端窗口并运行 Aider。我将其作为一个使用 Aider 的实验来编写,Aider 是迄今为止我见过的最好的 AI 编码助手,现在只需在 vim 中按几个按键就可以使用。

安装

你可以使用各种包管理器来安装 Neovim 的 Aider 插件。以下是一些常见包管理器的安装说明:

使用 packer.nvim

use 'joshuavial/aider.nvim'

使用 vim-plug

Plug 'joshuavial/aider.nvim'

使用 dein

call dein#add('joshuavial/aider.nvim')

使用方法

Neovim 的 Aider 插件提供了 AiderOpenAiderBackground 两个 lua 函数。

AiderOpen 函数打开一个带有 Aider 命令的终端窗口。它接受以下参数:

  • args:传递给 aider 的命令行参数 - 默认为 ""
  • window_type:要使用的窗口样式,'vsplit'(默认)、'hsplit' 或 'editor'

注意:如果 Aider 作业已经在运行,调用 AiderOpen 将重新连接到它,即使它被调用时使用了不同的标志

AiderBackground 函数在后台运行 Aider 命令。它接受以下参数:

  • args:传递给 aider 的命令行参数 - 默认为 ""
  • message:传递给 Aider 命令的消息 - 默认为 "完成尽可能多的待办事项,并删除你完成的任何项目的注释。"

当 Aider 打开时(通过任一函数),它会自动将所有打开的缓冲区添加到两个命令中。如果你要使用这个插件,你需要积极管理打开的缓冲区,使用诸如 :ls:bd 之类的命令。

以下是使用 AiderOpenAiderBackground 函数的一些示例:

:lua AiderOpen() :lua AiderOpen("-3", "hsplit") :lua AiderOpen("AIDER_NO_AUTO_COMMITS=1 aider -3", "editor") :lua AiderBackground() :lua AiderBackground("-3") :lua AiderBackground("AIDER_NO_AUTO_COMMITS=1 aider -3")

你还可以在 Lua 中为 AiderOpenAiderBackground 函数设置键绑定。这里有一个例子:

-- 为 AiderOpen 函数设置键绑定 vim.api.nvim_set_keymap('n', '<leader>oa', '<cmd>lua AiderOpen()<cr>', {noremap = true, silent = true}) -- 为 AiderBackground 函数设置键绑定 vim.api.nvim_set_keymap('n', '<leader>ob', '<cmd>lua AiderBackground()<cr>', {noremap = true, silent = true})

在这个例子中,在普通模式下按 <leader>oa 将调用 AiderOpen 函数,而 <leader>ob 将调用 AiderBackground 函数。

运行 aider --help 查看可以传递给 cli 的所有选项。

该插件提供以下默认键绑定:

  • <leader><Space><Space> 使用 Aider 默认设置(gpt-4)打开终端窗口。
  • <leader><Space>3 使用 gpt-3.5-turbo-16k 模型进行聊天,打开带有 Aider 命令的终端窗口。
  • <leader><space>b 在后台运行 Aider 命令,使用默认设置。
  • <leader><space>b3 在后台运行 Aider 命令,使用 gpt-3.5-turbo-16k 模型进行聊天。

设置

Neovim 的 Aider 插件提供了一个 setup 函数,你可以用它来配置插件。这个函数接受一个包含以下键的表:

  • auto_manage_context:一个布尔值,决定插件是否应该自动管理上下文。如果设置为 true,插件将在缓冲区打开和关闭时自动添加和删除缓冲区。默认为 true
  • default_bindings:一个布尔值,决定插件是否应该使用默认键绑定。如果设置为 true,插件将需要键绑定文件并设置默认键绑定。默认为 true

以下是如何使用 setup 函数的示例:

require('aider').setup({ auto_manage_context = false, default_bindings = false })

在这个例子中,setup 函数被调用,传入一个表,将 auto_manage_context 设置为 false,将 default_bindings 设置为 false。这意味着插件不会自动管理上下文,也不会使用默认键绑定。

aider_background_status

插件暴露了一个名为 aider_background_status 的全局变量,你可以用它来检查 Aider 后台进程的状态。这里有一个片段,它将创建一个 A,根据后台进程是否正在运行来改变颜色。

lualine_x = {{ function() return 'A' end, color = { fg = '#8FBCBB' }, -- 绿色 cond = function() return _G.aider_background_status == 'idle' end }, { function() return 'A' end, color = { fg = '#BF616A' }, -- 红色 cond = function() return _G.aider_background_status == 'working' end } }

重新加载缓冲区

因为 AiderOnBufferOpen 命令绑定到 BufReadPost,所以每当使用 :e! 重新加载缓冲区时,它都会触发。下面的 ReloadBuffer 函数将防止每次打开文件时将其添加到 aider。

function ReloadBuffer() local temp_sync_value = vim.g.aider_buffer_sync vim.g.aider_buffer_sync = 0 vim.api.nvim_exec2('e!', {output = false}) vim.g.aider_buffer_sync = temp_sync_value end

要使用这个函数,只需调用 :lua ReloadBuffer()(或将其绑定到你喜欢的快捷键)。这将刷新当前缓冲区并显示 Aider 做出的任何更改。

Vim 中使用缓冲区的技巧

如果你不熟悉 Vim 中的缓冲区,这里有一些技巧:

  • 使用 :ls:buffers 查看所有打开的缓冲区。
  • 使用 :b <number>:buffer <number> 切换到特定的缓冲区。用缓冲区号码替换 <number>
  • 使用 :bd:bdelete 关闭当前缓冲区。
  • 使用 :bd <number>:bdelete <number> 关闭特定的缓冲区。用缓冲区号码替换 <number>
  • 使用 :bufdo bd 关闭所有缓冲区。

这个辅助函数可能对关闭所有隐藏的缓冲区有用:

_G.close_hidden_buffers = function() local curr_buf_num = vim.api.nvim_get_current_buf() local all_buf_nums = vim.api.nvim_list_bufs() for _, buf_num in ipairs(all_buf_nums) do if buf_num ~= curr_buf_num and vim.api.nvim_buf_is_valid(buf_num) and vim.api.nvim_buf_is_loaded(buf_num) and vim.fn.bufwinnr(buf_num) == -1 then if vim.fn.getbufvar(buf_num, '&buftype') ~= 'terminal' then vim.api.nvim_buf_delete(buf_num, { force = true }) end end end end

注意

如果你调整分割窗口的大小,nvim 缓冲区可能会截断文本输出,chatGPT 告诉我这没有简单的解决方法。如果你认为不需要重新架构并使用 tmux 或类似的东西就能轻松解决,欢迎提交 PR。

编辑推荐精选

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆�友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

下拉加载更多