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
为new
s/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
保存每个文件的修改。