1. 普通模式(normal)
1.1 快速移动
gi 跳转到最后一次编辑的地方并进入插入模式
1.1.1 单词间快速移动
3w | 移到后面第三个word开头 | W | 移到下个WORD开头 |
2e | 移到后面第二个word结尾 | E | 移到下个WORD结尾 |
b | 移到上个word开头 | B | 移到上个WORD开头 |
ge | 移动到上一个word的词末 | gE | 移动到上一个WORD的词末 |
word指以非空白符分割的单词,WORD指以空白符分割的单词
1.1.2 行间搜索移动
3fa | 向后搜索并移动到第三个a字符上 | Fa | 向前搜索并移到a字符上 |
ta | 向后移到a的前一个字符上 | Ta | 向前移到a的后一个字符上 |
; | 继续搜该行的下一个 | , | 继续搜该行的上一个 |
1.1.3 水平移动
数字0 | 移到行首第一个字符 | ^ | 移到行首第一个非空白字符 |
$ | 移到行尾 | g_ | 移到行尾非空白字符 |
1.1.4 垂直移动
4( | 移到前面第四个句子的开头 | ) | 移到下一个句子的开头 |
{ | 移到当前一段的开头 | } | 移到下一段的开头 |
[[ | 移到当前这一节的开头 | ]] | 移到下一节的开头 |
% | 在一对() {} [] 之间移动 | n+回车 | 移到n行后的行首 |
1.1.5 页面移动
gg/G | 移动到文件开头/结尾 | H/M/L | 跳到屏幕开头/中间/结尾 |
ctrl+u/f | 上下翻页 | ctrl+o | 快速返回 |
zt/zz/zb | 把光标所在行放到屏幕顶部/中间/底部 | 30% | 移到文件内容30%处 |
1.2 删除
2x | 删除光标处开始后面的两个字符 | 3X | 删除光标前的3个字符 |
daw | 删除光标所在单词(不保留空格) | diw | 删除光标所在单词(保留空格) |
d0 | 删除光标到行首 | d$ | 删除光标到行尾 |
J | 删除光标所在行的换行符,与下一行合并 | dt) | 删除当前位置到)前的内容 |
1.3 修改
r | 替换单个字符 | R | 持续替换 |
ra | 将光标所在字符替换成a | ~ | 改变光标所在字符的大小写 |
cw | 删除单词光标之后的部分并进入插入模式 | cb | 删除单词光标之前的部分并进入插入模式 |
cc/S | 删除一整行(保留换行符)并进入插入模式 | xp | 交换光标所在字符和下一个字符的位置 |
s | 删除当前字符并进入插入模式 | u | 撤回上一步操作 |
1.4 查询
/或者? | 向后/前搜索 | n/N | 跳到下/上一个匹配 |
*/# | 快速向前/后搜索光标所在单词并高亮显示 | | |
1.5 复制粘贴
复制==>y(yank),粘贴==>p(put)
y2w | 复制两个单词 | 2yy | 复制光标所在行及其下一行 |
y$ | 复制光标处到行尾的内容 | y0 | 复制光标到行首的内容 |
2. 编辑模式(insert)
ctrl+h 删除上一个字符
ctrl+w 删除上一个单词
ctrl+u 删除当前行
3. 命令模式(command)
替换 :[range]s[ubstitute]/{pattern}/{string}/[flags]
range为替换范围 10,20 表示10-20行,%表示全部
pattern要替换的模式,支持正则 \<word\>可精准匹配word string是替换后文本
flags为替换标志位 g(global)全局范围,c(confirm)替换前确认,n(number)仅统计匹配次数
:r! echo % 插入正在编辑的文件名
:r! echo %:p 插入正在编辑的文件名的绝对路径
:s/old/new | 将当前行的第一个old替换为new | :s/old/new/g | 将当前行的所有old替换为new |
:90s/old/new/g | 将指定行的所有old替换为new | :90,93s/old/new/g | 将指定范围内所有old替换为new |
:%s/old/new/gc | 依次替换每个字符串关键字 | :%s/^struct/int/g | 将所有以struct开头的字符串替换为int |
:set hls | 设置高亮显示 | | |
4. 可视模式(visual)
v 连续字符选择
V 连续行选择
ctrl+v 块状选择
5. 模式切换
5.1 normal ==> insert
i | 插入到光标所在字符前 | I | 插入到行首第一个非空白字符前 |
a | 插入到光标所在字符后 | A | 插入到行尾左后一个字符后 |
o | 光标所在行的下一行新增空白行 | O | 光标所在行的上一行新增空白行 |
s | 删除光标所在处的字符并开始编辑 | S | 删除光标所在行并开始编辑 |
5.2 insert ==> normal
① Esc ② ctrl+c ③ ctrl+[
6 寄存器
无名寄存器-"" 缺省使用 使用d删除或者y复制的内容默认放到"无名寄存器"
深入寄存器(register)-"{register} 指定寄存器而不使用无名寄存器 可以指定a-z为寄存器名
"ayiw复制一个单词到寄存器a中 "bdd删除当前行到寄存器b中 :reg a 可以查看寄存器a的内容
复制专用寄存器-"0 文本同时被复制到无名寄存器""和复制寄存器0
系统剪贴板-"+ 将内容复制到系统剪贴板,可以在除了vim外的其它地方粘贴 :echo has('clipboard')返回1表示支持此功能 :set clipboard=unnamed可以直接复制粘贴系统剪贴板的内容
其他寄存器 当前文件名-"% 上次插入的文本-".
7 vim补全
ctrl+n/p补全单词 候选列表出现时ctrl+n继续选择下一个 ctrl+p继续选择上一个
ctrl+x/f补全文件名
crtl+x/o补全代码(需要开启文件类型检查,安装插件)
8 vim换配色
:colorscheme crtl+d 显示配色 也可以网上搜索vim colorscheme选择其它的配色方案