插入文本
vim -R filename 把指定的文件以只读方式放入 Vim 编辑器中
i 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I 在光标所在行的行首插入随后输入的文本
o 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a 在当前光标所在位置之后插入随后输入的文本
A 在光标所在行的行尾插入随后输入的文本
查找文本
/abc 从光标所在位置向前查找字符串 abc
/^abc 查找以 abc 为行首的行 (^表示行首)
/abc$ 查找以 abc 为行尾的行 ($表示行尾)
?abc 从光标所在向后查找字符串 abc
n 向同一方向重复上次的查找指令
N 向相反方向重复上次的查找指定
:set ic 忽略大小写
:set noic 不忽略大小写
替换文本
r 替换光标所在位置的字符
R 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
:s/a1/a2/g 将当前光标所在行中的所有 a1 用 a2 替换,其中 g 表示一行中的所有,删除 g 则只替换一行中的第一个匹配
:n1,n2s/a1/a2/g 将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
:%s/a1/a2/g 将文件中所有的 a1 都用 a2 替换
删除文本
x 删除光标所在位置的字符
X 删除光标前一个位置字符
dd 删除光标所在行
ndd 删除当前行(包括此行)后 n 行文本
dG 删除光标所在行一直到文件末尾的所有内容
D 删除光标位置到行尾的内容
:a1,a2d 函数从 a1 行到 a2 行的文本内容

被删除的内容都放在了剪贴板中,按下 “p” 键粘贴。

复制文本
p 将剪贴板中的内容粘贴到光标后
P 将剪贴板中的内容粘贴到光标前
y 复制已选中的文本到剪贴板
nyy 将从光标所在行及其以下共 n 行复制到剪切板
yy 将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
yw 将光标位置的单词复制到剪贴板
: n,m y 将 n 到 m 行复制到剪切板
撤销操作
u 撤销上一次操作
ctrl + r 反撤销
U 第一次会撤销对光标所在行文本做过的全部操作,第二次使用该命令会恢复对该行文本做过的所有操作。
移动光标
h 左移
j 下移(j 像下箭头)
k 上移
l 右移
w 或 W 光标移动至下一个单词的单词首
b 或 B 光标移动至上一个单词的单词首
e 或 E 光标移动至下一个单词的单词尾
fx 光标移动至当前行中下一个 x 字符处
Fx 光标移动至当前行中上一个 x 字符处
gg 光标移动到文件开头
G 光标移动至文件末尾
:n 可以将光标快速定义到指定行的行首
0 光标移到行首非空白字符处
$ 光标移到行尾非空白字符处
可视化模式
v 字符可视化模式,此模式下目标文本的选择以字符为单位
V 行可视化模式,此模式化目标文本的选择以行为单位
Ctrl+shift+v 块可视化模式,该模式下可以选中文本中的一个矩形区域作为目标文本
多窗口模式
:sp filename 横向窗口
:vs filename 竖向窗口
ctrl+ww 切换窗口
:q 关闭该窗口
注释
:line1,line2 s/^/#/g 在line1到line2的行首添加"#"注释符
:line1,line2 s/^#//g 在line1到line2的行首去掉"#"注释符
:line1,line2 s/^////g 在line1到line2的行首添加"//"注释符(特殊字符须转义)

可见添加 // 注释符是异常麻烦的事,为此我们有以下两种快捷方式:
1、单行注释快捷键映射
在 home 目录下的 .vimrc 配置文件中定义快捷键:

1
2
3
4
5
nnoremap <C-m> I//<Esc> 
将 ctrl+m 映射为 I//<Esc> ,其中I进入INSERT模式并在行首插入文本,插入//后退出编辑模式

nnoremap <C-k> :s/^\/\///g<Esc>
去除行首的//注释符

2、多行注释函数
在 home 目录下的 .vimrc 配置文件中定义以下函数:

1
2
3
4
5
6
7
function COM(b1, b2)
execute a:b1.','.a:b2.'s/^/\/\//g'
endfunction

function DCOM(b1, b2)
execute a:b1.','.a:b2.'s/^\/\///g'
endfunction

其中 COM(b1,b2) 功能是为 b1 到 b2 行的行首添加 // 注释符,DCOM(b1,b2) 反之。以下几点供大家了解:

  • 调用函数的方式为::CALL COM(X1,X2)
  • 函数名可以自定义,但首字母必须大写
  • 函数内部使用参数时,参数名前必须有 a: ,这是在表明作用域
  • execute 函数用来执行命令(命令行模式)
  • . 是连接符

多插一句,编写此类脚本语言,多使用 chatGPT,甚是方便!

文件配置
:set nu
:set nonu
设置与取消行号
:syn on
:syn off
是否依据语法显示相关的颜色
set hlsearch
set nohlsearch
设置是否将査找的字符串高亮显示
set autoindent 设置自动缩进,即每行的缩进同上一节相同
set tabstop=4 设置 Tab 键宽度为 4 个空格, 强烈建议
set mouse=a
set selection=exclusive
set selectmode=mouse,key
Vim 编辑器里默认是不启用鼠标的,通过此设置即可启动鼠标。

用户配置文件位于主目录 ~/.vimrc

文件备份
: set backup 备份该文件到指定目录
set backupdir=指定目录 在 .vimrc 中设置备份文件的保存目录
: w filename 将当前文件保存到 filename 文件
执行外部命令
!!命令(normal模式下) 执行命令并将输出结果写入到光标位置
文件跳转
gf 当光标位于头文件名时,跳转到对应头文件
ctrl+o 返回上一个页面
ctrl+i 返回下一个页面
ctrl+t 返回到之前的标签
ctrl+] 跳到定义处(须 ctags 支持)
其他
J 合并本行和下一行文本
ctrl+z 和 fg 使用 ctrl+z 挂起当前窗口,fg 命令快速返回此窗口
ctrl+n 代码自动补全,包括检测头文件