AI Infra 训练营
总览
  • Day 1 · 集群起步 + CNI
  • Day 2 · 控制面 + etcd
  • Day 3 · CRD + Operator + Webhook
  • Day 4 · 存储深度
  • Day 5 · 卷扩容 + 安全
  • Day 6 · 调度 + 可观测
  • Day 7 · Harbor + ArgoCD + Mesh
  • Day 8 · AI Infra
  • Day 9 · Triton + GPU
  • Day 10 · MIG + HPA + 量化
  • Day 11 · AI Agent 端到端
  • Day 12 · 灾备
  • Day 13 · Operator + 联邦 + Mesh + RAG
  • Day 14 · CKA / CKS + 总结
  • LLM 训练手册
  • RAG + Agent 手册
  • 推理优化手册
  • 上下文工程手册
  • Agent 开发手册
  • 面试深度复盘
  • 训练 v2 深度手册
  • 心智模型
  • 看懂命令输出
  • 容器网络底层
  • K8s 网络深入
  • DNS 全套
  • 故障排查方法论
  • 心智模型
  • 容器挂载完整指南
  • K8s Volumes 大全
  • PV/PVC/CSI 深入
  • NFS 深入
  • 分布式存储概览
  • 故障排查 runbook
HiHuo 主站
GitHub
总览
  • Day 1 · 集群起步 + CNI
  • Day 2 · 控制面 + etcd
  • Day 3 · CRD + Operator + Webhook
  • Day 4 · 存储深度
  • Day 5 · 卷扩容 + 安全
  • Day 6 · 调度 + 可观测
  • Day 7 · Harbor + ArgoCD + Mesh
  • Day 8 · AI Infra
  • Day 9 · Triton + GPU
  • Day 10 · MIG + HPA + 量化
  • Day 11 · AI Agent 端到端
  • Day 12 · 灾备
  • Day 13 · Operator + 联邦 + Mesh + RAG
  • Day 14 · CKA / CKS + 总结
  • LLM 训练手册
  • RAG + Agent 手册
  • 推理优化手册
  • 上下文工程手册
  • Agent 开发手册
  • 面试深度复盘
  • 训练 v2 深度手册
  • 心智模型
  • 看懂命令输出
  • 容器网络底层
  • K8s 网络深入
  • DNS 全套
  • 故障排查方法论
  • 心智模型
  • 容器挂载完整指南
  • K8s Volumes 大全
  • PV/PVC/CSI 深入
  • NFS 深入
  • 分布式存储概览
  • 故障排查 runbook
HiHuo 主站
GitHub

vim —— 远程编辑必备最小集

一句话定义

vim 是 Linux 上几乎一定有的编辑器(远端机器没 VS Code、没图形)。这篇不教你 vim 全功能——只讲"运维场景下足够用的 30%":进/出文件、增删改查、保存退出、救命操作。

典型场景

  • 远端改 /etc/ssh/sshd_config
  • 看 /var/log/... 的日志
  • 改 yaml manifest
  • 紧急救命模式(系统启不来、只剩 console)

想学完整 vim → vimtutor(每个 vim 自带)。想替代 vim → 配 nano / micro(更傻瓜但远端不一定有)。


装 / 看版本

vim --version | head

发行版默认通常有 vim-tiny(精简)。装完整版:

apt install -y vim                          # Ubuntu / Debian
yum install -y vim-enhanced                  # CentOS / RHEL

精简版(vi)没有语法高亮、没 visual 模式、有些坑。vim 装上后 alias vi=vim。


核心:三个模式

vim 反人类的根源——它有模式:

                ┌─────────────┐
                │ Normal mode │   ← 默认进入这里。命令、移动、删除
                └──┬──────────┘
                   │ i / a / o / I / A / O
                   ▼
                ┌─────────────┐
                │ Insert mode │   ← 真正"输入文字"
                └──┬──────────┘
                   │ Esc
                   ▼
            (回到 Normal)
                   │ :
                   ▼
                ┌────────────────┐
                │ Command mode   │   ← :w, :q, :wq, :%s/.../.../
                └────────────────┘

Esc 永远回到 Normal mode。卡了就疯狂按 Esc。

现代 vim 也支持鼠标和方向键 —— 但学规范键位更快(hjkl)。


一句话救命指南

打开了 vim 不知道怎么退出:

Esc Esc Esc            ← 确保在 Normal 模式
:                       ← 进 command 模式
q!                      ← 不保存退出
Enter

:q! 是放弃所有改动退出。这一条记牢——其它都是建立在这之上。


打开 / 保存 / 退出

vim file.txt                                 # 打开(不存在就新建)
vim +50 file.txt                              # 直接跳到第 50 行
vim +/pattern file.txt                        # 直接跳到匹配 pattern 的位置
vim file1 file2 file3                          # 打开多个(用 :n / :prev 切换)

进入 vim 后:

命令作用
:w保存
:w newname另存为
:q退出
:wq 或 ZZ保存 + 退出
:q!不保存退出
:wq!强制保存 + 退出(只读文件用,前提是有权限)
:e file打开另一个文件
:e!放弃改动 reload 当前文件

Normal 模式:移动

键移动
h j k l左 下 上 右(方向键也能用)
w / b下一个/上一个单词开头
e下一个单词末尾
0行首
^第一个非空字符
$行尾
gg文件第一行
G文件最后一行
50G 或 :50跳到第 50 行
Ctrl-f / Ctrl-b翻页(Forward / Back)
Ctrl-d / Ctrl-u半页(Down / Up)
%配对的括号

最重要 5 个:hjkl 移动、0 行首、$ 行尾、gg 顶、G 底。


进入 Insert 模式(真正输入文字)

键作用
i光标前插入
a光标后插入
I行首插入
A行尾插入
o下一行新建并进入插入
O上一行新建并进入插入

按完进入插入模式、像普通编辑器一样输入。Esc 退回 Normal。


删除 / 复制 / 粘贴

命令作用
x删当前字符
dd删整行
5dd删 5 行
dw删一个单词
d$从光标删到行尾
D同 d$
d0从光标删到行首
yy复制(yank)整行
5yy复制 5 行
yw复制单词
p粘贴在光标后
P粘贴在光标前

记忆:

  • d = delete(剪切,自动放剪贴板)
  • y = yank(复制)
  • 加数字 + 动作 = 重复 N 次

撤销 / 重做

命令作用
u撤销
Ctrl-r重做
.重复上一个操作(vim 杀手锏)

. 是 vim 比 nano 强的根本——比如想给 100 行末尾加分号,先 A;<Esc> 一行做完、再 j. 一次重复一行。


查找 / 替换

查找

/pattern        前向找 pattern
?pattern        反向找
n               下一个匹配
N               上一个匹配
/error          找 "error"
n  n  n         继续找下一个

替换(改配置必备)

:s/old/new/         当前行第一个
:s/old/new/g         当前行全部
:%s/old/new/g        全文件全部                    ← 最常用
:%s/old/new/gc       全文件全部、每次确认
:1,10s/old/new/g     1-10 行全部

% 是"全文件"。g 是"一行内全部"。

例子:把配置里所有 PasswordAuthentication yes 改 no:

:%s/PasswordAuthentication yes/PasswordAuthentication no/g

但这种生产改配置首选 sed 而不是 vim 交互——可重复 / 可脚本化。


看大文件

vim huge.log                                # 一般 vim 能开几 GB(用 SwapFile 缓冲)

大日志推荐 less / tail,vim 会全文件 hash / 索引、慢。

less 模式

view huge.log                                # 等价 vim -R(只读模式)

或者直接 less huge.log(less 不是 vim、但很多键位类似)。


visual 模式(可视区块选择)

键作用
v字符级选择
V行级选择
Ctrl-v矩形块选择(列编辑用)

选完之后:

  • d 删
  • y 复制
  • > 缩进
  • < 反缩进
  • :s/.../.../ 在选中区跑替换

列编辑(K8s yaml 缩进调整必用):

Ctrl-v           # 进矩形选择
方向键选中要改的列
I  (大写)         # 在前面插入
输入要插的字符
Esc              # 应用到所有选中行

缩进

>>           # 当前行右缩进 1 个 shiftwidth
<<           # 左缩进
5>>           # 5 行右缩进
=G           # 从当前行到文件末尾、自动缩进(**改完 yaml 重排必用**)
gg=G          # 全文件自动重缩进

多文件 / 多窗口

vim file1 file2 file3
:n             下一个文件
:prev          上一个
:ls            列已打开

:sp file       水平分屏打开
:vsp file      垂直分屏

Ctrl-w hjkl    在窗口间切
Ctrl-w q        关当前窗口

一份运维实用 ~/.vimrc

" 基本
syntax on
set number                                              " 行号
set relativenumber                                       " 相对行号(移动方便)
set hlsearch                                             " 搜索高亮
set incsearch                                            " 边输入边找
set ignorecase                                           " 忽略大小写
set smartcase                                            " 含大写就大小写敏感

" 缩进
set tabstop=4
set shiftwidth=4
set expandtab                                            " tab 转空格
set autoindent
filetype plugin indent on

" yaml 专用:2 空格
autocmd FileType yaml setlocal tabstop=2 shiftwidth=2 expandtab
autocmd FileType yml  setlocal tabstop=2 shiftwidth=2 expandtab

" Makefile 例外:保留 TAB
autocmd FileType make setlocal noexpandtab

" 文件历史 / 撤销
set undofile
set undodir=~/.vim/undo

" 编码
set encoding=utf-8

" mouse
set mouse=a

" 让 Esc 在 K8s yaml 等编辑时不卡
set ttimeoutlen=10

" 显示行尾空格 / tab
set list listchars=tab:▸\ ,trail:·

放 ~/.vimrc。


实战例子

1. 紧急修 fstab(系统起不来)

物理 console 进 emergency mode:

mount -o remount,rw /
vim /etc/fstab
# 用 `dd` 删除出错的行,或者 / 前面加 # 注释
:wq
reboot

2. 改 yaml manifest

vim deployment.yaml

# 找镜像版本
/image:
# 跳到行
A                                                       # 行尾插入
# 改完 Esc
:wq

或者用 sed 更快 —— vim 适合"复杂改、要看上下文"。

3. 看 K8s 配置文件

vim /etc/kubernetes/admin.conf
:set nowrap                                              # 不自动换行
:set list                                                # 显示 tab / 空格

# 看完 :q 走人

4. 比较两个文件

vimdiff file1 file2
# 或
vim -d file1 file2

左右对比。do 把右边改动接受到左边、dp 反过来。


常见踩坑

坑 1:进不去就出不来

vim file
# 屏幕黑了,键盘没反应

90% 是在 Normal 模式但你不知道。Esc Esc Esc,然后 :q! 退出。

坑 2:误改了只读文件

:w
E45: 'readonly' option is set (add ! to override)
:w!                                                     # 强制写(需要文件系统权限)

如果是 / 只读 mount(emergency mode):先 mount -o remount,rw /。

坑 3:Caps Lock 当成 Esc 用让 vim 难用

按完 Esc 必须每次都到键盘左上 → 反人类。

修:把 Caps Lock 映射成 Ctrl(更通用)/ 或者用 jj / jk 当 Esc:

inoremap jk <Esc>                                        " 插入模式按 jk 等于 Esc

坑 4:粘贴时缩进炸了

# 复制一段已缩进的 yaml 进 vim
# vim 自动缩进 → 缩进变得乱七八糟
:set paste                                                " 进入 paste 模式
# 粘贴
:set nopaste                                              " 退出

或者在 .vimrc 里:

set pastetoggle=<F2>                                      " F2 切换 paste

新 vim 8+ 配合 bracketed paste 模式不需要这个。

坑 5:vimrc 改完 vim 起不来

vim
# 报错某个插件不存在
vim -u NONE file                                          " 跳过加载 vimrc
# 或
vim -u NONE -N file                                       " 跳过 vimrc 但启用 vim 模式

修 vimrc 之后再正常用。

坑 6:远端 vim 颜色不对

echo $TERM
# screen-256color / xterm
export TERM=xterm-256color
vim ...

或者 .tmux.conf 里设(详见 tmux.md)。

坑 7:swap 文件冲突

vim /etc/sshd_config
# E325: ATTENTION
# Found a swap file by the name "/etc/.sshd_config.swp"

上次 vim 异常退出留下 swap。R 恢复 / D 删除 / A 取消。通常 D 删。

坑 8:误把日志打开导致 vim 卡死

vim 10gb.log
# 卡几分钟

大日志用 less / tail,不要 vim:

less 10gb.log

vim 真要看:vim -R file(只读模式快些)。

坑 9:忘了 root 没 vimrc

sudo vim /etc/foo.conf
# 没颜色、缩进乱

sudo vim 用 root 的 vimrc(没 vimrc 时用默认)。要带自己的:

sudo -E vim ...                                           " 保留环境
# 或
sudo HOME=$HOME vim ...

或者把自己 .vimrc 复制到 /root/。

坑 10:在 vim 里运行 shell 命令

需要临时跑 shell 命令但不退 vim:

:!ls                                                      " 跑 ls
:!kubectl get pods                                        " 跑 kubectl
:r !date                                                   " 把 date 输出读进文件

! 是 vim 的 shell 执行。


替代:nano / micro

编辑器特点
vim强大、普及、学习陡
nano傻瓜、底部菜单提示 / 多数发行版默认有
micro现代 nano、和桌面快捷键一致
emacs另一派、运维场景少见

紧急救命想用 nano:

nano file.conf
# 底部菜单提示 Ctrl-O 保存、Ctrl-X 退出 / 直观

但 nano 在精简发行版可能没装、远端不一定能用。至少要会 vim 退出。


关联命令

  • sed —— 脚本化改文件首选
  • grep —— 找了再决定要不要 vim 看
  • view —— vim 只读模式
  • vimdiff / vim -d —— 文件对比
  • less —— 看不改
  • nano / micro —— 友好替代
在 GitHub 上编辑此页