Vim 生存指南:服务器上改文件不用抓瞎

Vim 的完整功能够写一本书,但在服务器上改个 Nginx 配置,你只需要会二十条命令。这篇只讲这部分。

一、先记住:怎么退出

这是新手最常卡住的地方,放在最前面:

命令作用
:q退出(没改动时)
:q!强制退出,丢弃所有改动
:wq:xZZ保存并退出
:w只保存不退出
:w!强制保存(只读文件时配 sudo)

改乱了想重来:按 Esc 然后 :q!,一切回到打开前的状态。

二、两种模式

Vim 的核心就是模式切换,理解这一点就理解了一半:

模式进入方式能做什么
普通模式启动默认,或按 Esc移动光标、删除、复制、执行命令
插入模式i / a / o输入文字
命令模式普通模式下按 :保存、退出、搜索、替换
可视模式v选中文本

卡住时先按 Esc,回到普通模式再说。这个习惯能解决 80% 的困惑。

三、进入编辑

作用
i在光标前插入
a在光标后插入
I跳到行首插入
A跳到行尾插入
o在下方新开一行
O在上方新开一行

改配置文件最常用 i(就地改)和 A(行尾加内容)。

四、移动光标

作用
h j k l左 下 上 右
0 / ^行首 / 行首第一个非空字符
$行尾
gg文件开头
G文件末尾
:N跳到第 N 行(如 :50
Ctrl+f / Ctrl+b向下/向上翻页
w / b下一个/上一个单词

记住 gg(开头)、G(结尾)、:N(跳行)就够日常用了。

五、删除、复制、粘贴

命令作用
x删除当前字符
dd删除当前行
Ndd删除 N 行(如 5dd
dw删除一个单词
d$D删到行尾
yy复制当前行
Nyy复制 N 行
p粘贴到下一行
P粘贴到上一行
u撤销(救命键)
Ctrl+r重做

组合规律:操作 + 范围d 是删,y 是复制,后面跟范围(d 一行、w 单词、$ 行尾)。

六、搜索与替换

bash
# 搜索(普通模式)
/关键词      回车,向下搜索
?关键词      向上搜索
n            下一个匹配
N            上一个匹配

# 替换(命令模式)
:%s/old/new/g        全文替换
:%s/old/new/gc       全文替换,每次询问
:s/old/new/g        只替换当前行
:10,20s/old/new/g   替换 10~20 行

改配置时批量换域名特别好用:

bash
:%s/old-domain.com/new-domain.com/g

搜索时 . 是正则通配符,要匹配字面量的点得写 .

七、改只读文件忘了 sudo

经典场景:vim /etc/nginx/nginx.conf 改了半天,:wq 提示只读。

bash
# 不用退出重来,在 vim 里直接:
:w !sudo tee % > /dev/null
# 然后 :q! 退出(会提示文件已变,选 OK)

原理:% 代表当前文件名,把内容通过管道交给带 sudo 的 tee 写回。

八、一份够用的配置

~/.vimrc

nginx
set number          " 显示行号"
set relativenumber  " 相对行号(配合 Ndd / Nyy 很好用)"
syntax on           " 语法高亮"
set tabstop=4       " Tab 宽度"
set shiftwidth=4    " 自动缩进宽度"
set expandtab       " Tab 转空格"
set autoindent      " 自动缩进"
set hlsearch        " 高亮搜索结果"
set incsearch       " 输入时即时搜索"
set ignorecase      " 搜索忽略大小写"
set smartcase       " 但输入大写时区分大小写"
set cursorline      " 高亮当前行"
set mouse=a         " 启用鼠标(可选)"

最实用的是 set number —— 报错信息说「第 43 行有问题」,你直接 :43 就能跳过去。

九、服务器场景的几个技巧

直接跳到某行打开文件

bash
vim +43 /etc/nginx/nginx.conf
vim +/listen /etc/nginx/nginx.conf    # 跳到第一个匹配 listen 的位置

只读模式打开(怕误改时)

bash
vim -R /etc/important.conf
# 或
view /etc/important.conf

崩溃后恢复

vim 异常退出会留 .swp 文件。重新打开时它问你要不要恢复:

bash
# 选 R 恢复,或选 D 删除交换文件
# 想直接跳过提示:
vim -n file.conf

# 清理所有残留的 swp
find . -name ".*.swp" -delete

查看不可见字符(排查配置问题)

bash
:set list
# 会显示 Tab(^I)和行尾($)
# 混了 Tab 和空格的 YAML 特别需要看这个

十、什么时候该用 nano

说句实话:如果你只是改一行配置,nano 更合适

bash
nano /etc/nginx/nginx.conf
# 底部直接写着快捷键:^O 保存,^X 退出

nano 没有模式概念,打开就能打字,所见即所得。没有学习成本。

我自己的分工:

  • 改一两行nano
  • 要跳行、批量替换、看大文件vim

不用为了「显得专业」硬用 vim。工具的目的是把事办了。


记住 Esc 保底、:q! 逃跑、:wq 保存、i 进入编辑、u 撤销 —— 这五条就够在服务器上活下来了。