Skip to content

Vim编辑器

在服务器上临时修改配置文件时,Vim 是最常用的编辑器。它和普通文本编辑器的最大区别是分模式操作——不是打开就能直接输入文字。

一、模式

Vim 有三个常用模式。不同模式下按键的含义完全不同。

模式进入方式用途
普通模式Esc移动光标、复制粘贴、删除、执行命令
插入模式iao输入和修改文本
命令模式在普通模式下按 :保存、退出、搜索替换、设置

打开文件后默认处于普通模式。如果不知道当前是什么模式,按一下 Esc 回到普通模式——这是一个安全的基准状态。

bash
vim /etc/hosts

最基本的退出操作:

vim
:w          " 写入(保存)
:q          " 退出
:wq         " 保存并退出
:q!         " 强制退出,不保存修改

记一条准则:不论误触了什么键导致界面变化,按 Esc 回到普通模式,输入 :q! 就能安全退出。这条对刚接触 Vim 时最有实际价值。

二、光标移动

普通模式下移动光标:

移动方向
h j k l左 下 上 右
gg文件开头
G文件末尾
0当前行行首
$当前行行尾
w下一个单词开头
b上一个单词开头

h j k l 四键成排,熟练后手不需要离开主键区。但现代终端里方向键一般也能用。

跳到指定行号:

vim
:120          " 跳到第 120 行

排错时错误信息通常会提示行号,用 :行号 直接跳过去比翻页快。

三、编辑操作

从普通模式进入插入模式:

效果
i在光标前插入
a在光标后插入
o在下一行新建一行
O在上一行新建一行

普通模式下的删除和复制:

命令效果
x删除光标处字符
dd删除整行
yy复制整行
p在光标后粘贴
u撤销上一步操作
Ctrl+r重做

数字前缀可以批量执行:

vim
5dd         " 删除 5 行
3yy         " 复制 3 行
10x         " 删除 10 个字符

四、搜索和替换

普通模式下按 / 进入搜索:

vim
/listen          " 搜索 "listen"

n 跳到下一个匹配项,N 跳到上一个。

替换操作用 :s 命令:

vim
:s/old/new/           " 替换当前行第一个匹配
:s/old/new/g          " 替换当前行所有匹配
:%s/old/new/g         " 替换文件中所有匹配
:%s/old/new/gc        " 替换前逐个确认(c = confirm)

改线上的配置文件时,替换 IP、域名、路径这类内容,带 c 确认更安全。一个不小心全文替换错了,比手工一行行改的代价大得多。

五、可视模式

可视模式用来选中文本块,再进行批量操作。

模式
v按字符选择
V按行选择
Ctrl+v按列块选择

块选择常用于批量注释多行:

vim
Ctrl+v          " 进入块选择模式
选择多行(用 j/k 移动)
I               " 在选中块的行首插入
#               " 输入注释符
Esc             " 应用到所有选中行

这个操作适用于临时注释掉一段配置。正式变更还是要保留备份文件,撤销记录不适合当回滚方案。

六、多文件与分屏

同时打开多个文件:

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
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 和空格会导致语法错误或配置解析异常。