Appearance
国外大佬是如何使用 Claude Code的?(附最佳技巧)
node 字节笔记本 2025-07-12 16:34
**2025年7月11日,**作者:Steve Sewell
https://www.builder.io/blog/claude-code
原文翻译:
我已经是 Cursor 的重度用户超过一年了。我写过数千名开发者每周参考的 Cursor 技巧指南。我深入研究过 Cursor 的每一个高级功能和代理模式最佳实践。
然而我放弃了这一切,转向了 Claude Code。
几周以来,我完全在使用 Claude Code 而不是 Cursor 的代理功能。老实说,已经没有回头路了。
以下是我如何使用 Claude Code 以及获得最佳体验的技巧。
使用 VS Code 扩展
—
首先:安装 Claude Code 扩展。它适用于 VS Code、Cursor,可能也适用于 Windsurf。别期待什么惊喜,它基本上就是一个启动器。但它让打开 Claude Code 变得非常简单,只要它们在代码库的不同部分工作,你可以在 IDE 的不同窗格中并行运行多个实例。
我仍然使用 Cursor 进行快速的 Command+K 补全和 tab 补全。但是代理侧边栏?只有在 Claude 宕机时我才会碰它。
奇怪的是我的工作流程是如何演变的。我过去是在主编辑器中编码时将 Claude 作为一个小侧边栏。现在我首先默认使用 Claude,只有在审查更改时才瞄一眼代码。它已经成为我的主要界面,而不是次要界面。
终端 UI 很不错
—
是的,我也很怀疑。用终端界面进行基于聊天的代码编辑?听起来像是倒退。但 Anthropic 做得不错。
你可以轻松地用 @ 标记文件,使用斜杠命令(很有帮助),并精确选择要包含的上下文。除非 Opus 出现问题,否则我主要使用 Opus,然后切换到 Sonnet。大多数人可能应该使用默认设置——它会使用 Opus 直到你达到 50% 的使用量,然后为了成本效益切换到 Sonnet。
专业技巧:经常使用 /clear。每次开始新任务时,清除聊天记录。你不需要所有那些历史记录占用你的 token,你绝对不需要 Claude 运行压缩调用来总结旧对话。直接清除并继续。
向上箭头可以让你浏览过去的聊天记录,甚至是之前会话的记录。当你需要参考昨天的内容时很方便。
权限系统会让你抓狂
—
关于 Claude Code 最烦人的事情是:它什么都要请求权限。你输入一个提示,它开始工作,你去检查 Slack,五分钟后回来,它就坐在那里问"我可以编辑这个文件吗?"
是的,你可以编辑文件。这就是重点所在。
运行基本命令也是如此。"我可以运行 lint 吗?"是的。天哪,当然可以。
不过有一个解决方案。每次我打开 Claude Code 时,我都会按 Command+C 并运行 claude --dangerously-skip-permissions。它没有听起来那么危险——把它想象成 Cursor 的旧 yolo 模式。流氓代理理论上可能运行破坏性命令吗?当然。在我几周的使用中看到过这种情况吗?从未发生过。
这取决于你的风险承受能力,但我晚上睡得很安稳。
GitHub 集成实际上很有用
—
其中一个更酷的斜杠命令是 /install-github-app。运行后,Claude 会自动审查你的 PR。
这实际上很有用,因为随着你使用更多 AI 工具,你的 PR 数量会增加。老实说?Claude 经常发现人类遗漏的错误。人类会挑剔变量名。Claude 会发现实际的逻辑错误和安全问题。
关键是自定义审查提示。开箱即用的提示太冗长了,会对每个小细节都进行评论。Claude 会添加一个 claude-code-review.yml 文件,其中已经有一个提示。以下是我使用的替代版本:
# claude-code-review.yml
direct_prompt: |
请审查这个拉取请求并查找错误和安全问题。只报告你发现的错误和潜在漏洞。请保持简洁。
我们发现这个工具的原始问题是它真的很冗长。它会对各种细微的、不重要的事情进行评论,并在每个 PR 上写一整篇文章。我们真正最关心的是错误和潜在漏洞。所以我们明确告诉它这一点,并要求简洁。
它还可以做其他很酷的事情,比如从 GitHub 拉取请求中提取评论并解决它们,或直接审查拉取请求。
你需要了解的怪癖
—
由于它是终端界面,有一些不明显的行为:
- Shift+Enter 默认不能换行。只需告诉 Claude 用 /terminal-setup 设置你的终端,它会为你修复。
- 拖拽文件通常会像在 Cursor 或 VS Code 中一样在新标签页中打开它们。拖拽时按住 Shift 键可以在 Claude 中正确引用它们。
- 从剪贴板粘贴图片不能用 Command+V。使用 Control+V。我花了很长时间才搞清楚这一点。
- 停止 Claude 不是 Control+C(那会完全退出)。使用 Escape 实际停止 Claude。
- 跳转到之前的消息:按两次 Escape 会显示所有之前消息的列表,你可以跳回去。
如果你喜欢的话,还有一个 Vim 模式。我不喜欢。
Claude Code 能更好地处理大型代码库
—
真正的区别在于:我们在 Builder 有一个 18,000 行的 React 组件。(别因为代码组织问题 @ 我,我知道。)除了 Claude Code,没有任何 AI 代理成功更新过这个文件。
使用 Cursor 时,我仍然会遇到很多小问题。它难以解决补丁,经常需要重写文件,并且在更新极大的文件时真的很困难。
这不仅仅是文件大小的问题,Claude Code 在复杂任务方面表现出色。我发现它极少卡住(我甚至不确定是否注意到过)。使用 Cursor 时,我感觉必须更多地照顾它,当它卡住时,我必须停止它并意识到也许这不是一个好的任务。
Claude 在导航大型代码库、搜索模式、理解代码不同部分之间的关系、组件、共享状态等方面也非常出色。这真的很不可思议。
经济学很合理
—
想想看:Cursor 构建了一个支持多种模型的通用代理。他们需要一个完整的团队,加上他们训练自定义模型,加上他们需要在向 Anthropic 支付底层模型费用的基础上获得利润。
Anthropic 绝对制造最好的编码模型,他们让 Claude Code 最好地使用这些模型。当他们在 Claude Code 上遇到挑战时,他们会去改进模型。
他们了解模型如何工作、如何训练以及如何深入使用的一切。他们继续训练模型以便与他们对 Claude Code 的需求良好配合。
这也意味着 Anthropic 可以为你提供最大的价值和最低的价格,因为你只需要担心向他们付费。
他们可以在给你最大的模型(如 Opus)访问权限方面竞争,而不会出现像 Cursor 那样的情况,因为 Cursor 也需要赚钱。
这就像直接从制造商购买而不是通过经销商。当然更好。
定价合理
—
我支付最高计划每月 100 美元。如果你认为一个令人震惊的智能编码者 24/7 工作不值 100 美元/月,你需要看看你自己的时间收费多少。看看世界任何地方工程师每小时的人工成本,都比这个数量级高得多。
任何经理做这个数学计算都会看到它绝对值得,即使在最高可能的定价层级。
排队系统很方便
—
一个我离不开的功能:消息排队。你可以输入多个提示,Claude 会智能地处理它们。
我过去会创建一个记事本并开始起草我想要做的其他提示。然后当我看到一个完成时,我会去粘贴下一个并按回车。这就是我用 Cursor 做的,这真的很烦人,因为我通常会继续我的一天,回答 Slack 消息,回答邮件,做其他事情,然后回来看到代理已经闲置了不知道多长时间。
现在我只是把所有东西排队:"添加更多注释","实际上也...","还有...也是。"Claude 在知道何时应该实际运行这些事情方面真的很聪明。如果它需要你的反馈,它不会自动运行排队的消息。这是一个非常智能的系统,但当它完成某些事情时,会在合适的时候开始处理它们。
你可以排队很多,继续你的一天,在很多情况下,只需回来就能看到大量以良好和聪明方式完成的工作。但要时不时检查,因为它可能需要你的输入。
自定义相当深入
—
Claude Code 支持自定义钩子、斜杠命令和项目特定配置。很酷的部分?你可以让 Claude 为你构建这些。
我要求 Claude 添加几个默认钩子、命令和设置。它查看了我的项目并创建了一个我可以轻松编辑的设置文件,有几个值得注意的亮点:
它添加了一个 CLAUDE.md 文件,提供了一些项目概述和一些它应该知道的关键命令。这防止它每次都必须搞清楚这些并扫描代码库寻找"是否有构建命令或 lint 命令?"它总是意识到这些。
它添加了一些钩子,用于在接受编辑之前应该运行什么代码,比如在特定文件上运行 Prettier,或在编辑后,比如在特定文件上进行类型检查以确保它只接受良好和正确的文件。
你可以通过 .claude/hooks.mjs 文件创建自己的钩子,例如:
// .claude/hooks.mjs
import { execSync } from 'child_process';
import path from 'path';
// 编辑文件前运行的钩子
export async function preEdit({ filePath, oldContent, newContent }) {
// 检查是否编辑 TypeScript/JavaScript 文件
if (filePath.match(/\.(ts|tsx|js|jsx)$/)) {
// 确保文件在编辑前格式正确
try {
execSync(`yarn prettier --check "${filePath}"`, { stdio: 'pipe' });
} catch (e) {
console.log('⚠️ 文件需要格式化 - 将在编辑后格式化');
}
}
// 防止编辑某些受保护的文件
const protectedFiles = ['yarn.lock', 'package-lock.json', '.env.production', 'firebase.json'];
const fileName = path.basename(filePath);
if (protectedFiles.includes(fileName)) {
throw new Error(`❌ 无法编辑受保护的文件:${fileName}`);
}
return { proceed: true };
}
// 编辑文件后运行的钩子
export async function postEdit({ filePath, oldContent, newContent, success }) {
if (!success) return;
// 对 TypeScript 文件运行类型检查
if (filePath.match(/\.(ts|tsx)$/)) {
try {
execSync(`npx tsc --noEmit --skipLibCheck "${filePath}"`, { stdio: 'pipe' });
} catch (e) {
console.log('⚠️ 检测到 TypeScript 错误 - 请审查');
}
}
}
创建自定义斜杠命令
你也可以很容易地添加自定义斜杠命令。要添加命令,只需创建一个 .claude/commands 文件夹,添加命令名称作为带有 .md 扩展名的文件。你只需用自然语言编写这些,并且可以使用 $ARGUMENTS 字符串将参数放入提示中。
例如,如果我想输出一个测试,我可以创建 .claude/commands/test.md:
# .claude/hooks/test.md
请为以下内容创建全面的测试:$ARGUMENTS
测试要求:
- 使用 Jest 和 React Testing Library
- 将测试放在 __tests__ 目录中
- 模拟 Firebase/Firestore 依赖项
- 测试所有主要功能
- 包括边缘情况和错误场景
- 测试 MobX 可观察状态变化
- 验证计算值正确更新
- 测试用户交互
- 确保在 afterEach 中进行适当清理
- 目标是高代码覆盖率
然后 /test MyButton 做的就是你期望的事情。你甚至可以有子文件夹 - 我们可以像 /builder/plugin 这样访问它们,这将匹配一个 builder 文件夹中的 plugin.md 文件。这就是我们如何轻松创建新的 Builder 插件。
记忆系统
—
另一个很酷的功能是你可以使用 # 符号超快地添加记忆。比如"新东西总是使用 MUI 组件",它会自动保存到最相关的文件中。
CLAUDE.md 文件可以是分层的,所以你可以有一个项目级别的,也可以在嵌套目录中有一个。它会查看所有这些,并在相关时优先考虑最具体的、最嵌套的。
你也可以将其保存到你想要在任何地方应用的全局用户记忆偏好中,或者特定于你并被 git 忽略的本地项目记忆。添加到任何这些文件中,它会为你编写。
当你想要正常的 UI 时
—
终端界面并不总是理想的。有时你只想像正常人一样点击和高亮文本。
这就是我们的 Builder.io 扩展的用途。你可以从你的 IDE 启动一个可视界面,它在底层与 Claude Code 完全一样工作。我们尽可能接近地逆向工程了它。你得到一个正常的聊天界面、实时预览,甚至可以切换到 Figma 风格的设计模式进行可视编辑。
你的整个团队都可以使用它——设计师、产品经理,任何人。他们可以创建原型、清理 UI,并提交 PR,而无需理解终端界面。
在 Builder 内部,我们一直在使用这个让我们的工程师专注于困难的工程工作,而其他团队处理 UI 细节和像素完美的实现。
然后,当我们的工程团队需要更新 PR 时,我们可以直接使用 @builderio-bot,Claude 会自动解决反馈并推送提交来解决问题。
(完)
字节笔记本微信公众号读者群限时免费开放,加微信iweico。