原文地址:https://medium.com/@TusharKanjariya/i-used-the-terminal-wrong-for-years-5557b10c0b85
原文作者:Tushar Kanjariya
不用 Google,不用抄 cheat sheet,就那么流畅地在终端里操作,像在聊天一样。
我以为他有什么秘密工具集。其实没有。他只是比我更了解终端。
大多数开发者都有的问题
大多数开发者使用终端的方式,和他们在第一个教程里学到的一模一样:输入命令,按回车,重复。
这能用。
但很慢。
时间一长,那些细小的延迟会变成真实的摩擦。
我没有意识到的是:终端不只是一个工具,它是一个环境。一旦你这样看待它,一切都会改变。
以下是我每天实际在用的技巧。不是 50 条命令,只有那些真正留下来的。
Trick #1:停止重复输入你已经运行过的命令
这个让我学到时很受冲击。
你运行了一条很长的命令,结果因为权限错误失败了。现在你想加上 sudo 重试。与其按上方向键再把光标移到行首,不如直接运行:
sudo !!
!! 会展开为你上一条完整命令。就这样。两个字符,而不是重新输入整条命令。
还有这个更好用:
mkdir my-project
cd !$
!$ 代表上一条命令的最后一个参数。在链式操作时极其有用。你刚创建了一个文件夹并跳进去,文件夹名只输入了一次。
我每天大概用 !$ 二十次。看起来很小,但消除的摩擦是真实的。
Trick #2:Ctrl+R 是你终端里的搜索引擎
所有人都知道上方向键可以循环翻历史记录。但那是线性的——你得一直按上键,直到找到你想要的。
Ctrl+R 会在你的完整历史记录中做反向搜索。只需输入命令的任意片段,它就会找到最近一次匹配。
(reverse-i-search)`docker': docker-compose up -d --build
再按 Ctrl+R 可以循环到更早的匹配项。按 Enter 直接运行,按 Esc 先编辑再运行。
仅这一个改变,每天就能为你节省好几分钟。如果你频繁使用长 docker、git 或 ssh 命令,你会好奇自己以前是怎么撑过来的。
额外技巧:增大历史记录容量,这样搜索才能真正往回翻更多。把下面这段加入你的 .bashrc 或 .zshrc:
HISTSIZE=10000
HISTFILESIZE=20000
HISTCONTROL=ignoredups:erasedups
这样你的历史记录可以保留 10,000 条命令,并且不会被重复项塞满。搜索才真正有用。
Trick #3:即时修正拼写错误
你刚运行了一条有拼写错误的命令。经典案例:
git chekcout main
与其按上键再手动编辑,使用 ^old^new 替换技巧:
^chekcout^checkout
这会把上一条命令中的 chekcout 替换为 checkout 并立即运行。
这是那种会让团队里的人停下来问“等等,你怎么做到的?”的技巧。然后你解释的时候会很有成就感。
Trick #4:alias 是免费的生产力——好好用
每周输入超过五次的命令都值得设一个 alias。
alias 写在 ~/.bashrc(Linux)或 ~/.zshrc(macOS)里。以下是我实际在用的入门配置包:
# 目录导航
alias ..='cd ..'
alias ...='cd ../..'
alias ~='cd ~'
alias -- -='cd -' # 返回上一个目录
# 文件列表
alias ll='ls -alF'
alias lt='ls -ltr' # 按时间排序,最新的在最后
# 安全网(覆盖前先询问)
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Git 快捷方式
alias gs='git status'
alias ga='git add .'
alias gc='git commit -m'
alias gp='git push'
alias gl='git log --oneline --graph --decorate'
alias gco='git checkout'
# Docker 快捷方式
alias dps='docker ps'
alias dc='docker-compose'
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
# 开发快捷方式
alias ni='npm install'
alias nrd='npm run dev'
alias nrb='npm run build'
# 编辑配置后重新加载 shell
alias reload='source ~/.bashrc'
添加之后运行 source ~/.bashrc(或者等你加上了 reload 这个 alias 之后直接用它),立即生效。
有一个被低估的 alias:
alias -- -='cd -'
它会带你回到上一个文件夹。就像浏览器的后退按钮。我每天都在用。
Trick #5:你可能一直在忽略的键盘快捷键
终端里充满了大多数开发者从未学过的键盘快捷键,因为没人告诉过他们。以下是我频繁使用的那些:
Ctrl + A → 跳到行首
Ctrl + E → 跳到行尾
Ctrl + W → 向后删除一个单词
Ctrl + U → 清除光标前的所有内容
Ctrl + K → 清除光标后的所有内容
Ctrl + L → 清屏(等同于 'clear')
Ctrl + C → 取消当前命令
Ctrl + Z → 挂起当前进程(用 'fg' 唤回)
Alt + F → 向前跳一个单词
Alt + B → 向后跳一个单词
我最常用的组合:Ctrl+A 跳到行首,再按 Ctrl+K 删掉整行。比一直按 Backspace 快多了。
Alt+F 和 Alt+B 按单词跳转,在编辑长命令时是游戏规则改变者。不用再一直按方向键了。
Trick #6:tmux — 别让你的工作随着终端窗口一起消失
如果你在远程服务器上工作,或者只是想在不切换窗口的情况下拥有多个终端面板——tmux 是改变一切的工具。
它为什么重要:没有 tmux,SSH 连接一断,进程就死了。有了 tmux,它继续运行。你重新连接,从上次离开的地方继续。
基本 tmux 工作流:
# 启动一个命名 session
tmux new -s myproject
# 从 session 中脱离(一切继续运行)
Ctrl + B, then D
# 稍后重新连接
tmux attach -t myproject
# 列出所有 session
tmux ls
在 tmux 内部,你可以把终端分割成多个 pane:
Ctrl + B, then % # 垂直分割
Ctrl + B, then " # 水平分割
Ctrl + B, then arrow # 在 pane 之间切换
有趣的地方来了。你可以在一个 pane 里跑服务,另一个 pane 流式输出日志,第三个 pane 开着编辑器——全在同一个窗口里。
我见过开发者开着五个 SSH 的浏览器标签页。他们一看到 tmux,就再也回不去了。
Trick #7:让任务在后台运行
你在跑一个耗时进程——构建、测试套件、服务器。你不想开新标签页。只需在命令后面加 &:
npm run build &
进程在后台运行,终端立即释放。你会看到打印出一个 job ID,类似 [1] 23456。
把它带回前台:
fg
查看所有后台 job:
jobs
如果你已经启动了一个长进程但没加 &,可以用 Ctrl+Z 挂起它,再在后台恢复:
Ctrl + Z # 挂起
bg # 在后台恢复运行
这类技巧写下来看起来平平无奇,但很快就会成为肌肉记忆——而且比每次都开新终端标签页快得多。
Trick #8:让 cd + ls 合二为一
这是一种你会发现自己频繁重复的模式:cd 进某个目录,紧接着 ls。
与其输两条命令,不如合成一个函数。把这段加入你的 .bashrc 或 .zshrc:
function cl() {
cd "$1" && ls -la
}
现在 cl my-project 一条命令就能进入文件夹并列出内容。
Shell 函数比 alias 更强大,因为它可以接受参数并执行逻辑。这是一个简单的例子,但它打开了一扇门:你可以构建自己的迷你工具,量身定制你的工作流。
Trick #9:fzf — 让一切都能模糊搜索的工具
如果让我从这整个清单里选一个工具立刻安装,那就是 fzf。
fzf 是命令行的模糊查找器。它可以搜索文件、命令历史、git 分支、运行中的进程——任何列表形式的内容。
安装方式:
# macOS
brew install fzf
# Ubuntu / Debian
sudo apt install fzf
安装后,Ctrl+R 会变成一个超强的交互式历史搜索,而不是简单的反向搜索。你能同时看到所有匹配项,实时过滤,并用方向键浏览。
你还可以把任何东西 pipe 进去:
# 模糊搜索并打开文件
vim $(fzf)
# 交互式切换 git 分支
git checkout $(git branch | fzf)
# 交互式 kill 进程
kill $(ps aux | fzf | awk '{print $2}')
切换分支那个是我每天都在用的。再也不用费力回忆准确的分支名了。
Trick #10:pipe 到 pbcopy / xclip — 停止手动选中文本
你想把命令输出复制到剪贴板。常规做法:运行命令,手动选中输出,右键,复制。
终端的做法:
# macOS
cat some-file.txt | pbcopy
# Linux
cat some-file.txt | xclip -selection clipboard
输出立刻进入剪贴板。不需要鼠标。
复制 SSH key、API token、构建输出,或任何需要粘贴到其他地方的长字符串时,这个技巧极其有用。
# 复制你的 SSH public key
cat ~/.ssh/id_rsa.pub | pbcopy
一条命令,key 进剪贴板,搞定。
这些技巧看似琐碎,但正是它们一点点拼出了高效的工作流。说到底,掌握运维 & 测试领域的效率工具,本质上是在减少环境带来的摩擦,让你能更专注于解决问题本身。