25年我最希望能有个emacs ai 插件

能和cursor对标的。别说让我自己去搞,我倒是想自己搞,但我琢磨着,等我自己学会elisp搞出来,大牛早弄妥妥的了。只好等着。。。

1 个赞
  1. AI coding assistant 可以用 aider,除了 aider 是自己直接把代码就给你改好了,不给你 diffreview accept / reject 的选项以外,体验也是很好的。熟练使用 git 的话,不需要 cursor 接受 diff 的 UX,直接操作 git 效果是一样的。

  2. cursor 的 tab completion 可以同时补全多处位置。这个根本没办法。FOSS 很难和 cursor 竞争。cursor 的 multiple-editing 补全的核心在于他们有自己专门微调优化的模型,配合和 fireworks 合作的专有推理基建,它们叫做 speculative-edits,达到了 1000 token/s 的速度。别的不说,就连微软搞的 copilot 都对标不了。fireworks 之前出了一篇 blog 专门介绍这个,但是现在删掉了,可能 cursor 又换云服务合作商了。

  3. 普通的 chat 问问题和简单的优化重构改代码,用 ellama 或者 gpt.el 就好了。

2 个赞

aider试过。虽然我觉着这种不依赖编辑器来写代码的方式更代表ai 编程的未来。但是目前用着还是有点别扭。

cursor的ai和编辑器深度绑定,并非单纯加个ai就完了。所以我才发这个帖子。感觉emacs vi 单纯的编辑器很难对付它。毕竟背后没有商业公司主持。或许只能等ai再牛一点才行。

除了 cursor 能够提供一个 diff view 让你决定是否接受 patch 以外(这个我觉得有当然最好,没有的话操作 git 也不是不行),还有什么 cursor 的 UX 你是觉得不可或缺的?

保留会话记录

compose 才是 cursor 的大杀器吧,给一个需求,agent 自动识别需要更新哪些文件,并进行修改。

那这个就是 aider 的标准用法。给一个需求就可以让它直接改代码了。它会根据 repo-map 自动决定要阅读哪些文件以及修改哪些文件。

其实 cursor 的独家杀器应该是 tab-completion,虽然补全已经不是目前 AI 写代码最主要的功能了,最主要的功能已经转向直接让 AI 写代码了。 Composer 这个东西就是搞 agentic 的 workflow,FOSS 是有办法搞的。tab-completion 这个不搞自己的推理基建没办法做。

aider各位都是怎么用的?能否介绍一下用它的流程。

我是配置了deepseek,让它修改代码。然后用emacs看它修改的地方。如此反复。它还能自己执行测试用例啥的,我一般没让它干这个。我都是自己看完代码,手动修改一下,然后我来执行测试用例。

emacs 和 deepseek咋集成的?

和你用法差不多。

  1. 添加(/add)一些相关的文件给 aider,不要太多,主要是那些有关的。
  2. 如果是新写的代码,直接 /code 让他写,写完了 review,测试是否符合要求。
  3. 如果是旧的代码,或者不确定怎么写的,一般用 /architect 或者 /ask 先和它对话几轮,确定改动的内容是符合要求的,然后让它改(直接发送 “go ahead” ),改完 review,测试。

可以看看 aider 官方给的 tips

另外我懒得总是 rebase aider 的 commit,所以设置了 --no-auto-commits,通过 magit 的 diff 看它的改动,然后再按照功能点一个个提交。

2 个赞

我没把这俩集成。我是用的aider+deepseek

第2步:

它修改了一个文件。

我打开这个文件,找到它修改的地方。这是直接改动完毕的。没有对比之前的

或者我先看diff

就这个地方稍微有点别扭。如果有个新旧文件对比就好了,不是git的diff。是两边各有新旧文件对着看。。。这样看着比较清楚,也比较放心。

有时候ai会莫名其妙修改其他的地方。我有个文件。每次让它改这个文件的什么地方,它总是会自动把某个函数的参数给修改了。我要求它改的完全不是这里。它会顺带着改。

我主要依靠 magit 的 status 和 diff。

在 aider 修改之前,我可能也有一些改动,我可能会先移动到 index 中,然后再让它改,它改的内容是在 worktree,这样我就可以和 index 里的进行 diff,也能知道它改了啥。

或者就是多提交,保持 status 内容相对干净,这样也容易看出来它改了啥。

我是每弄一个小功能(比如一个函数),都单开分支。每次修改都提交。它改完之后,彻底没问题了。合并。不行就撤回或者放弃这个分支。

反正就是比其他时候更细更频繁用git的分支提交。因为有时候ai会一直往前走,走很远之后发现这一大片改动都不行。

你们的aider都配置的哪家api?我只用了deepseek,这个方便不需要梯子。openrouter据说挺好,但还没用过。

同 deepseek,但是火了之后被攻击,最近很不稳定。

直接开一个新的分支,改到没问题了直接 squash 合并。这样对应到主分支就是只有一条干净的提交记录。

你们的aider都配置的哪家api?我只用了deepseek,这个方便不需要梯子。openrouter据说挺好,但还没用过。

不缺米的话还是试下 sonnet 3.5 吧,openrouter 也可用。deepseek 主要还是速度有点慢,再加上 api 非常不稳定,sonnet 3.5 速度非常稳定,智力不如 R1 但是速度很快,不涉及到复杂的,针对一般的 CRUD 够用了。或者就是用 R1 做 architect,让 sonnet 3.5 来写。sonnet 写的快,改反馈也方便一些。除此之外也可以试试 gemini-flash-thinking gemini-2.0-pro-exp-02-05,速度非常快,而且目前还是免费使用,openrouter 也可用。

直接在 aider 里用 deepseek。emacs 和 aider 的集成可以看 aider.el,优点是集成细节做的很丰富,缺点是因为用的 comint 所以没有 markdown 语法高亮。

我是直接在 emacs-vterm 里使用 aider,主要为了完整的高亮。我用了 一个宏 把 vterm 包了一下从而生成一系列独立 “namespace” 的命令,利用这些命令来创建 aider buffer,发送命令 / region 内容到 aider,然后还做了一些二次包装 实现了一些针对 aider 做的一些额外的 util 功能,

1 个赞

其实主要还是tab flow最有吸引力,也最难做。虽然难,但是还没到FOSS做不出来的程度,参考隔壁yetone大大的avante.nvim。在推上天天看大佬直播更新hhhh (是的这波还是nvim user先吃上大佬福利。。墙头草用户可以先叛逃nvim了)

全职投入个半年时间,咱们很多会elisp的都能写个差不多的出来,但问题就在于现在的模型,你不进行客制化后训练,它就只能解决“小白问题”。最大1M的上下文,让模型记个文档都不够,对中高级技术员来说挺鸡肋的。而目前后训练仍因算力问题而被限制在企业级应用(参考copilot enterprise的custom model),为此投入大量时间着实不值。

(之前还发过个推详细吐槽这个:https://x.com/apr_simone/status/1885759178943144441

avante 整体我觉得一般吧。。。整体的设计的感觉是照着 cursor 在照猫画虎。

它的那个 tab completion 我看了下 prompt 的设计思路,就是把你当前的文件的完整代码(加上行号)都丢进去,然后让 LLM 输出 json,给出行号,以及建议插入的文本,然后解析这个 json 生成 diff preview。emmmm,我不知道 curosr 它们是怎么做的,我只想说 avante 这种思路,目前的开放供调用的 LLM 里,就没有输出速度能达标的。其次就是必须给完整的代码,因为你但凡给了一个开头和结尾有截断的代码,那么 LLM 就很可能就会直接从开头和结尾有截断的地方去尝试补全。用户的 rate limit 真的吃的起吗?它这个思路,我个人认为输出格式是十分复杂的,绝对算得上是复杂指令,如果用没有微调过的模型,对模型本身智力要求是比较高的。因此他们目前用 sonnet-3.5 来做这个任务。所以感受一下吧,sonnet 3.5 来做 tab-completion 每次都要全量文本做输入。。。

之前 avante 还因为违背开源协议导致被 reddit 封了半年 (MIT license 的 project 用了 gpl-v3 的 copilotChat 的代码,而且没给 contributon)。后来整个重写了一遍调用 copilot 接口的逻辑。

2 个赞

这个倒不至于,现在的模型现在确实有对长上下文的代码输出质量下降,不能够很好的 follow 上下文代码,以及指令遵循能力下降的问题,但是不至于只能用它来写代码,更不至于说对于中高级技术员挺鸡肋的。只能说还不够厉害。

比如这个: ggml : x2 speed for WASM by optimizing SIMD by ngxson · Pull Request #11453 · ggerganov/llama.cpp · GitHub

llama-cpp 一个用 CPP 写成的 LLM 的推理引擎,本身肯定是一个门槛较高的项目了,但是已经可以用 R1 来写 PR 了。目前这个 PR 还没合并,但是所有的测试都通过了,只剩下具体的提高代码质量的问题了。