现代终端工作流使用说明

日常入口

打开 Ghostty 后,默认进入 zsh,并自动加载:

  • starship prompt
  • zsh vi mode
  • fzf 快捷搜索
  • zoxide 智能跳转
  • eza / bat / fd / ripgrep 别名
  • tmux / k8s / lazygit 快捷命令

推荐日常进入方式:

tn work

已有 session:

tls
ta work

对应原始命令:

tmux new -s work
tmux ls
tmux attach -t work

zsh Vi Mode

当前 zsh 使用 vi mode。

进入 normal mode:

Esc
Ctrl+[
jj

回到 insert mode:

i
a
A
I

常用 normal mode 操作:

h       左移
l       右移
0       到行首
$       到行尾
w       下一个词
b       上一个词
x       删除当前字符
dd      清空当前命令行
u       撤销

Starship 会用提示符方向显示模式:

❯   insert mode
❮   normal mode

如果看不到变化,用这个测试:

输入 abc
按 Esc 或 jj
按 h

光标左移说明已经进入 normal mode。

tmux

创建 session:

tn work

列出 session:

tls

进入 session:

ta work

核心快捷键:

Ctrl-a d             detach session
Ctrl-a |             左右分屏
Ctrl-a -             上下分屏
Ctrl-a h/j/k/l       切换 pane
Ctrl-a Shift-h/j/k/l resize pane
Ctrl-a m             最大化/恢复 pane
Ctrl-a r             重新加载 ~/.tmux.conf
Alt-h                上一个 window
Alt-l                下一个 window

tmux copy mode:

Ctrl-a [
v       开始选择
y       复制并退出 copy mode

注意:

  • tmux prefix 是 Ctrl-a
  • 如果需要把真实 Ctrl-a 发送给 shell,用 Ctrl-a a
  • 已经打开的 tmux pane 不会自动加载新的 .zshrc;改配置后在 pane 里执行 source ~/.zshrc,或新开 pane/window。
  • 改了 .tmux.conf 后执行 Ctrl-a r

文件浏览

常用命令:

ls
ll
la
tree

实际映射:

alias ls="eza --icons --group-directories-first"
alias ll="eza -lah --icons --group-directories-first"
alias la="eza -a --icons --group-directories-first"
alias tree="eza --tree --icons"

建议用法:

ll
tree -L 2
eza --git --long --icons

文件查看

cat 已映射到 bat

cat README.md
bat package.json
bat -n path/to/file

如果需要原始 cat 行为,例如检查按键编码:

/bin/cat -v

EscCtrl+[ 应显示:

^[

如果显示 1;5u,说明 Ghostty 没有把 Ctrl+[ 按 legacy ESC 发送。

搜索

文本搜索:

rg "keyword"
rg "TODO|FIXME" src
rg -n "functionName" .

文件搜索:

fd README
fd "\\.yaml$"
fd Dockerfile

如果需要系统原始命令:

/usr/bin/grep pattern file
/usr/bin/find . -name '*.md'

fzf

fzf 在真实交互式终端中自动初始化。

常见快捷键:

Ctrl-r    搜索历史命令
Ctrl-t    搜索文件并插入命令行
Alt-c     搜索目录并 cd

如果快捷键没有生效:

bindkey | rg 'fzf|\\^R|\\^T'

注意:配置会把仍是 self-insertCtrl+字母 改成 undefined-key,但不会覆盖已经被 fzf 等工具占用的快捷键。

Git

进入 git 仓库后:

lg

命令行 diff:

git diff | delta

Kubernetes

查看当前 context:

kctx

切换 context:

kx

切换 namespace:

kn

打开 k9s:

k9s

查看日志:

stern app-name
stern app-name -n namespace

kubectl 快捷别名:

k get pods
k get deploy -A
k logs -f deploy/app-name

系统观察

进程和资源:

top
btm

磁盘占用:

du
dust
dust -d 2

如果需要系统原始 du

/usr/bin/du -sh *

JSON / YAML

JSON:

jq '.' file.json
jq '.items[] | .metadata.name' pods.json

YAML:

yq '.spec.template.spec.containers[].image' deploy.yaml

主题切换

Ghostty 当前主题在:

~/.config/ghostty/config

查看可选主题:

ghostty +list-themes

修改:

theme = GitHub Dark Dimmed

验证:

ghostty +validate-config --config-file=$HOME/.config/ghostty/config

bat 当前主题在:

~/.config/bat/config

查看可选主题:

bat --list-themes

修改:

--theme="Catppuccin Mocha"

配置重新加载

zsh:

source ~/.zshrc

tmux:

Ctrl-a r

或:

tmux source-file ~/.tmux.conf

Ghostty:

Cmd+Shift+,

或重启 Ghostty。

故障排查

检查 zsh vi mode:

bindkey -lL main
bindkey -M viins 'jj'
bindkey -M viins '^['
echo $KEYTIMEOUT

期望:

bindkey -A viins main
"jj" vi-cmd-mode
"^[" vi-cmd-mode

检查 Ghostty ESC:

/bin/cat -v

Esc / Ctrl+[,期望:

^[

检查 starship wrapper 是否递归:

echo ${widgets[zle-keymap-select]-unset}

期望:

user:starship_zle-keymap-select

如果出现:

starship_zle-keymap-select-wrapped:1: maximum nested function level reached

处理:

source ~/.zshrc

仍不正常就开新 shell;当前配置已经避免重复 source 后 wrapper 继续套娃。

检查 tmux 中为什么不生效:

tmux show-environment -g | rg 'STARSHIP|TERM|SHELL|KEYTIMEOUT'
tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_current_command} #{pane_tty}'

说明:

  • tmux 没有单独的 zsh 配置。
  • 但 tmux server 会保留启动时环境变量。
  • 已有 pane 里的 zsh 不会自动读取新的 .zshrc
  • 新开 pane/window 或执行 source ~/.zshrc 才会生效。

检查命令是否被 alias:

type cat
type grep
type find

例如 cat 当前是 bat,排查原始终端输入时用 /bin/cat -v