1922 字
10 分钟
Linux:Vim 使用教程

Vim 是基于 Vi 发展而来的文本编辑器,用于在终端中查看和修改配置、脚本及文本。编辑时改变的是内存中的缓冲区,保存后才写入磁盘。系统中的 vi 不一定是完整功能的 Vim,本文以常规 Vim 为例。

模式与基本流程#

模式进入方式用途
普通模式 Normal默认启动状态,其他模式按 Esc 返回移动、复制、删除
插入模式 Inserti、a、o 等输入文字
可视模式 Visualv、V、Ctrl+V选择字符、整行或矩形区域
命令行模式:、/、?执行命令或搜索,回车确认

打开、修改与保存#

在可写的练习目录运行 vim app.conf。文件不存在时会建立新缓冲区,保存才创建文件。

  1. 按 i,输入 port=8080。
  2. 按 Esc,输入 :w 并回车,检查底部是否提示写入成功。
  3. 输入 :q 退出,再用 cat app.conf 核对落盘内容。
命令含义
:w保存当前缓冲区
:q关闭当前窗口,未保存修改可能阻止退出
:wq保存并关闭窗口
:x 或普通模式 ZZ有修改时保存,然后关闭窗口
:q!强制关闭窗口;单窗口常见场景中会放弃未保存修改
:w copy.conf写入另一个文件,默认不切换当前文件名
强制操作的边界

:w! 不能绕过系统权限;:q! 可能丢失修改。保存配置后仍需执行所属程序的配置检查,不能将编辑器写入成功视为服务已生效。

移动与输入#

定位文本#

按键作用
h j k l左、下、上、右
0 / ^ / $行首 / 第一个非空白字符 / 行尾
w / b / e下一个词首 / 向后词首 / 词尾
gg / G第一行 / 最后一行
42G 或 :42第 42 行
Ctrl+f / Ctrl+b向下 / 向上翻页
%在匹配的括号等结构间跳转

小写 w 按 Vim 的 word 规则移动,标点可能形成边界;大写 W 主要按空白分隔的 WORD 移动。

插入位置#

按键位置
i / a光标前 / 后
I / A当前行第一个非空白字符前 / 行末
o / O在当前行下方 / 上方新建一行

I 不一定到物理行首;配置文件有缩进时,要区分 I 与 0i。

复制、删除与修改#

操作符与范围#

常用组合为“次数 + 操作符 + 移动或文本对象”。d 删除,y 复制,c 删除后进入插入模式。

操作结果
yy / 3yy复制当前行 / 从当前行起复制三行
dd / 3dd删除当前行 / 从当前行起删除三行
dw删除光标到下一个词边界的范围
ciw修改当前词内部
ci” / ci(修改引号 / 括号内文本
d$删除到行尾
p / P放在光标后 / 前;整行内容则放在当前行下 / 上

cw 在非空白字符上通常按 ce 的方式修改到词尾,不宜简单理解为 dw 后进入插入模式。替换完整单词可使用 ciw。

复制和删除的内容通常进入寄存器,后续删除可能覆盖先前复制的内容。需要保留时用 "ayy 复制到寄存器 a,再用 "ap 粘贴。3p 是重复粘贴三次,实际行数由寄存器内容决定。

可视选择与剪贴板#

v 选择字符,V 选择整行,Ctrl+V 选择矩形列。移动光标扩大选区,再用 y、d、c 操作。范围不明确时先用可视模式确认。

系统剪贴板与 Vim 寄存器不同。支持剪贴板的 Vim 可用 "+y、"+p;可用性取决于编译功能和图形环境,SSH 远程 Vim 不会自动获得本地剪贴板访问能力。

撤销与重复#

普通模式下 u 撤销,Ctrl+R 重做,句点 . 重复上一次可重复的修改。批量操作后先查看结果,发现错误先撤销,再调整范围。句点并不是重复最近任意按键。

搜索与替换#

搜索#

输入 /error 后回车向前搜索,?error 向后搜索。n 沿最近搜索方向继续,N 沿相反方向继续,并不固定表示向下和向上。

搜索采用 Vim 正则表达式。查找字面文本可用 /\Vexample.com 降低特殊字符解释程度,但仍须注意反斜杠。

搜索显示设置
:set number
:set hlsearch
:set incsearch
:nohlsearch

前三项分别显示行号、高亮匹配和输入时预览搜索;最后一项暂时清除高亮,不删除搜索模式。

替换范围#

全文替换并逐项确认
:%s/old_name/new_name/gc

百分号代表全文,s 表示替换,g 表示每行全部匹配,c 表示逐个确认。省略 g 时默认每行只替换首个匹配。替换端的 & 表示整个匹配,不能总当作普通字符。

示例范围
:s/old/new/gc当前行
:10,20s/old/new/gc第 10 到 20 行
:%s/old/new/gc全文
:'<,'>s/old/new/gc可视选区涉及的行,不自动限于所选字符列

替换后搜索旧值和新值,并核对上下文再保存。相同配置项可能出现在注释和多个服务块中,匹配数量不能单独证明修改正确。

多文件与常用设置#

缓冲区、窗口和标签页#

缓冲区保存内容,窗口展示缓冲区,标签页组织一组窗口;三者不是同一对象。

命令用途
:e app.conf打开文件
:ls / :b 2列出缓冲区 / 切换到编号 2
:split other.conf上下分割窗口
:vsplit other.conf左右分割窗口
Ctrl+w w切换窗口

比较文件可用 vim -d app.conf app.conf.bak。不要为了切换文件而使用 :e!,它会丢弃当前缓冲区的修改。

最小配置#

先在当前会话尝试设置,确认合适后再写入 ~/.vimrc。

~/.vimrc
syntax on
set number
set incsearch
set hlsearch
set expandtab
set shiftwidth=4
set softtabstop=4

缩进应服从文件格式。例如 Makefile 的命令行通常需要真实制表符,不能盲目转换为空格。用 :verbose set shiftwidth? 可以查看设置及来源。

配置修改与异常处理#

操作闭环#

  1. 确认文件路径和权限,保留原件。
  2. 使用 Vim 编辑;需要提权时,可在已配置 sudo 权限的环境使用 sudoedit /path/to/app.conf。
  3. 保存并比较修改前后的差异,检查是否误改注释或其他配置块。
  4. 使用应用的配置检查命令,通过后按应用要求重载。
  5. 检查服务状态和实际行为,异常时按保留的原件恢复。

Vim 不能判断端口冲突、配置依赖和重载结果,这些检查需要由应用完成。

常见问题#

现象检查与处理
输入文字变成命令当前是普通模式,按 i 进入插入模式
无法写入检查路径、文件及目录权限、只读挂载和空间;必要时先另存
提示交换文件已存在先确认有无另一编辑会话,不直接删除交换文件
异常退出需恢复用 vim -r app.conf 恢复,另存后与磁盘文件比较
粘贴缩进错乱检查终端括号粘贴支持;旧环境可临时 set paste,完成后 set nopaste
出现 ^M 或乱码查看 fileformat、fileencoding,确认源格式后再转换

恢复并核对之前,不覆盖原文件,不清除唯一的恢复材料。交换文件不保证包含所有未保存内容。

参考资料#

Linux:Vim 使用教程
https://tamakara.top/posts/学习笔记/linuxvim-使用教程/
作者
魂辛カラ
发布于
2026-09-13
许可协议
CC BY-NC-SA 4.0