终端快捷键:提升效率的秘密

作为一名开发者,你可能每天都在使用命令行终端,但你真的了解那些能让你效率翻倍的快捷键吗?今天我要分享一些被严重低估的命令行快捷键,它们能彻底改变你的工作方式。

终端快捷键:提升效率的秘密

适用范围: 本文介绍的快捷键适用于多种命令行环境,包括 Windows PowerShell、macOS/Linux 的 bash、zsh 等 shell。许多快捷键是跨平台通用的(基于 Readline/PSReadLine),部分是特定 shell 的专属功能。文中会特别标注每个快捷键的平台支持情况。

为什么要学习快捷键?

想象一下:你正在输入一条长达 100 字符的命令,突然发现中间某个参数写错了。大多数人会怎么做?疯狂按删除键,或者干脆放弃重新输入。但如果我告诉你,只需要 3 个按键就能精确定位并修改?这就是快捷键的魔力。

🚀 最值得掌握的快捷键

1. 多行编辑:告别拥挤的单行命令

跨平台支持: Shift+Enter 是 PowerShell 特有功能。在 bash/zsh 中使用反斜杠 \ 换行。

当你需要写一条复杂的管道命令时,把所有内容挤在一行是很痛苦的:

Get-ChildItem -Path C:\Projects -Recurse | Where-Object {$_.Extension -eq ".cs"} | Select-Object Name, Length

PowerShell: 使用 Shift+Enter 可以优雅地换行,而不会立即执行命令:

Get-ChildItem -Path C:\Projects -Recurse |
    Where-Object {$_.Extension -eq ".cs"} |
    Select-Object Name, Length

bash/zsh: 使用反斜杠 \ 实现同样效果:

docker run -d \
  -p 8080:80 \
  --name my-container \
  nginx

更多多行编辑快捷键(PowerShell 专属):

  • Ctrl+Enter: 在当前行上方插入空行
  • Shift+Ctrl+Enter: 在当前行下方插入空行

这些快捷键让你可以像在编辑器中一样组织命令,代码可读性瞬间提升!

2. 按单词操作:精确编辑的艺术

跨平台支持: ✅ 大部分快捷键通用,但 macOS 需注意 Option 键配置

忘掉一个字符一个字符地移动光标吧,按单词操作才是王道:

移动光标(通用):

  • Ctrl+A - 跳到行首
  • Ctrl+E - 跳到行尾
  • Ctrl+左/右箭头 - 按单词跳转(Windows/Linux)
  • Option+左/右箭头 - 按单词跳转(macOS)
  • Alt+B / Alt+F - 按单词前后移动(bash/zsh,macOS 可能是 Esc+B / Esc+F)

删除文本:

  • Ctrl+W - 删除光标前的整个单词(✅ 通用)
  • Ctrl+U - 删除光标到行首的所有内容(✅ 通用)
  • Ctrl+K - 删除光标到行尾的所有内容(✅ 通用)
  • Ctrl+Backspace - 删除前一个单词(PowerShell)
  • Option+Backspace - 删除前一个单词(macOS)
  • Ctrl+Delete / Alt+D - 删除后一个单词
macOS 用户注意: 在 Terminal.app 中,需要启用 "Use Option as Meta key": Terminal → Preferences → Profiles → Keyboard → 勾选此选项

实战案例:

# 假设你输入了这条命令
docker run -d -p 8080:80 --name my-contaienr nginx
#                                      ↑ 拼写错误!

传统做法:按住 Backspace 删除 "nginx",再删除 "my-contaienr",然后重新输入。

使用快捷键:

  1. Ctrl+左箭头(或 macOS 的 Option+左箭头)两次,光标跳到 "my-contaienr" 开头
  2. Ctrl+W(或 macOS 的 Option+Backspace)删除这个单词
  3. 输入正确的 "my-container"

三个按键搞定,优雅高效!

3. 历史搜索:你的命令永远不会丢失

跨平台支持: ✅ Ctrl+R 通用,F8 是 PowerShell 专属

所有现代 shell 都会记住你执行过的命令,关键是如何快速找到它们。

Ctrl+R:反向搜索(✅ 通用 - 最常用)

按下 Ctrl+R,输入关键词,shell 会从最新的历史记录开始搜索:

(reverse-i-search)`dock': docker ps -a

继续按 Ctrl+R 可以找到更早的匹配项。找到想要的命令后,按 Enter 执行,或按左/右箭头编辑。

Ctrl+S:正向搜索(反向搜索的"撤销")

如果你用 Ctrl+R 搜索过头了,按 Ctrl+S 可以往回(往更新的方向)搜索。

macOS/Linux 用户注意:bash/zsh 中 Ctrl+S 也支持正向搜索,但默认可能被"冻结输出"功能占用PowerShell 无此问题,Ctrl+S 直接可用

需要先禁用输出冻结功能:

# 添加到 ~/.zshrc 或 ~/.bashrcstty -ixon

F8:前缀搜索(🔥 PowerShell 专属 - 精确制导)

这个功能超级实用但很多人不知道!先输入命令的开头几个字符,然后按 F8:

git    # 输入 "git" 然后按 F8

PowerShell 会只显示以 "git" 开头的历史命令,比 Ctrl+R 更精确!按 Shift+F8 可以正向搜索。

bash/zsh 的替代方案:

在 zsh 中,你可以配置上/下箭头实现类似功能:

# 添加到 ~/.zshrc
bindkey '^[[A' history-beginning-search-backward
bindkey '^[[B' history-beginning-search-forward

配置后,输入 "git" 然后按上箭头,就能搜索所有以 "git" 开头的命令!

清除历史记录:Alt+F7(PowerShell)

如果你的历史记录太乱了,用 Alt+F7 一键清空(但这不会影响 PowerShell 的持久化历史)。

4. 智能补全:不只是 Tab 键

跨平台支持: Tab 通用,Ctrl+Space 是 PowerShell 专属

大多数人知道 Tab 可以自动补全,但你知道还有更强大的菜单式补全吗?

Tab:基础补全(✅ 通用)

所有 shell 都支持 Tab 补全,按多次 Tab 可以循环选择。

Ctrl+Space(或 Ctrl+@):菜单式补全(PowerShell 专属)

按下后会显示所有可能的补全选项,你可以用箭头键选择,而不是盲目地按 Tab 循环:

Get-    # 按 Ctrl+Space
# 显示:
# Get-Acl
# Get-Alias  
# Get-ChildItem
# Get-Command
# ...

bash/zsh 的增强补全:

  • zsh 自带强大的补全系统,Tab 两次会显示补全菜单

bash 可以配置更好的补全体验:

# 添加到 ~/.bashrcbind 'set show-all-if-ambiguous on'bind 'TAB:menu-complete'

5. 参数复用:Alt+. 的魔法

跨平台支持: ✅ 通用(macOS 可能需要 Esc+. 或配置 Option 键)

这是我最喜欢的快捷键之一!Alt+. 会插入上一条命令的最后一个参数。

场景演示:

ls /var/log/nginx/
# 发现了感兴趣的日志文件

cd    # 输入 cd 然后按 Alt+.
# 自动变成:cd /var/log/nginx/

多次按 Alt+. 可以循环使用更早命令的参数。当你需要对同一个文件或目录执行多个操作时,这个功能简直是神器!

macOS 用户:

  • 可能需要按 Esc 然后按 . (两次按键)
  • 或者在 Terminal 设置中启用 "Use Option as Meta key",然后就能用 Option+.

更多技巧:

  • Alt+数字+Alt+. 可以获取指定位置的参数(PowerShell)
  • 例如 Alt+1+Alt+. 获取第一个参数

6. 选择与复制:告别鼠标

跨平台支持: ⚠️ 选择功能主要是 PowerShell 特性,bash/zsh 依赖终端模拟器

PowerShell 的文本选择:

  • Ctrl+A: 选择整行
  • Shift+左/右箭头: 逐字符选择
  • Shift+Ctrl+左/右箭头: 按单词选择
  • Shift+Home/End: 选择到行首/行尾

选中后:

  • Ctrl+C: 复制(如果没有选中内容,则复制整行)
  • Ctrl+X: 剪切
  • Ctrl+V: 粘贴

bash/zsh:

bash 和 zsh 本身不提供文本选择功能,复制粘贴依赖于终端模拟器:

  • macOS Terminal: 用鼠标选择,Cmd+C 复制,Cmd+V 粘贴
  • iTerm2: 支持更多快捷键和智能选择
  • Linux: 通常 Ctrl+Shift+C/V 或鼠标中键粘贴

7. 屏幕控制

跨平台支持: ✅ Ctrl+L 通用,其他功能依赖终端

Ctrl+L: 清屏,但保留当前输入的命令(✅ 所有 shell 都支持)

PageUp/PageDown: 滚动终端输出(依赖终端模拟器) Ctrl+PageUp/PageDown: 逐行精确滚动(PowerShell)

提示: 在 macOS Terminal 中,通常用 Fn+上/下箭头 滚动输出

8. 其他实用技巧

跨平台支持: 混合

Ctrl+]: 跳转到匹配的括号(PowerShell 专属 - 写复杂的嵌套命令时很有用)

Escape: 清空当前行的所有输入(✅ 通用)

Ctrl+Z: 撤销编辑(PowerShell)/ 挂起当前进程(bash/zsh)

注意: bash/zsh 中 Ctrl+Z 会挂起进程,用 fg 恢复

Ctrl+Y: 重做(PowerShell)/ 粘贴删除的内容(bash/zsh)

F3: 字符搜索 - 输入一个字符,光标会跳到下一个匹配位置(PowerShell) Shift+F3: 反向字符搜索(PowerShell)

Ctrl+D: 删除光标下的字符(✅ 通用)/ 如果行为空则退出 shell

📚 快捷键速查表

🌐 跨平台通用快捷键(所有 shell 都支持)

快捷键 功能 备注
Ctrl+A 跳到行首 macOS 也可用 Cmd+左箭头
Ctrl+E 跳到行尾 macOS 也可用 Cmd+右箭头
Ctrl+K 删除到行尾
Ctrl+U 删除到行首
Ctrl+W 删除前一个单词
Ctrl+R 反向搜索历史 ✅ 最常用!
Ctrl+L 清屏
Alt+. 插入上条命令最后参数 macOS 可能需要 Esc+.
Ctrl+D 删除光标字符/退出
Escape 清空当前行

💻 PowerShell 专属快捷键

快捷键 功能
F8 前缀搜索历史(🔥 强烈推荐)
Shift+F8 正向前缀搜索
Shift+Enter 多行编辑不执行
Ctrl+Enter 在当前行上方插入空行
Shift+Ctrl+Enter 在当前行下方插入空行
Ctrl+Space 菜单式补全
Ctrl+Backspace 删除前一个单词(Windows)
Ctrl+] 跳到匹配括号
Alt+F7 清空历史记录
Ctrl+S 正向搜索(需配置)

🍎 macOS/Linux bash/zsh 特定

快捷键 功能 备注
Option+左/右箭头 按单词移动(macOS) 需配置 Option as Meta
Option+Backspace 删除前一个单词(macOS) 代替 Ctrl+Backspace
Alt+B / Alt+F 按单词前后移动 bash/zsh,macOS 可能需要 Esc+B/F
Cmd+K 清屏(Terminal.app) macOS 原生终端
Ctrl+S 正向搜索 需先运行 stty -ixon 禁用输出冻结

🔧 不同环境的配置建议

macOS 用户必做配置

1. 启用 Option 作为 Meta 键(Terminal.app):

Terminal → Preferences → Profiles → Keyboard 
→ 勾选 "Use Option as Meta key"

这样就能使用 Option+B/F(按单词移动)、Option+.(复用参数)等快捷键。

2. 启用 Ctrl+S 正向搜索(bash/zsh):

# 添加到 ~/.zshrc 或 ~/.bashrc
stty -ixon

此配置禁用终端的输出冻结功能,让 Ctrl+S 可用于正向搜索历史。

3. 配置类似 F8 的前缀搜索:

# 添加到 ~/.zshrc
bindkey '^[[A' history-beginning-search-backward
bindkey '^[[B' history-beginning-search-forward

现在输入命令前缀后按上/下箭头,就能搜索匹配的历史命令!

推荐的终端环境

  • Windows:
    • Windows Terminal(原生支持 PowerShell 所有特性)
    • PowerShell 7+(跨平台版本,功能更强)
  • macOS:
    • iTerm2(功能强大,快捷键支持好)
    • 原生 Terminal.app(需要配置 Option 键)
  • Linux:
    • Terminator、Tilix、Alacritty
    • GNOME Terminal、Konsole
  • 跨平台:
    • VS Code 集成终端(注意某些快捷键可能与编辑器冲突)
    • Windows Terminal(也支持 WSL)

💡 学习建议

不要试图一次性记住所有快捷键!我建议的学习路径:

第一周:掌握跨平台通用快捷键

  • Ctrl+A / Ctrl+E(行首/行尾)
  • Ctrl+K / Ctrl+U(删除到行尾/行首)
  • Ctrl+W(删除单词)
  • Ctrl+R(搜索历史)
  • Alt+.(复用参数)

这些在任何 shell 环境都能用,性价比最高!

第二周:环境特定功能

  • PowerShell 用户:学习 F8(前缀搜索)和 Shift+Enter(多行编辑)
  • macOS 用户:配置 Option 键,学习 Option+左/右箭头Option+Backspace
  • bash/zsh 用户:配置历史前缀搜索,启用 Ctrl+S(如果需要)

第三周:高级技巧

  • 按单词移动和删除的组合使用
  • 多行命令编辑(PowerShell 的 Ctrl+Enter 或 bash 的 \
  • 其他高级快捷键

🔍 查看完整快捷键列表

PowerShell:

# 查看所有快捷键
Get-PSReadLineKeyHandler

# 只看已绑定的
Get-PSReadLineKeyHandler | Where-Object {$_.Key -ne ""}

# 查看某个键的功能
# 按 Alt+? 然后按想查询的键

bash:

# 查看所有快捷键绑定
bind -P

zsh:

# 查看所有快捷键绑定
bindkey

命令行快捷键就像武侠小说里的内功心法,一旦掌握,你会发现自己的"功力"突飞猛进。最开始可能会觉得有点不习惯,但坚持一两周,这些快捷键就会成为肌肉记忆。

跨平台工作的建议: 如果你同时使用 Windows 和 macOS,优先记住那些通用的快捷键(Ctrl+A/E/K/U/W/R/L 和 Alt+.),它们在任何环境都能用。对于特定平台的功能,做好配置(如 macOS 的 Option 键和 zsh 的历史搜索),让不同环境的体验尽可能一致。

到那时,你会惊讶地发现,原来命令行可以如此流畅优雅。现在就打开你的终端,试试这些快捷键吧!你的手指会感谢你的。

Read more

間

春节回家,我又见到了我干爹家的三儿子。 他生下来就带着残疾,不能说话,手脚不协调,走路一瘸一拐,嘴角总是挂着口水。小时候干爹干娘怕别人欺负他,教他见人就笑。所以这么多年,不管走到哪,他都是笑着的。 左脚脚尖点地,左手弯着伸不直,走路习惯性靠在路的最右边,紧贴着路沿。我有时候担心他会踩进沟里,想想又觉得,也许他自己知道,这样不容易被人撞到。 那天下午我一个人在村东边路上走,他跟了上来。脸上沾着灰,鼻子里有一团鼻垢,我下意识想帮他弄掉,他偏过头,自己扣了下来,然后转过脸,把手里点着的烟举了举,冲我笑。 他的手指黄黄的,染得很深。后来我知道,小时候有人逗他,教他抽烟,就这么上了瘾,又没有能力自己戒。烟瘾越来越大,有烟就一口气抽完,多的时候一天三包。这两年逢年过节,大家口袋里都装着烟,见面互让,他也学会了凑过去。村里谁家办红白喜事,他都去帮着搬凳子搬椅子,人家给他几根烟,他就高兴。我那半包苏烟,后来进了他的口袋。

折叠时间

折叠时间

上次坐地铁的时候,我盯着手机看了一眼时间:20:37。等反应过来抬起头,已经是20:52了。十五分钟,就这么没了。 但1月牙疼去看牙医,在椅子上躺着等医生准备器械,那三分钟感觉比一个小时还长。 同样是时间,为什么有时候像沙子一样从指缝溜走,有时候又像琥珀一样凝固住每一秒? 不同的星球,不同的时钟 物理学告诉我们,引力会让时间变慢。在靠近黑洞的地方过一小时,地球上可能已经过了好几年。就像不同重量的球压在一张网上,越重的球把网面压得越深,时间在那里流逝得就越慢。 这个画面一直让我着迷。 后来我想,其实我们每个人的内心世界也像是不同的星球。有些事情对你来说很重要,它就像一颗大质量的星球,把你的时间网压出很深的凹陷。你围绕着它打转,时间在那里变得又浓又稠。 恋爱的时候,一天能想对方好几百次。每一次心跳都被放大,每一个眼神都值得回味。楼下等她的那段时间好像特别"漫长"。 但也有些日子,你就是在重复。起床、上班、吃饭、睡觉。一天天像复制粘贴一样过去了,回头看,好像什么都没留下。 大象和蚂蚁的一秒钟

思考

思考

在你阅读这篇文章之前,先问自己一个问题:你上一次真正深度思考是什么时候? 我所说的"深度思考",是指遇到一个具体而困难的问题,然后花费好几天时间专注于解决它的那种状态。 你的答案是什么? * a) 经常如此 * b) 从来没有 * c) 介于两者之间 如果你的答案是 (a) 或 (b),这篇文章可能不适合你。但如果像我一样,你的答案是 (c),那么这篇文章或许能引起你的共鸣,至少让你知道,你并不孤单。 首先声明:这篇文章没有答案,甚至没有建议。它只是我最近几个月内心感受的一次宣泄。 建造者与思考者 我相信我的性格建立在两个主要特质之上: 1. 建造者(渴望创造、交付和务实) 2. 思考者(需要深度、持久的智力挑战) 建造者这一面很容易理解,它追求速度和实用性。这是我渴望将"想法"转化为"现实&