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

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, S Command Mode ---> Insert Mode
Esc Insert Mode ---> Command Mode
v, V Command Mode ---> Visual Mode
Esc Visual 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 经久不衰的魅力所在。

更多内容

相关推荐
大神的风范9 小时前
嵌入式linux相机(2)
linux·数码相机
Xの哲學9 小时前
Linux 定时器:工作原理与实现机制深入分析
linux·服务器·算法·架构·边缘计算
工藤新一¹10 小时前
进程状态 —— Linux内核(Kernel)
linux·运维·服务器·c/c++·进程状态·linux内核(kernel)
❀͜͡傀儡师10 小时前
对于Linux下的海量文件传输,rsync 是远比 scp 更优。
linux·运维·网络·rsync
Ronin30510 小时前
【Linux系统】线程互斥
linux·服务器·vscode·互斥量·线程互斥
人工智能训练师10 小时前
部署在windows的docker中的dify知识库存储位置
linux·运维·人工智能·windows·docker·容器
新手村-小钻风13 小时前
【CUDA入门·Lesson 1】Ubuntu实战:CUDA 概念、nvidia-smi 工具与 GPU 参数详解
linux·数据库·ubuntu
czhc114007566321 小时前
Linux 830 shell:expect,ss -ant ,while IFS=read -r line,
linux·运维·r语言