Appearance
Vim 编辑器
服务器上改配置没有图形界面,SSH 终端里能用的编辑器只有命令行的。Vim 是几乎所有 Linux 发行版的默认编辑器,但它的操作逻辑跟桌面文本编辑器完全不一样——不是打开就能打字,而是分模式操作。第一次用 Vim 的人最常遇到的就是"我进来了,但不知道怎么打字,更不知道怎么退出",卡在终端里只能强关窗口。
一、模式
Vim 有三个常用模式,不同模式下同一个按键的含义完全不同。这是 Vim 跟普通编辑器最大的区别,也是新人最容易懵的地方。
| 模式 | 怎么进入 | 干什么用 |
|---|---|---|
| 普通模式 | 按 Esc | 移动光标、复制粘贴、删除、执行命令 |
| 插入模式 | i、a、o 等 | 输入和修改文本 |
| 命令模式 | 普通模式下按 : | 保存、退出、搜索替换、设置 |
打开文件之后默认是普通模式,不能直接打字。如果不知道当前在什么模式,按一下 Esc 回到普通模式——这是个安全基准,从普通模式出发什么操作都能做。
bash
vim /etc/hosts最最基础的退出操作,务必记住:
vim
:w " 写入(保存)
:q " 退出
:wq " 保存并退出
:q! " 强制退出,不保存修改给新人的一条救命准则:不管你刚才误触了什么键导致界面变成什么样,先按 Esc 回到普通模式,再输入 :q! 就能安全退出(不保存任何改动)。这条比什么都实用,刚接触 Vim 的时候靠它避免了好多次"卡死在 Vim 里只能重开终端"的尴尬。
二、光标移动
普通模式下的光标移动:
| 键 | 移动方向 |
|---|---|
h j k l | 左 下 上 右 |
gg | 跳到文件开头 |
G | 跳到文件末尾 |
0 | 当前行行首 |
$ | 当前行行尾 |
w | 下一个单词开头 |
b | 上一个单词开头 |
h j k l 这四个键排成一排,熟练之后手不用离开主键区,效率比方向键高。不过现代终端里方向键一般也能用,刚开始记不住 hjkl 用方向键也没问题,慢慢就习惯了。记忆口诀可以这样记:j 像个向下的钩子(往下),k 在 j 上面(往上)。
跳到指定行号:
vim
:120 " 跳到第 120 行排查报错的时候这个特别有用——错误信息通常会告诉你在第几行(nginx: [emerg] ... in /etc/nginx/nginx.conf:42),直接 :42 跳过去,比一页页翻快多了。
三、编辑操作
从普通模式进入插入模式(开始打字)的几种方式:
| 键 | 效果 |
|---|---|
i | 在光标前插入 |
a | 在光标后插入 |
o | 在下面新建一行并进入插入模式 |
O | 在上面新建一行并进入插入模式 |
o 这个键很常用——想在当前行下面加一行新内容,按 o 直接开新行进入插入模式,不用先移到行尾再回车。
普通模式下的删除和复制(这些操作不需要进入插入模式):
| 命令 | 效果 |
|---|---|
x | 删除光标处字符 |
dd | 删除整行(并放到剪贴板) |
yy | 复制整行 |
p | 在光标后粘贴 |
u | 撤销上一步 |
Ctrl+r | 重做(取消撤销) |
数字前缀可以批量执行,比如:
vim
5dd " 删除 5 行
3yy " 复制 3 行
10x " 删除 10 个字符这个"数字+命令"的组合是 Vim 效率的核心之一,熟练之后比反复按同一个键快得多。
四、搜索和替换
普通模式下按 / 进入搜索:
vim
/listen " 搜索 "listen"按 n 跳到下一个匹配,N 跳到上一个。查配置里的某个指令(比如 listen、server_name、proxy_pass)用搜索最快。
替换操作用 :s 命令,记住几个常用形态:
vim
:s/old/new/ " 替换当前行第一个匹配
:s/old/new/g " 替换当前行所有匹配
:%s/old/new/g " 替换整个文件所有匹配
:%s/old/new/gc " 替换前逐个确认(c = confirm)改线上配置文件的时候,替换 IP、域名、路径这类内容,建议带 c(确认)。全文替换一旦替换错了,影响面比手工一行行改大得多——比如你想把旧 IP 10.0.0.1 换成新 IP,结果配置里还有个 10.0.0.10 也被误匹配了,服务直接连错地方。带 c 一个个确认,慢一点但安全。
五、可视模式
可视模式用来选中文本块,选中之后再做批量操作(删除、复制、替换、注释)。
| 键 | 进入哪种模式 |
|---|---|
v | 按字符选择 |
V | 按行选择 |
Ctrl+v | 按列块选择(块可视模式) |
块选择在批量注释多行时特别好用,比如临时注释掉一段配置:
vim
Ctrl+v " 进入块选择模式
选择多行(用 j/k 移动光标)
I " 按 Shift+i,在选中块的行首插入
# " 输入注释符
Esc " 按两次 Esc,应用到所有选中行这套操作适合临时注释掉一段配置做测试。不过正式的配置变更还是要保留备份文件——u 撤销不是可靠的回滚方案,万一 Vim 进程异常退出或者你不小心保存了,撤销记录就没了。
六、多文件和分屏
同时打开多个文件:
bash
vim nginx.conf default.conf文件之间切换:
vim
:n " 下一个文件
:prev " 上一个文件
:ls " 列出所有打开的 buffer
:b 2 " 切换到编号为 2 的 buffer分屏显示,对照两个文件改配置的时候很有用:
vim
:sp file " 上下分屏(horizontal split)
:vsp file " 左右分屏(vertical split)分屏之间移动光标:Ctrl+w 之后再按方向键(h j k l),或者用 Ctrl+w w 在窗口之间循环切换。
七、基础配置
Vim 的个人配置放在 ~/.vimrc 里。服务器上的 Vim 配置建议保持简单,接近默认就行——配置太花哨,换一台新机器没有你的 .vimrc 就不会用了,反而别扭。运维场景下能舒服地改配置就够了,不需要装各种插件。
几条实用的基础配置:
vim
set number " 显示行号
set tabstop=4 " Tab 显示为 4 个空格宽度
set shiftwidth=4 " 自动缩进宽度
set expandtab " 输入 Tab 时自动转成空格
set ignorecase " 搜索忽略大小写
set smartcase " 搜索内容有大写时自动区分大小写
set hlsearch " 高亮搜索结果
syntax on " 语法高亮expandtab 这条要特别注意——Python 和 YAML 配置文件对缩进极敏感,Tab 和空格混用直接报语法错误。改 Kubernetes YAML 或者 Ansible 配置的时候,如果不小心混进了 Tab,排查半天才发现是缩进问题,非常浪费时间。expandtab 强制 Tab 转空格,能从根上避免这个坑。