最强文本编辑器 Vim 常用命令集锦

210 阅读7分钟

Vim 是从 Vi 编辑器发展出来的一款极其强大的文本编辑器,它保留了 Vi 编辑器的所有功能,并添加了许多新特性。Vim 具有代码补全、语法高亮、错误跳转、批量化处理等编辑功能,还支持异常丰富的插件扩展,且整个编辑全程可通过键盘完成,无需使用鼠标,以致其成为众多程序员一款高效的编程开发利器。

关于 Vim 获取与安装可以参考最强文本编辑器 Vim 获取与安装。Vim 的核心魅力在于完全通过键盘操作实现高效的文本处理,难就难在复杂的操作命令和脱离鼠标的痛苦,其实只要掌握了技巧并不多难。建议初学者从基础命令、模式切换等核心操作入手,再逐渐拓展并逐步进阶高级功能。

本文主要介绍关于 Vim 的一些常用命令。

Vim 模式

  • 命令模式(Command Mode)
  • 输入模式(Insert Mode)
  • 视图模式(Visual Mode)
  • 末行模式(Last-Line Mode)

模式转换

命令描述
i, I, a, A, o, O, s, SCommand Mode ---> Insert Mode
EscInsert Mode ---> Command Mode
v, VCommand Mode ---> Visual Mode
EscVisual Mode ---> Command Mode
:, /, ?Command Mode ---> Last-Line Mode

常用命令

注:带 :/? 的是在末行模式下使用的命令。

如有错误,烦请指正!

打开文件

命令描述
vim filename打开或新建文件,并将光标置于第一行的首部
vim -r filename恢复上次 vim 打开时崩溃的文件
vim -R filename以只读的方式打开文件,仍然可以使用 :wq! 写入
vim -M filename打开文件并关闭文件修改权限,无法写入或修改
vim -x filename以加密的方式打开文件
vim -b filename以二进制模式打开文件
vim + filename打开文件,并将光标置于最后一行的首部
vim +n filename打开文件,并将光标置于第 n 行的首部
vim +/str filename打幵文件,并将光标置于第一个 str 所在位置
vim -c cmd filename打开文件进行编辑前,先执行指定的 cmd 命令
vim file1 file2 file3 ...打开多个文件
vim -On file1 file2 ...打开多个文件并左右分屏
vim -on file1 file2 ...打开多个文件并上下分屏
vim -d file1 file2打开 file1 和 file2 文件并比对两个文件的差异

查看文件

命令描述
:ls列出当前打开的所有文件
:bn打开多个文件时,切换显示下一个文件
:bp打开多个文件时,切换显示上一个文件
:sp filename上下分割,并打开一个新的文件
:vsp filename左右分割,并打开一个新的文件
:prev切换至前一个文件
:next切换至下一个文件
:first切换至第一个文件
:last切换至最后一个文件
Ctrl + w, s按下 Ctrl + w,再按下 s,上下分屏打开当前文件
Ctrl + w, v按下 Ctrl + w,再按下 v,左右分屏打开当前文件
Ctrl + w, h文件左右分屏时,将光标定位到左边屏幕
Ctrl + w, l文件左右分屏时,将光标定位到右边屏幕
Ctrl + w, H文件左右分屏时,将当前分屏移动到左边
Ctrl + w, L文件左右分屏时,将当前分屏移动到右边
Ctrl + w, j文件上下分屏时,将光标定位到下边屏幕
Ctrl + w, k文件上下分屏时,将光标定位到上边屏幕
Ctrl + w, J文件上下分屏时,将当前分屏移动到下边
Ctrl + w, K文件上下分屏时,将当前分屏移动到上边
Ctrl + w, c文件分屏显示时,关闭当前分屏
Ctrl + w, o文件分屏显示时,关闭除当前分屏之外的其他分屏
Ctrl + w, q文件分屏显示时,关闭当前分屏,直到退出 VIM

操作文件

命令描述
:q不保存文件并退出
:q!不保存文件并强制退出
:qa不保存所有文件并全部退出
:qa!不保存所有文件并强制全部退出
:w写入并保存文件,修改文件时间戳
:wa保存所有文件
:wq保存文件并退出
:w!强制保存文件
:wq!强制保存文件并退出
:x保存文件并退出,不会修改文件时间戳
:w filename另存到 filename 文件
:saveas filename另存到 filename 文件
:e filename打开或新建一个文件
:e!放弃所有更改,恢复文件到上次保存

功能命令

命令描述
:set nu显示行号
:set nonu取消显示行号
:set ic忽略字符大小写
:set noic区分字符大小写
:syntax on语法高亮
:syntax off取消语法高亮
:changes查看文件变化

光标插入

命令描述
i光标插在当前字符左侧
I光标插在当前行的行首
a光标插在当前字符右侧
A光标插在当前行的行尾
o新增下一行,并将光标插在行首
O新增上一行,并将光标插在行首
s删除光标所在字符,并将光标插在此处
S删除光标所在整行,并将光标插在行首

光标移动

命令描述
h光标向左移动 1 个字符
j光标向下移动 1 个行
k光标向上移动 1 个行
l光标向右移动 1 个字符
nj光标向下移动 n 个行
nk光标向上移动 n 个行
H光标移动到屏幕最上方一行的第 1 个非空字符
M光标移动到屏幕中央一行的第 1 个非空字符
L光标移动到屏幕最下方一行的第 1 个非空字符
G光标移动到这个文件的最后一行
nG光标移动到这个文件的第 n 行
gg光标移动到这个文件的第一行,相当于 1G
n + [Enter]光标移动向下移动 n 行
n + [Space]光标移动向右移动 n 个字符
+光标移动到非空字符的下一行
-光标移动到非空字符的上一行
w光标移动到下个单词首部
b光标移动到上个单词首部
e光标移动到下个单词尾部
ge光标移动到上个单词尾部
0光标移动到本行行首
$光标移动到本行行尾
移动到行首非空字符位置
g_移动到行尾非空字符位置
fa移动到本行光标处开始向后第一个为 a 的字符处
nfa移动到本行光标处开始向后第 n 个为 a 的字符处
Fa移动到本行光标处开始向前第一个为 a 的字符处
nFa移动到本行光标处开始向前第 n 个为 a 的字符处
ta移动到本行光标处开始向后第一个为 a 的字符的前一个字符处
nta移动到本行光标处开始向后第 n 个为 a 的字符的前一个字符处
Ta移动到本行光标处开始向前第一个为 a 的字符的后一个字符处
nTa移动到本行光标处开始向前第 n 个为 a 的字符的后一个字符处

文件翻页

命令描述
Ctrl + f屏幕向下移动一页
Ctrl + b屏幕向上移动一页
Ctrl + d屏幕向下移动半页
Ctrl + u屏幕向上移动半页
zt移动屏幕将当前行移动到屏幕上方
zz移动屏幕将当前行移动到屏幕中间
zb移动屏幕将当前行移动到屏幕下方

大小写转换

命令描述
~将光标下的字母改变大小写
n~将光标位置开始的 n 个字母改变其大小写
g~~改变当前行字母的大小写
guu将当前行的字母全改成小写
gUU将当前行的字母全改成大写
guw将光标下的单词改成小写
gUw将光标下的单词改成大写
ngUU将从光标开始到下面 n 行字母改成大写

格式化代码

命令描述
==将光标所在行代码格式化缩进
n==将光标所在行到向下 n 行格式化缩进
gg=G将全文代码格式化缩进
:set ai设定自动缩进
:set noai取消自动缩进
:set expandtab将 Tab 转换为 Space
:set tabstop=4制表符宽度 tabstop=4 或 ts=4
:retab按照设定值重新缩进

查找替换

命令描述
:s/str/abc/将光标所在行的第一个 str 替换成 abc
:%s/str/abc/将全文中的第一个 str 替换成 abc
:s/str/abc/g将光标所在行的所有 str 替换成 abc
:%s/str/abc/g将全文中的所有 str 替换成 abc
:m,ns/str/abc/g将 m 行到 n 行中所有的 str 替换为 abc
/str向后查找 str,n 查找下一个,N 查找前一个
?str向前查找 str,n 查找前一个,N 查找下一个
:set hlsearch打开高亮搜索结果
:set nohlsearch关闭高亮搜索显示

复制命令

命令描述
yy复制光标所在行
nyy复制光标所在行,到向下 n 行所有内容
y1G复制光标所在行,到第一行的所有内容
yG复制光标所在行,到最后一行的所有内容
y0复制光标前一个字符,到该行行首所有内容
y^复制光标前一个字符,到该行第一个非空字符的所有内容
y$复制光标所在字符,到该行行尾的所有内容
yw复制光标所在字符,到该单词结束所有内容

粘贴命令

命令描述
p(小写)将复制的内容粘贴到光标所在字符之后
P(大写)将复制的内容粘贴到光标所在字符之前
np将复制的内容粘贴 n 次

删除命令

命令描述
dd删除光标所在行
ndd删除光标所在行,到向下 n 行所有内容
d1G删除光标所在行,到第一行的所有内容
dG删除光标所在行,到最后一行的所有内容
d0删除光标前一个字符,到该行行首所有内容
d^删除光标前一个字符,到该行第一个非空字符的所有内容
d$删除光标所在字符,到该行行尾的所有内容
dw删除光标所在字符,到该单词结束所有内容
dt删除当前光标到指定符号的所有内容
x向后删除一个字符
nx向后删除 n 个字符
X向前删除一个字符
ci{删除 {} 里面的所有内容
:m,nd删除第 m 行到 n 行的所有内容

修改命令

命令描述
cw修改光标所在处,到该单词结束所有字符
r替换光标所在处字符
R从光标所在处开始替换字符,按 Esc 结束

其他操作

命令描述
.重复上次操作
u撤销上次操作
nu撤销前 n 次操作
Ctrl + r恢复上次操作
J将光标所在行与下一行合成同一行
Ctrl + v可视化块
Shift + v可视化行

互动板块

  • 问:如何快速入门 Vim 编辑器?
  • 答:找规律,多敲多练,把键盘敲烂!

虽然初期学习较难适应,但是一旦掌握其命令逻辑和操作方法,就能显著提高编辑效率。随着肌肉记忆的形成,便可以体会到“双手不离键盘”的流畅编辑体验,这种高效、连贯且几乎无中断的编辑方式,正是 Vim 经久不衰的魅力所在。

更多内容