vim模式及切换
普通模式
该模式是vim的默认模式
插入模式
该模式是一般编辑器的正常模式,在该模式下进行文档的编辑工作
可视模式
该模式下通过光标移动,高亮选择区
命令行模式
该模式下执行一些vim编辑器的设置及文档替换等及一些vim支持的命令操作
普通模式 ——> 插入模式
| 操作 | 说明 |
|---|---|
| i | 在光标左侧插入正文 |
| a | 在光标右侧插入正文 |
| o | 在光标所在行的下一行增添新行 |
| O | 在光标所在行的上一行增添新行 |
| I | 在光标所在行的开头插入 |
| A | 在光标所在行的末尾插入 |
插入模式 ——> 普通模式
按ESC由插入模式切换到普通模式
普通模式 ——> 可视模式
| 操作 | 说明 |
|---|---|
| v | 字符移动高亮 |
| V | 按行高亮 |
| ctrl + v | 按块高亮 |
| vi{ | 选中{}中间的内容,不包括{} |
| va{ | 选中{}中间内容,包括{} |
| vi( | 选中()中间内容 |
| vi< | 选中<>中间内容 |
| vi[ | 选中[]中间内容 |
| vit | 选中中间的内容 |
| vi” | 选中”"中间内容 |
| vi’ | 选中”中间的内容、 |
| vis | 选中一个句子 |
| vib | 选中一个block |
| viw | 选中一个单词 |
| vip | 选中一个段落 |
| o | 切换光标开头和结尾 |
可视模式 ——> 普通模式
在模式下v的反操作
普通模式 ——> 命令行模式
命令行模式输入":"进入命令行模式
光标移动
字符移动
| 操作 | 说明 |
|---|---|
| h | 左 |
| j | 下 |
| k | 上 |
| l | 右 |
单词移动
| 操作 | 说明 |
|---|---|
| w | 移动到下个单词开头 |
| W | 移动到下个单词开头(单词含标点) |
| e | 移动到下个单词结尾 |
| E | 移动到下个单词结尾(单词含标点) |
| b | 移动到上个单词结尾 |
| B | 移动到上个单词结尾(单词含标点) |
| fx | 向后搜索<字母>并跳转到第一个匹配的位置 |
| Fx | 向前搜索<字母>并跳转到第一个匹配的位置 |
| % | 移动到{,[( |
行内移动
| 操作 | 说明 |
|---|---|
| 0 | 移动到行首 |
| ^ | 移动到行首 |
| $ | 移动到行尾 |
| g_ | 移动到行内最后一个非空白符 |
行间移动
| 操作 | 说明 |
|---|---|
| ngg | 移动到n行 |
| G | 移动到行尾 |
页内移动
| 操作 | 说明 |
|---|---|
| H | 移动到当前页面顶部 |
| M | 移动到当前页面中间 |
| L | 移动到当前页面底部 |
文档移动
| 操作 | 说明 |
|---|---|
| Ctrl + b | 向后滚动一屏 |
| Ctrl + f | 向前滚动一屏 |
| Ctrl + d | 向前滚动半屏 |
| Ctrl + u | 向后滚动半屏 |
| zz | 移动屏幕使光标居中 |
文档编辑
编辑
| 操作 | 说明 |
|---|---|
| r | 替换当前字符 |
| J | 将下一行合并到当前行 |
| gJ | join line below to the current one without space in between |
| gwip | reflow paragraph |
| cc | 清空当前行, 然后进入插入模式 |
| c$ | 从光标位置开始, 修改当前行 |
| ciw | change (replace) entire word |
| cw | 从光标位置开始, 修改单词 |
| s | 删除当前字符, 然后进入插入模式 |
| S | 清空当前行, 然后进入插入模式 (同cc) |
| xp | 当前字符后移 |
| u | 撤销 |
| Ctrl + r | 重复 |
| . | 再次执行上个命令 |
查找/替换
| 操作 | 说明 |
|---|---|
| /pattern | 查找pattern |
| ?pattern | 向上查找pattern |
| \vpattern | pattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符) |
| n | 查找下一个 |
| N | 查找上一个 |
| :%s/old/new/g | 替换全部 |
| :%s/old/new/gc | (逐个)替换 |
| :noh | 移除搜索结果的高亮显示 |
删除
| 操作 | 说明 |
|---|---|
| x | 删除光标后字符 |
| X | 删除光标前字符 |
| dd | 删除改行 |
| dw | 删除单词 |
| d$ | 删除到行尾 |
| d^ | 删除到行首 |
| ndd | 删除n行 |
剪切, 复制, 粘贴
| 操作 | 说明 |
|---|---|
| yy | 复制当前行 |
| nyy | 复制 n 行 |
| yw | 复制当前单词 |
| y$ | 复制, 从光标位置到行末 |
| p | 在光标后粘贴 |
| P | 在光标前粘贴 |
| dd | 剪切当前行 |
| ndd | 剪切 2 行 |
| dw | 剪切当前单词 |
| D | 剪切, 从光标位置到行末 |
| d$ | 剪切, 从光标位置到行末 (同D) |
| x | 剪切当前字符 |
分屏和标签
| 操作 | 说明 |
|---|---|
| :e file | 新建缓冲区打开 filename |
| :bnext or :bn | 切换到下个缓冲区 |
| :bprev or :bp | 切换到上个缓冲区 |
| :bd | 关闭缓冲区 |
| :ls | 列出所有打开的缓冲区 |
| :sp file | 新建缓冲区打开 filename 并水平分割窗口 |
| :vsp file | 新缓冲区打开 filename 并垂直分割窗口 |
| Ctrl + ws | 水平分割窗口 |
| Ctrl + ww | 在窗口间切换 |
| Ctrl + wq | 关闭窗口 |
| Ctrl + wv | 垂直分割窗口 |
| Ctrl + wh | 切换到右侧窗口 |
| Ctrl + wl | 切换到左侧窗口 |
| Ctrl + wj | 切换到下侧窗口 |
| Ctrl + wk | 切换到上侧窗口 |
可视化模式 VISUAL
进入一般的可视化模式
命令模式下,
v - 命令进入的字符可视化模式(Characterwise visual mode), 文本选择是以字符为单位的
V - 命令进入的行可视化模式(Linewise visual mode), 文本选择是以行为单位的
ctrl-V/v - 进入的块可视化模式(Blockwise visual mode), 可以选择一个矩形内的文本, 类似于Notepad++和UE里的列编辑
代码块选择的可视化模式
vi{pattern character} 或者 va{pattern character}
例如:
vi" - 选中双引号之间的所有内容,但是不包含双引号;
va" - 选中双引号之间的内容且包括双引号
其他的还有 vi{, vi(, vi[, vi(, vi’ 等
vis, vip, viw, viB, vib
vis - 将光标停留在段落中的任何字符上,该命令会选中一个段落(空行分隔),但不包含段首和段尾的空白字符
vip - 将光标停留在段落中的任何字符上,该命令会选中一个段落(空行分隔),包含段首和段尾的空白字符
viw - 将光标停留在某单词的任何字符上,该命令会选中整个单词
viB - 将光标停留在一个大括号内,使用该命令选中该大括号内的代码
vib - 将光标停留在一个小括号内,使用该命令选中该小括号内的代码
快速查找替换
单词操作
w - 下一个单词开头
b - 上一个单词开头
e - 如果光标在当前单词上(非结尾字符),则跳到当前单词结尾;否则跳到下一个单词的结尾
跳到上一个单词的结尾怎么办?vim应该没有提供单个字符的命令,可以使用组合be,即先跳到上一个单词,再跳到当前单词的结尾
行操作
0 - 移动光标到行首
^ - 移动光标到行首非空字符
$ - 移动光标到行尾
g_ - 移动光标到行尾非空字符
括号操作
% - 如果当前光标停留在非成对字符上,跳到下一个成对字符处;如果当前光标停留在成对字符上,则跳到与当前字符匹配的字符
f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。
F 同f,反向查找。
df( 配合 f ,删除从光标处到 ( 的字符,单行操作
参考:
