我用了十年终端,今天才真正学会使用它

📅 2026/7/4 4:27:53 👁️ 阅读次数 📝 编程学习
我用了十年终端,今天才真正学会使用它

上个月,我看到一位资深开发者在90秒内修复了一个线上的问题,让我深受震撼。因为他没有谷歌搜索,没有翻看小抄,只是流畅地在终端里敲击,就像在进行一场对话。我原以为他有什么秘密武器,结果没有。跟他交流玩才知道他只是比我更懂终端。

我意识到,大多数开发者使用终端的方式,和他们再网上看的教程里学到的一模一样:输入命令,回车,重复。这确实能工作,但很慢。日积月累,那些微小的延迟变成了真正的阻力。

真正让我恍然大悟的是这个认知:终端不仅仅是一个工具,它是一个环境。一旦你开始把它当作环境来对待,一切都会改变。

下面是我在日常工作中真正用到的技巧,分享给大家。

停止重复输入你已经敲过的命令

sudo !!,这个技巧让我在刚学会时惊叹不已。你刚运行了一个长命令,因为权限问题失败了。现在你想用sudo重试它,不需要按上箭头然后把光标移动到开头增加sudo,只需运行sudo !!!!会展开成你完整的最后一条命令。就两个字符,不用重新敲整个命令。

mkdir my-project && cd !$!$给你的是上一条命令的最后一个参数。当你连续操作时,这个非常有用。你刚创建了一个文件夹并跳进去,却不用再输入文件夹名。我一天大概要用!$二十次,虽然小,但它消除的摩擦感是实实在在的。

Ctrl+R是你的终端搜索引擎

大家都知道上箭头循环浏览历史记录,但那是线性的,你得不停地按上直到找到想要的。Ctrl+R进行反向搜索,贯穿你的整个历史记录。开始输入任何命令的片段,它就会找到最近匹配的那个。按Ctrl+R再次循环到更老的匹配项,回车运行它,按Esc则可以先编辑。

这一个改变每天就能为你节省几分钟。如果你频繁使用长docker、git或ssh命令,你会惊讶于自己以前是怎么忍受的。

顺便说一句,增加你的历史记录大小,这样你才能真正搜索得更远。把下面这些加到你的.bashrc.zshrc

HISTSIZE=1000HISTFILESIZE=2000HISTCONTROL=ignoredups:erasedups

现在你的历史记录能回溯一万条命令,并且不会因为重复而混乱。搜索才能真正发挥作用。

即时修复拼写错误

你刚运行了一个带拼写错误的命令。经典的例子:git chekcout main。与其按上箭头手动编辑,不如用^old^new替换技巧:^chekcout^checkout,它会将上一条命令中的chekcout替换为checkout并立即运行。当你团队成员看到并停下来问“等等,你怎么做到的?”,你会很乐意解释。

别名:免费的生产力工具

每个你一周敲超过五次的命令都值得一个别名。别名存放在你的~/.bashrc(Linux) 或~/.zshrc(macOS) 文件里。下面是我实际在用的“起手式”:

# 导航alias..='cd ..'alias...='cd ../..'alias~='cd ~'alias-- -='cd -'# 回到上一个目录# 列出文件aliasll='ls -alF'aliaslt='ls -ltr'# 按时间排序,最新的在最后# 安全网(覆盖前请求确认)aliasrm='rm -i'aliascp='cp -i'aliasmv='mv -i'# Git 快捷aliasgs='git status'aliasga='git add .'aliasgc='git commit -m'aliasgp='git push'aliasgl='git log --oneline --graph --decorate'aliasgco='git checkout'# Docker 快捷aliasdps='docker ps'aliasdc='docker-compose'aliasdcu='docker-compose up -d'aliasdcd='docker-compose down'# 开发快捷aliasni='npm install'aliasnrd='npm run dev'aliasnrb='npm run build'# 重载 shell 配置aliasreload='source ~/.bashrc'

添加完后,运行source ~/.bashrc(或者你添加了reload别名后用这个)就能立即生效。alias -- -='cd -'这个命令能带你回到上一个目录,就像浏览器的后退按钮,我每天都用。

你可能忽略的键盘快捷键

终端里充满了大多数开发者从未学过的键盘快捷键。这些是我常用的一些:

  • Ctrl + A→ 跳到行首
  • Ctrl + E→ 跳到行尾
  • Ctrl + W→ 向后删除一个词
  • Ctrl + U→ 清除光标前所有内容
  • Ctrl + K→ 清除光标后所有内容
  • Ctrl + L→ 清屏
  • Ctrl + C→ 取消当前命令
  • Ctrl + Z→ 挂起当前进程(用fg恢复)
  • Alt + F→ 向前跳一个词
  • Alt + B→ 向后跳一个词

我最常用的组合是Ctrl+A跳到行首,然后Ctrl+K删除整行,比一直按退格键快多了。Alt+FAlt+B在编辑长命令时非常有用,不用再按住箭头键了。

tmux:别让你的工作随终端窗口消失

如果你在远程服务器上工作,或者只是想要多个终端窗格而不用切换窗口,tmux 就是那个改变一切的工具。

它重要的原因在于:没有 tmux,如果你的 SSH 连接断开,你的进程就会终止。有了 tmux,它会持续运行。你重新连接后,可以精确地回到你离开的地方。

基本 tmux 工作流:

# 启动一个命名的会话tmux new-smyproject# 从会话分离(所有内容继续运行)Ctrl + B,thenD# 稍后重新连接tmux attach-tmyproject# 列出所有会话tmuxls

在 tmux 内部,你可以把终端分割成窗格:

  • Ctrl + B, then %→ 垂直分割
  • Ctrl + B, then "→ 水平分割
  • Ctrl + B, then 方向键→ 在窗格间切换

你可以让服务器运行在一个窗格,日志流在另一个,编辑器在第三个——全都在同一个窗口里。我见过开发者开了五个浏览器标签页的SSH会话,一旦他们看到 tmux,就再也回不去了。

cd + ls变成一个命令

这是一个你会注意到“先cd到某处,紧接着ls”这个模式有多频繁的命令。把它们变成一个函数,加到你的.bashrc.zshrc

functioncl(){cd"$1"&&ls-la}

现在cl my-project会切换进文件夹并立刻列出其内容。

fzf:让一切变得可模糊搜索的工具

如果要从这个列表中只选一个工具安装,那就是fzf。fzf 是一个命令行模糊查找器。它可以搜索文件、命令历史、git 分支、运行的进程——任何列表形式的东西。

安装后(brew install fzfsudo apt install fzf),Ctrl+R会变成一个超级强大的交互式历史搜索,而不是简单的反向搜索。你能立刻看到所有匹配项,实时过滤,用箭头浏览。

你也可以把任何东西通过管道输送给它:

# 模糊搜索并打开一个文件vim$(fzf)# 交互式切换 git 分支gitcheckout$(gitbranch|fzf)# 交互式终止进程kill$(psaux|fzf|awk'{print $2}')

管道到pbcopy/xclip:告别手动选中文本

你想把命令输出复制到剪贴板。常规方式:运行命令,手动选中输出,右键,复制。终端的方式:

# macOScatsome-file.txt|pbcopy# Linuxcatsome-file.txt|xclip-selectionclipboard

现在输出瞬间就在剪贴板里了,不需要鼠标。这对复制 SSH 密钥、API 令牌、构建输出或任何需要粘贴到别处的长字符串都极其有用。

真正的转变

我逐渐意识到:大多数开发者把终端当作自动售货机——输入命令,得到输出,重复。但那些在终端里看起来毫不费力的开发者,和终端建立了一种关系。他们花时间定制它,学习它的快捷键,投资于那些能随着时间带来复利的小工具。

这些技巧没有一个很难,大约需要几分钟来设置。回报是数月乃至数年更流畅的工作。从Ctrl+R开始,如果你还没在用的话。或者设置别名。如果你想要单个最大的升级,就装 fzf。

终端是一个工具。但工具会回应熟悉它的双手。