这是我的第一篇杂想

捣鼓

上午的电力电子信息的教室太闷了,给我热过载了(晕)所以尝试捣鼓了下终端和claude:主要解决的是之前终端的z location失效和claude webfetch经常报错的问题

首先是zlocation:

问题:Oh My Posh 突然失效,终端只剩 PS>

症状

打开 PowerShell,原本的 oh-my-posh 提示符消失了,显示的是默认的 PS>,但 profile实在加载(显示”加载个人及系统配置文件用了 1868 毫秒”)。

当时忘记截图了

排查过程

第一步:检查 profile 文件

PowerShell 5.1 有两个 profile 路径会依次加载:
C:\Users...\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 ← 当前用户、当前宿主
C:\Users...\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 ← PowerShell 7 的

两个文件内容看起来都正确,oh-my-posh init pwsh –config … | Invoke-Expression 都在里面。oh-my-posh也安装了(v29.9.0),配置文件 atomic.omp.json 也是合法 JSON。

第二步:模拟加载 profile 抓错误

用 powershell -NoProfile -File 跑 profile 内容,发现:
Set-PSReadLineOption : The predictive suggestion feature cannot be enabled
because the console output doesn’t support virtual terminal processing or it’s redirected.

这个错误是因为我们通过 bash 重定向了输出,VT处理不可用。但这给我们一个线索:如果这个非终止性错误在某种场景下变成了终止错误,后面的代码就不会执行。

第三步:检查 profile 加载后的状态

加载 profile 后检查 prompt 函数,发现 prompt 已经被替换成了:
Update-ZLocation $pwd
ZLocationOrigPrompt

这说明 ZLocation 模块在 oh-my-posh 之后导入,用自己的 wrapper 盖掉了 oh-my-posh 的 prompt 函数。这是根本原因。

解决方案

  1. 移除 ZLocation
  • 从 profile 中删除 Import-Module ZLocation
  • 用 rm -rf 直接删除模块目录 C:\Users...\Documents\WindowsPowerShell\Modules\ZLocation\1.4.3
  • ZLocation 的工作原理是 hook prompt 函数来记录目录访问历史,跟 oh-my-posh 的 prompt 机制冲突是结构性的
  1. 用纯函数书签替代 ZLocation

  2. 启动提示

在 profile 末尾加上书签提示,每次新开终端自动显示可用书签,方便记忆。(主要是我记忆力太差了qwq)

这是我目前的powershell终端

总结了下关键原因:ZLocation 这类需要 hook prompt 的模块和 oh-my-posh 放在同一个 profile里是结构性冲突——谁后加载谁赢。要么只留一个,要么用不 hook prompt 的替代方案(比如纯函数书签)。

claude webfetch经常抓取失败的问题

使用 Claude Code 处理开发任务,经常需要抓取网页内容——读文档、看 GitHub 仓库、查资料,但是我很快发现ClaudeCode 内置的 WebFetch 在国内网络下几乎不可用,动不动就 Connection resetUnable to verify domain is safe to fetch

询问ai后发现内置 WebFetch 是经过 DeepSeek/Anthropic 服务器中转的,而这些服务器在海外,从国内发起请求经常被 GFW 阻断

解决方案

找到了一个MCP工具mcp__fetch__fetch可以从本地网络直接发起 HTTP 请求。我又同时保留了一个curl 回退方案

1
curl -x http://127.0.0.1:7890 "https://github.com"

最终我修改了修正 CLAUDE.md

1
2
3
4
## Web Fetch
- 抓取 URL 内容优先用 `mcp__fetch__fetch`,GFW 阻断时通过 `proxy` 参数走 Clash:
`proxy: "http://127.0.0.1:7890"`
- MCP fetch 不可用时回退 `curl -x http://127.0.0.1:7890`,最后才用内置 `WebFetch`

补充

这里还要注意的是,要写入CLAUDE.md才能被全局接受,打开新claude窗口后会自动读取,而之前写入的是Memory.md,实际上并不会被自动读取。

碎碎念

本来想写的是杂想,但是莫名写成了问题排查文档。不过也正好借着早上解决的问题往下聊一下,坐在电力电子技术的教室里虽然知道这是这学期最难的专业课,但还是没有听下去,默默打开电脑解决这两个跟专业没啥关系的问题。现在想来,竞赛队伍里的林老师已经收到了量化的实习offer,即将开启3000日薪的工作,而我还在闷热的教室里调着简单的问题,一边将专业课甩在脑后,一边焦虑着看不见的未来。我感觉还是没有和自我和解,还抱着坐在教室里就等于学习的想法,希望接下来的日子真正能够做到高效的学习。

写到这,补充下,我觉得这两个问题解决起来还是蛮有意思的,但是专业课也是要学的/kk