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
,删除从光标处到 (
的字符,单行操作
参考: