插入模式
左下角会显示 – 插入 –
| 按键 | 功能 |
|---|
| 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