Neovim对LaTeX文件的语法高亮设置
近期为我的 Neovim 配置了 Ai
功能,但是发现每次打开 LaTeX
文件会有报错,同时语法高亮了会出现问题。今天经过研究发现是
nvim-treesitter 升级后导致了的兼容性问题,具体请参考:https://github.com/nvim-treesitter/nvim-treesitter,
其官方 README.md中说明:
[!CAUTION] This is a full, incompatible, rewrite: Treat this as a different plugin you need to set up from scratch following the instructions below. If you can't or don't want to update, specify the master branch (which is locked but will remain available for backward compatibility with Nvim 0.11).
新版 nvim-treesitter 的配置
1 | #! /usr/bin/env lua |
1 | #! /usr/bin/env lua |
旧版 nvim-treesitter 的配置
1 | #! /usr/bin/env lua |
1 | #! /usr/bin/env lua |
Neovim集成Ai功能
随着时代的进步和世界的发展,我决定从今天开始在 Neovim 上集成
AI,以增强编辑功能。其中一个为 Neovim 增加 AI 能力的工具是
Gen.nvim,但在安装插件之前,请确保已配置好
ollama 并拉取所需的模型。
安装配置 Gen.nvim
1 | { |
这样,在启动Neovim时,lazy.nvim会自动安装gen.nvim插件。
Gen.nvim 的使用
Gen.nvim 插件提供的核心 AI
功能涵盖了从代码到文本的各种协作场景。插件将这些功能封装为一系列“预设指令
(Prompts)”,用户可以直接在 Neovim 中通过 :Gen
命令调用,无需频繁复制粘贴、切换窗口或手动编写提示词。
| 功能类别 | 选项 | 主要功能与使用场景 |
|---|---|---|
| 理解与获取 | Ask | 直接向 AI 提问任何问题(如查询概念、解释原理) |
| Chat | 开启一个多轮对话窗口,适合需要上下文连续交流的场景 | |
| Summarize | 快速总结当前选中的文本或代码,抓住核心内容 | |
| Review Code | 让 AI 审阅代码,分析可读性、性能和安全问题,并提出改进建议 | |
| 代码与文本优化 | Change Code | 根据你的指令直接修改选中的代码,类似于“把这段代码改成……” |
| Enhance Code | 在不改变核心逻辑的前提下,优化选中代码的结构、性能和可读性 | |
| Change | 选中文本后,让 AI 根据你的自然语言指令进行修改(如“把语气改得更正式”) | |
| Enhance Wording | 优化措辞、改善表达,使书面表达更清晰、流畅、专业。 | |
| Enhance Grammar Spelling | 专门检查并修正文本中的语法和拼写错误 | |
| Make Concise | 简化冗余的长文本,提炼关键信息,且不改变原意。 | |
| 生成与整理 | Generate | 根据你的要求生成全新的内容,不仅限于代码,也可以是邮件、报告大纲等 |
| Make List | 将散乱的文本或笔记自动整理成结构化列表 | |
| Make Table | 将相关数据或信息分析整理后,呈现为表格形式 |
使用Ollama配置本地Ai
2026年5月30日将原来的GTX 1660s
升级为GTX 5060 Ti 16G,
于是本机具备了本地运行Ai的能力。今天配置成功了
Ollama, 于是此篇博客正式记录这一配置过程。
安装 Ollama
我的电脑是 ArchLinux, 于是直接使用命令安装即可:
Nvidia 显卡安装ollama-cuda
1 | sudo pacman -S ollama-cuda |
Amd 显卡安装ollama-rocm
1 | sudo pacman -S ollama-rocm |
如果直接安装ollama , 默认使用 cpu 工作,所以需要安装
ollama-cuda 版本。
安装大模型: deepseek-r1:7b
1 | ollama pull deepseek-r1:7b |
运行大模型: deepseek-r1:7b
1 | ollama run deepseek-r1:7b |
至上此可以在终端下运动大模型了,但是当涉及到一些 LaTeX
公式时,在终端下无法显示公式,只能显示源码,因此需要下面的配置open webui,
使得浏览器可以使用本地的大模型。
配置open webui
安装 docker
1 | sudo pacman -S docker |
配置docker国内源
1 | { |
重新加载Docker 配置并重启动
1 | sudo systemctl daemon-reload |
验证配置是否生效
1 | docker info | grep -A 1 "Registry Mirrors" |
如果成功,输出中会显示您配置的其他镜像地址。
使用国内镜像源安装Open WebUI
配置好镜像加速器后,拉取镜像时已无需特殊前缀,Docker 会自动从国内镜像源获取官方镜像。但如果您的网络环境较为特殊,也可以直接指定国内镜像源的完整地址进行拉取。
例如南京大学镜像:
1 | docker pull ghcr.nju.edu.cn/open-webui/open-webui:latest |
拉取完成后,验证镜像是否已经成功下载:
1 | docker images | grep open-webui |
看到类似ghcr.nju.edu.cn/open-webui/open-webui:latest的输出即表示成功。
启动 Open WebUI 容器
拉取成功后,启动 Open WebUI 容器。启动前请确认您的 Ollama 服务已正常运行。
1 | docker run -d --network=host \ |
Linux目录双向同步完全指南:Unison从入门到实战
在日常工作和运维中,我们经常遇到这样的需求:两个目录 A 和 B
都可能随时新增或修改文件,希望它们最终保持完全一致,同时绝不能删除任何文件。这种场景下,传统的
rsync 单向同步方案显得力不从心,而 Unison
正是解决这一问题的利器。
本文将深入讲解 Unison 的安装、使用、冲突处理机制,以及如何安全地实现双向同步。
一、为什么 rsync 不够用?
很多人首先想到的是 rsync,但它的局限很明显:
1 | # 这条命令无法实现真正的双向同步 |
问题所在
rsync本质是单向 工具,只能从源到目标。--update只保护目标端的新文件,不会反向同步。- 即使执行两次
rsync, 也无法安全处理两边同时新增或修改的场景。
结论
纯新增文件(从不修改)的场景可以用两次rsync拼凑,但是只要涉及修改,就需要真正的双向同步工具。
二、Unison 简介
Unison 是一款跨平台的双向文件同步工具,核心特性:
- 真正的双向同步: 自动检测并传播两边的变更
- 安全第一: 冲突时不会自动覆盖,需要明确处理
- 增量传输:只同步差异部分,节省带宽和时间
- 跨平台:
Linux、macOS和Windows均可使用 - 支持SSH: 可同步远程服务器目录
安装 Uniso
1 | sudo pacman -S uniso |
基础用法
最简单的双向同步
1 | unison /path/to/A/ /path/to/B |
执行后,Unison会扫描两个目录,并逐一询问如何处理每个差异。
自动模式(跳过非冲突确认)
1 | unison -auto /path/to/A/ /path/to/B/ |
- 作用:自动接受所有非冲突的变更(新增、更新、删除)
- 冲突:仍然会停下等待用户选择
完全静默模式(适合脚本/写明任务)
1 | unison -batch /path/to/A/ /path/to/B/ |
- 作用:不问任何问题
- 冲突时:直接跳过,不做任何处理
- 注意:冲突会导致目录不一致,需配合
-prefer newer使用
冲突处理机制
| 模式 | 冲突处理方式 | 适用场景 |
|---|---|---|
| 默认(交互) | 停下来询问用户选择 | 重要数据,需要人工判断 |
-auto |
停下来询问 | 同上 |
-batch |
直接跳过,不处理 | 不适合,除非配合-prefer |
-batch -prefer newer |
自动选择修改时间更新的版本 | 日志、缓存等可自动决策的数据 |
-batch -prefer A |
始终以A为准覆盖B |
有明确主次的同步 |
Firefox禁用翻译功能
Firefox 的网页翻译功能我不需要,所以需要彻底关闭它。操作路径为:
在地址栏输入
about:config并回车,点击“接受风险并继续”。在搜索框内,将以下两个配置项的值分别双击,修改为
falsebrowser.translations.enable:将此值设为false,会完全禁用整个翻译功能,包括地址栏的翻译按钮.browser.translations.automaticallyPopup:将此值设为false,仅禁止翻译面板自动弹出,但翻译功能仍可用(不会经常跳出来打扰你).
注意:
about:config是Firefox的高级设置,修改前请确认你了解其作用。不过,这两个翻译相关的选项非常安全,可以随时改回true恢复功能。
ArchLinux网络图标问题的解决
我的主力办公系统是 ArchLinux
,最近由于无法访问外网,Gnome
任务栏上的网络小图标显示为一个小问号,虽然可以访问内网,但这个问号总是让人看着不爽。这通常是
NetworkManager 的连接性检查(
Connectivity Check )功能无法成功访问其验证服务器导致的,
所以将检查服务器更换为一个在自己网络下总是能访问的地址将是最优雅的解决办法。解决方法为:
方案一:修改连通性检查的服务器地址(推荐)
- 创建或编辑配置文件
1 | sudo nvim /etc/NetworkManager/conf.d/20-connectivity.conf |
- 添加或修改为以下内容
1 | [connectivity] |
uri指向连通性检查的地址response留空,NetworkManager将只检查HTTP状态码(204表示成功), 这很适合此处使用interval是检查间隔(秒)重启
NetworkManager服务使配置生效
1 | sudo systemctl restart NetworkManager |
方案二:完全禁用连通性检查
- 创建或编辑配置文件
1 | sudo nvim /etc/NetworkManager/conf.d/20-connectivity.conf |
- 添加或修改为以下内容
1 | [connectivity] |
- 重启
NetworkManager服务使配置生效
1 | sudo systemctl restart NetworkManager |
使用Caddy反向代理本地域名
由于网络限制,升级了脚本diary.sh,
从而实现了无法上github的电脑上本地托管博客的功能,这样在办公环境中可以使用高度自定义的博客,进而提高办公规范和效率。然而,借助python3实现的博客工作于本地域名127.0.0:4000或http://localhost:4000,
虽然实现了功能,但是还需要修改firefox的主而为http://localhost:400,
在地址栏中看起来不爽,所以本节是锦上添的技术:使用Caddy反向代理,生成自签名证书,从而实现访问https://fungzhenhua.github.io时实际上是访问http://localhost:4000效果。
配置Caddy
安装Caddy
1 | sudo pacman -S caddy |
配置Caddy, 使用自签名证书
1 | fungzhenhua.github.io { |
测试配置是否正确
1 | sudo caddy validate --config /etc/caddy/Caddyfile |
如果看到Valid configuration字样,说明配置正确,字样通常在最后一行。
启动Caddy
1 | sudo systemctl enable caddy |
重启Caddy
1 | sudo systemctl restart caddy |
Firefox导入证书
在完成上述Caddy设置后,发现每次打开Firefox后总是有风险提示,为了应对这个麻烦需要使用Firefox导入由Caddy生成的证书。由于使用tls internal方式,则Caddy默认生成的证书存放于/var/lib/caddy/pki/authorities/local/root.crt,
访问它需要root权限,于是解决方案是将其复制到家目录,然后赋于读写权限,再导入到Firefox的证书分布机构则问题可解决。
具体操作
1 | # 复制到当前目录 |
如果是其他的Linux发行版,则需确认具体root.crt的路径。
在Firefox中导入
- 打开
about:preferences#privacy - 点击
查看证书... - 切换到
证书颁发机构标签页(注意:不是您的证书标签页) - 点击
导入 - 选择
~/caddy-root.crt - 勾选三个信任 → 确定
本地博客搭建教程
需求分析及工作原理
近期由于网络的原因需要在本地搭建博客,最初的方案是借用Github Pages
实现了自定义博客,但是并非所有的地方都能访问Github,
因此在这些地方可以采用本地博客的方式,实现原理为:
- 将
Github博客源码库同步到Gitee, 因为Gitee属于国内的开发平台,所认其速度非常快。 - 将
Gitee上的源码hexosurce克隆到本地。 - 如果本机可以访问
Github, 则同步克隆其上源码到本地。 - 编辑
Gitee上克隆下来的源码,如果本机不可访问外网,则启动本机http服务,直接访问 http://localhost:4000 - 编辑
Gitee上克隆下来的源码,如果本机可访问外网,将编辑好的源码复制到Github库一份,并Push到Github上,实现同步备份之目的。
使用 Python 内置服务器本地托管博客
安装 Python3
1 | sudo pacman -S python3 |
创建服务文件
1 | [Unit] |
重要
WorkingDirectory必须是博客根目录(即包含public文件夹的目录),而不是public本身。User建议填写你的普通用户名,不要用root。
重新加载并启动
1 | sudo systemctl daemon-reload |
如果状态为 active (running),即可通过
http://localhost:4000 访问。
Wacom的配置和使用
今天网购的数位板Wacom PTK670 收到了,做工相当精制,铝合金机身,超薄设计,厚度仅有4mm, 使用体验了一下,相当好用。我的电脑装配的是 ArchLinux 系统,而 Linux 内核默认是包含 Wacom 驱动的,这也构成了我选择 Wacom 的理由,同时在使用 Gnome+wayland 的组合中不需要任何设置就能完美运行。
ArchLinux 的设置
安装支持手写的软件
xournall++和Openboard1
sudo pacman -S xournalpp openboard
配置快捷键,支持更高效的工作。Wacom PTK670 左右各有一个滚轮和四个方向键,根据操作的频繁程度,我规划了自定义键:
- 打开设置:设置→ 数位板→自定义功能
- 左侧:转轮逆时针向上,顺时针向下, 上键对应
PgUp, 下键PgDn, 左键Ctrl Z撤销,右键Ctrl y, - 右侧:转轮逆时针缩小,顺时针放大,
上键对应
Ctrl+Shift+Delte删除当前页, 下键Ctrl+D新增一页, 左键保留,右键保留.
设置触控笔
- 压力感应设置,启动
xournalpp, 然后依次点击:编辑→触控笔→最小压力0.01→压力增强4.00. - 触控笔按钮:按钮1
手形工具, 按钮2高亮, 按钮3橡皮.
目前暂做上述设定,在使用中再逐步改善。
书定文件转打印体
将书写的内容复制图片,粘贴到通义千问或DeepSeek中,让Ai帮助识别成打印体,实验的结果是只要字不是非常草,文字和公式都能正确识别,然后让Ai以LaTeX源格式输出,只需复制粘贴到LaTeX文件中即可实现编译成PDF文档。这个方法对于大规模的写解答题的答案等是相当可高效的。