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选择其它的配色方案?
|