从仙侠到洪荒,从玄幻到电竞,从都市重生到架空历史:诛仙、佛本是道、异世邪君、傲视九重天、全职高手、我真没想重生啊、大乾憨婿,记录印象最深的七本网络小说。
阅读全文chat.nvim v1.10.0 正式发布,核心更新是懒加载工具机制:默认只发送 essential 工具集和 find_tool,按需发现其余工具,大幅节省 prompt tokens。
阅读全文通过无线 ADB 将 Termux 加入 Android Doze 白名单并允许后台运行,无 Root 下最大程度避免系统休眠杀进程。
阅读全文同一天发布两个大版本更新,干脆写在一起。Nova 是 Android 端的 AI 聊天客户端,Chat.nvim 是 Neovim 内的 AI 编程助手。两个项目同步迭代,这次更新都围绕用户体验、安全性和稳定性展开。 Nova v3.0.0:从能用到好用 微信扫码登录 图片上传与分享 离线语音输入 queries 声明。 国际化 性能优化 内容指纹机制:基于 created:role:toolcallid:content 生成指纹,相同内容跳过 Markdown 重新绑定。指纹存储从 Map 改为 Set,降低内存开销。 DiffUtil 增量更新:替代全量刷新,只更新变化的 item。 StableKey 锚点:防止刷新后滚动位置…
阅读全文四天三夜皖南行:宏村水墨、黄山云海、翡翠谷清溪、徽州古城寻旧。
阅读全文X 的 ghost ban 悄无声息,非登录状态下内容完全不可见,搜索引擎收录归零。别把创作主阵地放在别人的平台上。
阅读全文chat.nvim v1.8.0 正式发布,新增 LLM 请求自动重试、用户画像、Markdown 渲染、定时任务架构重写等重大更新。
阅读全文chat.nvim 定时任务功能的设计思路与实现方案,让 AI 助手具备主动执行任务的能力。
阅读全文一座被时间封存的老学校,一段寻访旧友的意外旅程。
阅读全文AI 通过 Makefile 绕过沙箱限制的安全分析,揭示 Tool Use 中的潜在风险。
阅读全文Nova v2.0 发布,新增工具调用展示、错误消息卡片、会话置顶、账号导入导出等功能,全面提升移动端 AI 对话体验。
阅读全文Runtime路径 Plugin脚本 文件类型检测 文件名检测 基于文件内容检测 文件类型插件 缩进文件 颜色 语法高亮 文档 延时加载脚本 After脚本 $VIMRUNTIME Runtimepath选项 聪明地学习Runtime iggredible/Learn-Vim,部分内容有增改。 Vim会自动查找一些特殊的路径,这些都是Vim runtime路径的例子。本章向您展示它们什么时候被调用,帮助您更进一步理解和定制Vim。 Runtime路径 ~/.vim/。运行 :h runtimepath 查看不同操作系统的路径。 Plugin脚本 ~/.vim/plugin/ 中的脚本每次Vim启动时都会执行,可用于执行初始化脚本。…
阅读全文包目录 两种加载方式 自动加载 手动加载 组织管理软件包 聪明地添加插件 iggredible/Learn-Vim,部分内容有增改。 从Vim 8开始,Vim自带了一个内置的插件管理器,名叫 软件包(packages)。在本章,您将学习如何使用Vim软件包来安装插件。 要查看是否支持软件包,运行 :echo has('packages')(返回1表示支持)。 包目录 ~/.vim/ 中创建 pack/ 子目录(~/.vim/pack/)。Vim会在这个子文件夹内自动搜索插件。 两种加载方式 自动加载 start/ 子目录中: ~/.vim/pack/*/start/ * 可以是任意名字。例如 packdemo/: ~/.vim/pa…
阅读全文Vim如何找到Vimrc 应该把什么放在Vimrc中? Vimrc基础内容 插件 设置 自定义命令 键盘映射 组织管理Vimrc 划分您的vimrc 折叠您的vimrc文件 启动Vim时加载/不加载Vimrc 聪明地配置Vimrc iggredible/Learn-Vim,部分内容有增改。 在先前的章节中,您学习了如何使用Vim。在本章,您将学习如何组织和配置Vimrc。 Vim如何找到Vimrc $VIMINIT $HOME/.vimrc $HOME/.vim/vimrc $EXINIT $HOME/.exrc $VIMRUNTIME/default.vim 应该把什么放在Vimrc中? Vimrc基础内容 插件 设置 自定义函数…
阅读全文在多个文件中执行命令的几种方法 参数列表 缓冲区列表 窗口列表和选项卡列表 快速修复列表 位置列表 在Vim中运行多文件操作命令 iggredible/Learn-Vim,部分内容有增改。 多文件编辑更新是一个值得掌握、非常有用的编辑工具。本章,您将学到如何在Vim中进行多文件编辑的更多不同方法。 在多个文件中执行命令的几种方法 参数列表 (argdo) 缓冲区列表 (bufdo) 窗口列表 (windo) tab 列表(tabdo) 快速修复列表 (cdo) 文件方式的快速修复列表 (cfdo) 位置列表 (ldo) 文件方式的位置列表 (lfdo) 参数列表 :args file1 file2 file3 :args *.js…
阅读全文视图 配置视图属性 保存和加载视图 自动创建视图 会话 创建和加载会话 配置会话属性 Viminfo 读写 Viminfo 配置 Viminfo 属性 聪明地使用视图、会话和 Viminfo iggredible/Learn-Vim,部分内容有增改。 当您做了一段时间的项目后,您可能会发现这个项目逐渐形成了自己的设置、折叠、缓冲区、布局等。问题是,关闭 Vim 后,所有的这些更改都会丢失。本章中,您将学习如何使用 视图、会话 和 Viminfo 来保存项目的”快照”。 视图 配置视图属性 :set viewoptions? viewoptions=folds,cursor,curdir。添加 localoptions: :set v…
阅读全文从命令行编译 Make命令 使用 Make 编译 不同的Make程序 保存时自动编译 切换编译器 创建自定义编译器 异步编译器 异步Make 异步调度(Dispatch) 自动调度 聪明地学习编译 iggredible/Learn-Vim,部分内容有增改。 编译是许多编程语言的重要主题。在本章中,您将学习如何在 Vim 中编译。此外,您将看到如何利用好 Vim 的 :make 命令。 从命令行编译 !)进行编译: :!g++ hello.cpp -o hello Make命令 :make 命令。当您运行它时,Vim 会在当前目录查找 makefile 并执行它。 :make 命令也接受终端中 make 命令的参数: :make fo…
阅读全文差异比较 使用 Vim 作为合并工具 在 Vim 中使用 Git 插件 Vim-Fugitive Git Status Git Blame Gdiffsplit Gwrite 和 Gread Gclog 聪明地学习 Vim 和 Git iggredible/Learn-Vim,部分内容有增改。 Vim 和 Git 是两种实现不同功能的伟大工具。Vim 用于文本编辑,Git 用于版本控制。在本章中,您将学习如何将 Vim 和 Git 集成在一起。 差异比较 vimdiff file1.txt file2.txt vimdiff 并排显示两个缓冲区。不同的行会被高亮显示。 ]c 跳转到下一处差异([c 跳回上一处差异)。 :diffpu…
阅读全文手动折叠 不同的折叠方法 缩进折叠 表达式折叠 语法折叠 差异折叠 标志折叠 持久化折叠 聪明地学习折叠 iggredible/Learn-Vim,部分内容有增改。 在阅读文件时,经常会有一些不相关的文本会妨碍您理解。使用 Vim 折叠可以隐藏这些不必要的信息。 本章中,您将学习如何使用不同的折叠方法。 手动折叠 折叠一段文本,在显示时会隐藏起来,但实际上并不会真的删除它。 折叠操作符是z。 假设有如下文本: Fold me Hold me zfj。Vim 将这两行折叠成一行。 上面的命令分解如下: zf 是折叠操作符。 j 是用于折叠操作符的动作。 zo 打开/展开已折叠文本,使用 zc 关闭/收缩文本。 折叠是一个操作符,所以它…
阅读全文标签概述 标签生成器 解剖标签文件 标签文件 为大型项目生成标签 标签导航 标签优先级 选择性跳转标签 标签的自动补全 标签堆栈 自动生成标签 在保存时生成标签 使用插件 聪明地学习标签 iggredible/Learn-Vim,部分内容有增改。 快速转到任意定义处,是文本编辑中一个非常有用的特性。在本章中,您将学习如何使用 Vim 标签来做到这一点。 标签概述 one = One.new one.donut One?donut?跟随有One 和 donut定义的源代码,是帮助您理解的一个有效方法。您可以使用fzf 或 grep来搜索它们,但使用标签将更快。 把标签想象成地址簿,它存储的不是”姓名-地址”对,而是”定义-地址”对。…
阅读全文进入和退出命令行模式 重复上一个命令 命令行模式快捷键 寄存器和自动补全 历史记录窗口 更多命令行指令 聪明地学习命令行模式 iggredible/Learn-Vim,部分内容有增改。 在前三章中,您已经学习了如何使用搜索命令(/, ?)、替换命令(:s)、全局命令(:g),以及外部命令(!)。这些都是命令行模式命令的一些例子。 在本章中,您将学习命令行模式的更多技巧。 进入和退出命令行模式 搜索命令 (/, ?) 命令行指令 (:) 外部命令 (!) 、Ctrl-c、Ctrl-[。 重复上一个命令 @: 来重复上一个命令行指令或外部命令。 如果您刚运行 :s/foo/bar/g,执行 @: 将重复该替换。如果您刚运行 :.!tr…
阅读全文在 Android 手机上通过 Termux 安装 chat.nvim 和 Nova,打造移动端 AI 编程环境。
阅读全文Bang 命令 将外部命令的标准输出STDOUT读入Vim 将缓冲区内容写入外部命令 执行外部命令 过滤文本 普通模式命令 聪明地学习外部命令 iggredible/Learn-Vim,部分内容有增改。 在Unix系统内部,您会发现许多小型的,超专业化命令,每个命令只做一件事(而且能很好地完成)。您可以将这些命令链接在一起以共同解决一个复杂的问题。如果可以从Vim内部使用这些命令,那不是很好吗? 答案是肯定的!在本章中,您将学习如何扩展Vim以使其与外部命令无缝协作。 Bang 命令 !)命令,可以执行三件事: 将外部命令的STDOUT读入当前缓冲区。 将缓冲区的内容作为STDIN写入外部命令。 从Vim内部执行外部命令。 将外部命…
阅读全文全局命令概述 逆向匹配 模式串 传递范围参数 普通模式命令 执行宏 递归全局命令 更改定界符 默认命令 反转整个缓冲区 汇总所有待办事项 黑洞删除 将多条空行减少为一条空行 高级排序 聪明地学习全局命令 iggredible/Learn-Vim,部分内容有增改。 到目前为止,您已经了解了如何使用点命令(.)重复上一次更改,如何使用宏(q)重复动作以及将文本存储在寄存器中(")。 在本章中,您将学习如何在全局命令中重复命令行命令。 全局命令概述 :g/pattern/command pattern匹配包含该模式串的所有行,类似于替代命令中的模式串。command可以是任何命令行命令。全局命令通过对与pattern匹配的每一行执行com…
阅读全文智能区分大小写 一行中的第一个和最后一个字符 重复搜索 使用候选词搜索 设置模式匹配的开始位置和结束位置 搜索字符组 搜索重复字符 预定义的字符组 搜索示例:在一对相似字符之间捕获文本 搜索示例:捕获电话号码 基本替换 替换范围 模式匹配 替换标志 特殊替换 贪婪与非贪婪 跨多个文件替换 用宏跨多个文件替换 以聪明的方式学习搜索和替换 iggredible/Learn-Vim,部分内容有增改。 本章涵盖两个独立但相关的概念:搜索和替代。很多时候,您得基于文本的共同模式搜索大量的内容。通过学习如何在搜索和替换中使用正则表达式而不是字面字符串,您将能够快速定位任何文本。 附带说明一下,在本章中,当谈论搜索时,我将主要使用/。您使用/进行…
阅读全文Nova v1.0.0 正式发布,chat.nvim 的 Android 客户端迎来首个稳定版本。
阅读全文三种可视模式 可视模式导航 可视模式语法 可视模式和Ex命令 跨多行编辑 递增数字 选择最后一个可视模式区域 从插入模式进入可视模式 选择模式 以聪明的方式学习可视模式 iggredible/Learn-Vim,部分内容有增改。 高亮显示文本块并对其进行更改,是很多文本编辑器中的常见功能。 Vim也可以使用可视模式实现这一功能。在本章中,您将学习如何使用可视模式来有效地处理文本块。 三种可视模式 v 逐字符可视模式 V 逐行可视模式 Ctrl-v 逐块可视模式 one two three v。然后使用j跳转至下一行。它高亮显示从”one”到光标位置的所有文本。现在,如果您按gU,Vim将高亮显示的字符转为大写。 逐行可视模式适用于整…
阅读全文撤销(undo),重做和行撤销(UNDO) 断点插入操作 撤销树 保存撤销记录 时间旅行 聪明地学习撤销操作 iggredible/Learn-Vim,部分内容有增改。 所有人都会犯各种各样的输入错误。因此对于任何一个现代的软件来说,撤销都是一个很基本的功能。 Vim 的撤销系统不仅支持撤销和取消撤销任何修改,而且支持存取不同的文本形态,让你能控制你输入的所有文本。在本章中,你将会学会如何执行撤销和 取消撤销文本,浏览撤销分支,反复撤销, 以及浏览改动时间线。 撤销(undo),重做和行撤销(UNDO) u 或者 :undo。 假设你有如下文本(注意”one”下面有一个空行): one one two u,Vim 会删除 “two”…
阅读全文基本宏命令 安全保护 命令行执行宏 在多个文件中执行宏命令 递归执行宏命令 增添一个已知宏 修改一个已知宏 拷贝宏 串行宏和并行宏 聪明地学习宏命令 iggredible/Learn-Vim,部分内容有增改。 在编辑文件的时候,你会发现有时候你在反复地做一些相同的动作。如果你仅做一次,并在需要的时候调用这些动作岂不是会更好吗。通过 Vim 的宏命令,你可以将一些动作记录到 Vim 寄存器。 在本章中,你将会学习到如何通过宏命令自动完成一些普通的任务(另外,看你的文件在自动编辑是一件很酷的事情)。 基本宏命令 qa 开始记录动作到寄存器 a q (while recording) 停止记录 @a Execute macro from…
阅读全文寄存器的10种类型 寄存器命令 在输入模式中使用寄存器 匿名寄存器("") 编号寄存器("0-9) 复制寄存器 ("0) 编号寄存器 ("1-9) 小删除寄存器("-) 命名寄存器 ("a-z) 只读寄存器(":, "., "%) Buffer交替文件寄存器 ("#) 表达式寄存器 ("=) 选取和拖放寄存器 ("*, "+) 黑洞寄存器 ("_) 搜索模式寄存器 ("/) 查看所有的寄存器 执行寄存器 清除寄存器 获取寄存器中的内容 聪明地学习寄存器 iggredible/Learn-Vim,部分内容有增改。 学习Vim中的寄存器就像第一次学习线性代数一样,除非你学习了他们,否则你会觉得自己根本不需要它们。 你可能已经在复制或删除…
阅读全文用法 什么才算是修改操作? 重复多行修改操作 在修改中包含移动操作 聪明地学习点命令 iggredible/Learn-Vim,部分内容有增改。 在编辑文本时,我们应该尽可能地避免重复的动作。在这一章节中,你将会学习如何使用点命令来重放上一个修改操作。点命令是最简单的命令,然而又是减少重复操作最为有用的命令。 用法 .键来使用点命令。 比如,如果你想将下面文本中的所有”let”替换为”const”: let one = "1"; let two = "2"; let three = "3"; 首先,使用/let来进行匹配。 接着,使用cwconst来将”let”替换成”const”。 第三步,使用n来找到下一个匹配的位置。 最后,使…
阅读全文进入输入模式的方法 退出输入模式的方法 重复输入模式 在输入模式中删除大块文本 用寄存器进行输入 页面滚动 自动补全 执行普通模式下的命令 聪明地学习输入模式 iggredible/Learn-Vim,部分内容有增改。 输入模式是大部分文本编辑器的默认模式,在这个模式下,所敲即所得。 尽管如此,这并不代表输入模式没什么好学的。Vim的输入模式包含许多有用功能。在这一章节中,你将能够学到如何利用Vim输入模式中的特性来提升你的输入效率。 进入输入模式的方法 i 从光标之前的位置开始输入文本 I 从当前行第一个非空字符之前的位置之前开始输入文本 a 在光标之后的位置追加文本 A 在当前行的末尾追加文本 o 在光标位置下方新起一行并开始输…
阅读全文字符导航 相对行号 对移动计数 单词导航 当前行导航 句子和段落导航 匹配导航 行号导航 窗格导航 滚动 搜索导航 位置标记 跳转 聪明地学习导航 iggredible/Learn-Vim,部分内容有增改。 一开始,通过键盘移动会让你感觉特别慢特别不自在,但是不要放弃!一旦你习惯了它,比起鼠标你可以更快的在文件中去到任何地方。 这一章,你将学习必要的移动以及如何高效的使用它们。 记住,这一章所讲的并不是Vim的全部移动命令(motions),我们的目标是介绍有用的移动来快速提高效率。 如果你需要学习更多的移动命令,查看:h motion.txt。 字符导航 h 左 j 下 k 上 l 右 hjkl因为我的右手可以保持在键盘上的默认姿…
阅读全文如何学习一门语言 语法规则 名词(动作 Motion) 动词(操作符 Operator) 动词(操作符 Operator)和名词(动作 motions)的结合 更多名词(文本对象 Text Objects) 结合性和语法 聪明地学习语法 iggredible/Learn-Vim,部分内容有增改。 刚接触Vim时很容易被Vim许多复杂的命令吓到,如果你看到一个Vim的用户使用gUfV或1GdG,你可能不能立刻想到这些命令是在做什么。这一章中,我将把Vim命令的结构拆分成一个简单的语法规则进行讲解。 这一章将是本书中最重要的一章,一旦你理解了Vim命令的语法结构,你将能够和Vim”说话”。注意,在这一章中当我讨论Vim语言时,我讨论并不…
阅读全文打开和编辑文件 使用find命令搜索文件 Find 和 Path 使用Grep命令在文件中搜索 用Netrw浏览文件 Fzf插件 安装 Fzf的语法 查找文件 在文件中查找 其他搜索 将Grep替换为Rg 在多文件中搜索和替换 用聪明的方法学习搜索 iggredible/Learn-Vim,部分内容有增改。 本章的目的是向您介绍如何在Vim中快速搜索,能够快速搜索是提高您的Vim工作效率的重要途径。当我解决了如何快速搜索文件这个问题后,我就决定改为完全使用Vim来工作。 本章划分为两个部分:一是如何不依赖插件搜索;二是使用fzf插件搜索。让我们开始吧! 打开和编辑文件 :edit。 :edit file.txt file.txt已经…
阅读全文Buffers 退出Vim Windows Tabs 三维移动 用聪明的方法使用Buffers、Windows、以及Tabs iggredible/Learn-Vim,部分内容有增改。 (译者注:在Vim中,Buffers缓冲区,Windows窗口,Tabs选项卡是专有名词。为适应不同读者的翻译习惯,确保没有歧义,本文将不对Buffers、Windows、Tabs这三个词进行翻译)。 如果您使用过现代文本编辑器,您很可能对Windows和tabs这两个概念是非常熟悉的。但Vim使用了三个关于显示方面的抽象概念:buffers, windows, 还有tabs。在本章,我将向您解释什么是buffers, windows和tabs,以及…
阅读全文安装 Vim命令 退出Vim 保存文件 帮助 打开文件 参数 打开多个窗口 挂起 聪明的启动Vim iggredible/Learn-Vim,部分内容有增改。 在本章,您将了解从终端启动Vim的几种不同方法。我写这本教程时使用的Vim版本是8.2。如果您使用Neovim或老版本的Vim,大部分情况下方法是通用的,但注意个别命令可能无效。 安装 Vim 官网 Vim 官方仓库 Vim 官方仓库镜像 Vim命令 vim '可以在工作区插入文本"hello"。 退出Vim :quit :q。这是一个命令行模式的命令(command-line mode:Vim的另一种模式)。如果您在普通模式输入:,光标将移动到屏幕底部,在这里您可以输入命令…
阅读全文为什么写这本教程 如何从其他编辑器过渡到Vim 如何阅读本指南 更多帮助 语法 Vimrc 未来计划,错误,问题 更多关于Vim的技巧 感谢 iggredible/Learn-Vim,部分内容有增改。 为什么写这本教程 vimtutor就是一个很好的途径,另外还有Vim自带的帮助手册(:help查看)包含了所有需要的参考信息。 但是在日常使用中,对于绝大部分用户的需求而言,vimtutor讲得太浅不能满足需要,而:help所提供的信息又有很多是用不上的。本指南尝试在两者之间搭一座桥,仅重点介绍关键功能,使您尽可能在最短的时间内掌握Vim中最有用的知识。 绝大部分情况下,您并不会使用到Vim100%的功能。您可能仅仅需要掌握其中20%…
阅读全文Nova 是 chat.nvim 的 Android 客户端,让你在手机上继续 Neovim 中的 AI 对话。
阅读全文排查 curl 通过 stdin 传递请求体时的长度限制问题,并给出解决方案。
阅读全文记录阿里云百炼平台 Coding Plan 流式输出内容截断的 Bug 分析过程。
阅读全文Neovim 配置管理的最佳实践,从目录结构到多机器同步的完整方案。
阅读全文分析阿里云 Coding Plan GLM-5 模型流式 Tool Call 输出的协议异常问题。
阅读全文排查 job.nvim 中 raw 参数导致 JSON 解析失败的问题。
阅读全文对比 job.nvim 与 vim.system,解释为什么仍然选择使用 job.nvim。
阅读全文从零开始理解 AI 助手的核心原理,拨开概念迷雾,看清技术本质。
阅读全文chat.nvim 插件介绍:在 Neovim 中集成 AI 对话,提升编码效率。
阅读全文bufdel.nvim 插件介绍:删除 buffer 时保持窗口布局不变。
阅读全文calendar.nvim 插件介绍:在 Neovim 中查看日历,方便笔记日期管理。
阅读全文文件路径大小写敏感问题导致 Lua 模块重载失败的排查过程。
阅读全文