Vim是一款功能强大的文本编辑器,其命令操作丰富且高效,掌握这些命令能极大提升编辑效率,以下从基础操作、光标移动、文本编辑、查找替换、窗口操作等多方面详细介绍Vim命令。

基础操作
Vim有三种主要模式:普通模式(默认)、插入模式和命令行模式。
-
进入插入模式:
i:在光标前插入a:在光标后插入o:在当前行下方插入新行I:在行首插入A:在行尾插入O:在当前行上方插入新行
-
退出到普通模式:
Esc(在任何模式下按Esc返回普通模式) -
保存与退出:
(图片来源网络,侵删)w:保存文件q:退出Vimwq或x:保存并退出q!:不保存强制退出
光标移动
普通模式下,光标移动是高效编辑的关键:
-
基本移动:
h:左移一个字符j:下移一行k:上移一行l:右移一个字符w:移动到下一个单词开头e:移动到当前单词末尾b:移动到上一个单词开头0(数字零):移动到行首- 移动到行尾
-
行内跳转:
f{字符}:跳转到行内第一次出现的字符位置t{字符}:跳转到字符前一个位置- 重复上一次
f或t命令 - 反向重复上一次
f或t命令
-
页面移动:
(图片来源网络,侵删)Ctrl+f:向下翻页Ctrl+b:向上翻页Ctrl+d:向下半页翻页Ctrl+u:向上半页翻页G:跳转到文件末尾gg:跳转到文件开头
文本编辑
普通模式下的编辑命令:
-
删除操作:
x:删除光标所在字符dd:删除当前行dw:删除一个单词d$:删除到行尾d0:删除到行首ndd:删除n行(n为数字)
-
复制与粘贴:
y(yank):复制,需搭配移动命令,如yy复制当前行,yw复制一个单词p:在光标后粘贴P:在光标前粘贴nyy:复制n行
-
剪切与替换:
d命令可视为剪切,删除的内容可粘贴r{字符}:替换光标所在字符为指定字符R:进入替换模式,连续替换直到按Esc
-
撤销与重做:
u:撤销上一步操作Ctrl+r:重做被撤销的操作
查找与替换
-
查找文本:
/pattern:向下查找匹配pattern的文本,按n跳转到下一个匹配项,N反向跳转?pattern:向上查找,n和N方向相反
-
替换文本:
s/old/new:替换当前行中第一次出现的old为news/old/new/g:替换当前行中所有old为new%s/old/new/g:替换整个文件中所有old为new%s/old/new/gc:替换时每次确认(需输入y确认替换,n跳过)
窗口操作
Vim支持多窗口编辑,提升多文件操作效率:
-
分割窗口:
split或sp:水平分割窗口vsplit或vs:垂直分割窗口new:新建水平窗口并打开新文件vnew:新建垂直窗口并打开新文件
-
窗口切换与关闭:
Ctrl+w+w:在窗口间循环切换Ctrl+w+h/j/k/l:切换到左/下/上/右窗口q:关闭当前窗口only:关闭其他窗口,仅保留当前窗口
可视模式
可视模式用于选中文本进行批量操作:
-
进入可视模式:
v:字符可视模式,选中连续字符V:行可视模式,选中整行Ctrl+v:块可视模式,选中矩形区域
-
可视模式操作:
- 选中后可直接使用
d(删除)、y(复制)、c(修改)等命令 - 块可视模式下,
I或A可批量插入文本
- 选中后可直接使用
高级技巧
-
录制宏:
q{字符}开始录制(如qa),q结束录制,@{字符}执行宏(如@a)
-
折叠代码:
zf{motion}:创建折叠(如zf5j折叠5行)zo:展开折叠zc:折叠当前代码块
-
自动补全:
Ctrl+x Ctrl+l:补全整行Ctrl+n:基于当前文件内容补全
相关命令速查表
| 功能类别 | 命令 | 说明 |
|---|---|---|
| 模式切换 | i/a/o |
进入插入模式 |
Esc |
返回普通模式 | |
| 光标移动 | hjkl/w/b/e |
基本移动与单词跳转 |
gg/G |
跳转文件开头/末尾 | |
| 删除 | x/dd/dw |
删除字符/行/单词 |
| 复制粘贴 | yy/yw/p/P |
复制行/单词/粘贴 |
| 查找替换 | /pattern/%s/old/new/g |
查找/全局替换 |
| 窗口操作 | split/vsplit/Ctrl+w+w |
分割窗口/切换窗口 |
| 可视模式 | v/V/Ctrl+v |
字符/行/块选中文本 |
相关问答FAQs
Q1: 如何在Vim中同时编辑多个文件?
A1: 使用Vim的窗口分割功能,可通过split(水平分割)或vsplit(垂直分割)打开多个文件窗口,通过Ctrl+w+w在窗口间切换,或使用tabnew新建标签页编辑不同文件。
Q2: Vim中如何实现批量替换多个文件中的文本?
A2: 使用argdo命令结合substitute,步骤如下:
- 使用
args *.txt(假设替换所有.txt文件)指定文件列表; - 执行
argdo %s/old/new/g | update,其中| update保存每个文件的修改。
