插入模式
左下角会显示 – 插入 –
| 按键 | 功能 | 
|---|
| i | 光标前插入 | 
| I(大写i) | 本行开始处插入 | 
| a | 光标后插入 | 
| A | 本行末插入 | 
| o | 光标下插入新行 | 
| O | 光标上插入新行 | 
| [esc] | 退出插入模式,进入正常模式 | 
正常模式
移动
字符
| 按键 | 功能 | 
|---|
| j 或 ↓ | 向下移动 | 
| k 或 ↑ | 向上移动 | 
| h 或 ← | 向左移动 | 
| l(小写L) 或 → | 向右移动 | 
行
| 按键 | 功能 | 
|---|
| 0、^ 或 [home] | 光标移至行首 | 
| $ 或 [end] | 光标移至行末 | 
屏幕
| 按键 | 功能 | 
|---|
| H | 光标移至屏幕上端行首 | 
| M | 光标移至屏幕中间行首 | 
| L | 光标移至屏幕下端行首 | 
| zt | 光标所在位置移到屏幕上方 | 
| zz | 光标所在位置移到屏幕中间 | 
| zb | 光标所在位置移到屏幕下方 | 
| CTRL + f | 向下翻页 | 
| CTRL + b | 向上翻页 | 
| CTRL + d | 向下翻半页 | 
| CTRL + u | 向上翻半页 | 
文件
| 按键 | 功能 | 
|---|
| gg | 光标跳到第1行 | 
| G | 光标移至文件末行首 | 
| 15G | 光标移至15行行首 | 
| :4 | 光标移至第4行行首 | 
| [enter] | 光标移至下行行首 | 
编辑
复制
| 按键 | 功能 | 
|---|
| yy | 复制本行 | 
| nyy | 复制当前行一下n行 | 
| y$ | 复制光标处到行末 | 
删除
| 按键 | 功能 | 
|---|
| x | 删除光标所在处字符 | 
| nx | 删除光标后n个字符 | 
剪切(删除)
| 按键 | 功能 | 
|---|
| x | 剪切光标所在处字符 | 
| nx | 剪切光标后n个字符 | 
| dd | 剪切本行 | 
| ndd | 剪切本行以下n行 | 
| d$ 或 D | 剪切光标处到行末 | 
| :n1,n2d | 剪切n1至n2行 | 
粘贴
| 按键 | 功能 | 
|---|
| p(小写) | 粘贴在光标所在行下 | 
| P(大写) | 粘贴在光标所在行上 | 
搜索
| 按键 | 功能 | 
|---|
| /string | 向下搜索指定字符串(string) | 
| ?string | 向上搜索指定字符串 | 
| : set noic | 不忽略大小写 | 
| : set ic | 搜索时忽略大小写 | 
| n | 跳到搜索字符串的下一个结果 | 
| N | 跳到搜索字符串的上一个结果 | 
| * | 向下查找光标所在单词 | 
| # | 向下查找光标所在单词 | 
| :set nohlsearch | 取消搜索高亮显示 | 
| :set hlsearch | 设置搜索高亮显示 | 
| :g/string | 只显示包含string的行 | 
| :g!/string 或 :v/string | 显示不包含string的行 | 
替换
| 按键 | 功能 | 
|---|
| :s/old/new | 替换当前行 old 为 new | 
| :%s/old/new/g | 全文替换指定字符串, /g不询问全替换,/c每个单独询问是否替换 | 
| :n1,n2s/old/new/g | 在 n1 至 n2 行之间替换字符串 | 
撤销修改
| 按键 | 功能 | 
|---|
| u | 撤销上一步操作 | 
| CTRL + r | 恢复撤销(重做) | 
改写单个字符:光标移动到需要替换的字符处,按 r 键加要替换的字符
文件操作
| 按键 | 功能 | 
|---|
| :wq 或 ZZ | 保存并退出 | 
| :q | 退出 | 
| :q! | 不保存退出 | 
| :w | 仅保存 | 
| :w new_filename | 另存为new_filename | 
| :wq! | 强行保存退出,仅文件所有者和root用户可以 | 
| :ol | 查看历史文件列表 | 
| :f new_filename | 重命名文件,但不保存 | 
多文件打开
vim -o file1 file2 横排打开两个文件
| 按键 | 功能 | 
|---|
| :vsp filename 或 :vnew filename | 竖排打开新文件filename | 
| :vsp | 竖排再打开同文件 | 
| :vnew | 竖排新打开vim窗口 | 
| :sp filename 或 :new filename | 横排打开新文件filename | 
| :sp | 横排再打开同文件 | 
| :new | 横排新打开vim窗口 | 
| :all | 切换窗口为横排 | 
| :close | 关闭当前窗口 | 
| CTRL + ww | 切换编辑窗口 | 
| CTRL + w + j 或 CTRL + w + ↓ | 向下跳转窗口 | 
| CTRL + w + k 或 CTRL + w + ↑ | 向上跳转窗口 | 
| CTRL + w + h 或 CTRL + w + ← | 向左跳转窗口 | 
| CTRL + w + l 或 CTRL + w + → | 向右跳转窗口 | 
| CTRL + w + r | 向下或右移动窗口 | 
| CTRL + w + R | 向上或左移动窗口 | 
| CTRL + w + x | 交换窗口 | 
比较
vimdiff file1 file2 竖排打开两个文件并比较
| 按键 | 功能 | 
|---|
| ]c | 调转到下一个不同处 | 
| [c | 跳转到上一个不同处 | 
| dp | 该差异点使用当前文件的 | 
| do | 该差异点使用其它文件的 | 
| :diffupdate | 手动刷新重新比较 | 
| :qa | 退出vimdiff | 
代码
| 按键 | 功能 | 
|---|
| gg=G | 全文格式化(自动缩进) | 
| 4G=10G | 自动缩进4至10行 | 
| :1,5s/^/#/g | 1到5行行首加 “#” | 
| :4,6s/^#//g | 4到6行行首去掉 “#” | 
| :3,4s/^/\/\//g | 3到4行行首加 “//” 注释 | 
| :1,20s/^\s*[0-9]*\s*//g | 去除 1-20 行首的行号 | 
| » | 缩进当前行 | 
| « | 反向缩进当前行 | 
| :set foldmethod=indent | 设置用缩进表示折叠 | 
| zR | 展开全部折叠 | 
| zr | 展开当前层级折叠 | 
| zM | 全部折叠 | 
| zm | 当前层级折叠 | 
| za | 切换当前层级折叠/展开 | 
| zA | 递归折叠/展开当前大区块 | 
| zc | 折叠当前区块 | 
| zC | 递归折叠当前大区块 | 
| zo | 展开当前区块 | 
| zO | 递归展开当前大区块 | 
其他
| 按键 | 功能 | 
|---|
| ! | 在命令后加!,表示强制执行 | 
| : !命令 | 不退出vim执行命令 | 
| :r filename | 在光标所在行处导入filename文件内容 | 
| :r !命令 | 导入命令结果 | 
| :set nu | 显示行号 | 
| :set nonu | 取消显示行号 | 
替换模式(改写)
左下角会显示 – 替换 –
| 按键 | 功能 | 
|---|
| R | 从光标处进入替换模式 | 
| [esc] | 退出替换模式,进入正常模式 | 
可视模式
| 按键 | 功能 | 
|---|
| v | 可视 | 
| V | 行可视 | 
| CTRL + v | 块可视(常用) | 
| [esc] | 退出可视模式到正常模式 | 
可视(v)
左下角会显示 – 可视 –
| 按键 | 功能 | 
|---|
| j 或 ↓ | 向下选中 | 
| k 或 ↑ | 向上选中 | 
| h 或 ← | 向左选中 | 
| l(小写L) 或 → | 向右选中 | 
| ^ | 选中光标位置到行首 | 
| $ | 选中光标位置到行末 | 
| d | 剪切选块 | 
| y | 复制选块 | 
| p(小写) | 在光标后粘贴选块 | 
| P(大写) | 在光标前粘贴选块 | 
行可视(V)
左下角会显示 – 可视 行 –
| 按键 | 功能 | 
|---|
| j 或 ↓ | 向下选中 | 
| k 或 ↑ | 向上选中 | 
| d | 剪切选块 | 
| y | 复制选块 | 
| p(小写) | 在光标后粘贴选块 | 
| P(大写) | 在光标前粘贴选块 | 
块可视(CTRL + v)
左下角会显示 – 可视 块 –
| 按键 | 功能 | 
|---|
| j 或 ↓ | 向下选中 | 
| k 或 ↑ | 向上选中 | 
| h 或 ← | 向左选中 | 
| l (小写L)或 → | 向右选中 | 
| ^ | 选中光标位置到行首 | 
| $ | 选中光标位置到行末 | 
| d | 剪切选块 | 
| y | 复制选块 | 
| p(小写) | 在光标后粘贴选块 | 
| P(大写) | 在光标前粘贴选块 | 
| I(大写i) | 插入模式;选中多行,按I进入插入模式,输入要插入的字符,按[esc],完成多行批量插入字符 | 
配置文件
用户配置文件: ~/.vimrc
系统配置文件: /etc/vimrc