插入
i | 在Normal模式按下,在当前光标所选字符之前插入 |
I | 在Normal模式按下,在当前光标所选行首插入 |
a | 在Normal模式按下,在当前光标所选字符之后插入 |
A | 在Normal模式按下,在当前光标所选行尾插入 |
o | 在Normal模式按下,在当前光标所在行之后插入 |
O | 在Normal模式按下,在当前光标所在行之前插入 |
分隔窗口
:split |
1、将当前文件进行上下分隔编辑,使用CTRL-w-w进行切换。 2、若在:split后跟了其他文件名,表示打开指定文件,与当前文件进行上下分隔。 3、若在split前加数字,代表新分隔窗口的行数占用。 4、将split替换为vsplit既为左右分隔,其他特征一样。 |
:close | 关闭当前光标所在窗口 |
:only | 关闭除当前窗口以外的其他窗口 |
:new |
1、上下分隔的方式打开一个新窗口并编辑空缓存区 2、将new替换为vnew则是垂直分隔编辑新缓存 |
CTRL-w |
当进行很多分隔时,为了快速切换,CTRL-w 后面加上方向键就可以快速定位。 当方向键换为大写字母,则代表移动窗口。 CRTL-w-h 到左边窗口 CRTL-w-H 向左移动窗口 CRTL-w-j 到下面窗口 CRTL-w-J 向下移动窗口 CRTL-w-k 到上面窗口 CRTL-w-K 向上移动窗口 CRTL-w-l 到右边窗口 CRTL-w-L 向右移动窗口 CRTL-w-t 到顶部窗口 CRTL-w-b 到底部窗口 |
:qall |
退出所有窗口并退出vim,当有未保存文件,可以用 :wqall 先保存退出,或者用 :qall! 强制退出 |
vim -o FileName |
启动vim时使用此指令表示以水平分隔方式打开所有FileName文件,当o为大写,则是垂直分隔 |
:all |
:all为后面指定文件水平分隔并编辑,:vall 则为垂直分割 |
vimdiff file1 file2 |
1、以垂直分割的方式比较两个文件不同,相同位置会自动折叠。在折叠行使用 zo 展开,用 zc 折叠。 2、经常使用 :diffupdate ,高亮显示两个文件不同 |
补全
CTRL-p | 向下查找word补全 |
CTRL-n | 向上查找word补全 |
CTRL-x-f | 补全文件名 |
CTRL-x-l | 补全整行 |
CTRL-x-d | 补全宏定义 |
CTRL-x-i | 补全include |
CTRL-x-k | 补全来自字典文件的word |
CTRL-x-t | 补全来自thesaurus的word |
CTRL-x-j | 补全tags |
CTRL-x-v | 补全vim命令行 |
移动
w |
光标移动到下一个单词的第一个字母上 w前加数字代表向后移动几个单词 |
b |
光标移动到前一个单词的第一个字母上 b前加数字代表向前移动几个单词 |
e |
光标移动到下一个单词的最后一个字母上 e前加g代表移动到前一个单词的最后一个字母上 e/eg前面加数字代表向后/向前第几个单词最后一个字母上 |
$ |
移动到行尾与[End]按键一样 可以在前面加数字,代表移动到下n-1行尾 |
^ |
移动到第一个非空白字符上 |
0 |
移动到行首与[Home]按键一样 |
f |
f后跟字符代表移动到当前行的字符上 前面可以加数字,代表移动到第几个字符 将f大写'F',则为反方向搜索 使用";"重复,","为反向重复 |
t |
与f类似,不过是移动到字符的前一个字符上 同样可以大写反方向搜索 使用";"重复,","为反向重复 |
% |
1、跳到匹配的括号上去 2、前面加数字,代表移动到文件百分之多少的位置 3、在程序中,在#ifdef这类结构上使用,会循环跳转到#else,#endif处 |
G |
G前加数字,代表移动到对应行去 不加数字则到最后一行 gg为快速跳转到第一行 |
CTRL-u |
向上滚动半屏 |
CTRL-d |
向下滚动半屏 |
CTRL-e |
向上滚动一行 |
CTRL-y |
向下滚动一行 |
CTRL-f |
向下滚动一屏 |
CTRL-b |
向上滚动一屏 |
zz |
把当前行置于屏幕中央 |
zt |
把当前行置于屏幕顶端 |
zb |
把当前行置于屏幕底端 |
`` |
将光标定位到跳转之前的位置 可以将第二个返单号"`"替换为一个字母,这个字母代表mark mark使用如下: 1、在当前处使用m+字母标记,比如"ma" 2、在其他位置跳转回标记处,比如"`a" 3、也可以使用单引号,比如"'a",代表跳转到mark行首 4、使用:marks 查看已经有的标记 默认存在以下标记: ' 此次跳转之前的起跳点 " 上次编辑该文件时光标最后位置 [ 最后一次修改的起始位置 ] 最后一次修改的结束位置 |
[# |
在#if-#endif结构中是,使用"[#"跳转到#if,使用"]#"跳转到#else或#endif |
[[ |
移动到上一个代码块首 []则为移动到上一个代码块尾 |
]] |
移动到下一个代码块首 ][则为移动到下一个代码块尾 |
[/ |
跳转到注释/**/首 ]/则为跳转到注释尾 |
折行
zf | 创建折行 |
zo | 打开当前折行 |
zc | 关闭当前折行 |
set foldmethd=syntax | 基于缩进或语法进行代码折叠 |
set nofoldenable | 启动vim时取消折叠 |
复制
nyy | 赋值包括当前行在内的n行,当n=1时,可以忽略 |
byw | 复制当前光标下的单词,“b”是为了回到单词首 |
替换
格式如下:
:[range]s/from/to/[flags]
#将from替换为to
range:指定替换范围
%:替换所有行的第一次发现的目标
空:仅替换当前行的第一次发现的目标
n,m:替换n到m行
n:替换第n行
`a,`b:从标记a到标记b的范围
`<,`>:visual模式选择的范围
flags:指定替换规则
g:替换一行的发现的所有目标
p:列出被替换的行
c:替换前需要用户确认
查找
本文件查找:
在normal模式下,移动到需要查到的字符串,按下[SHIFT]+[*]即可自动捕捉,但这仅仅对于单词而言。
如果要跨单词,需要使用传统的"/"命令输入方式
匹配操作
ci/a+符号 | 对配对符号内的内容更改,当i为a时,连同符号一起操作 |
di/a+符号 | 对配对符号内的内容删除,当i为a时,连同符号一起操作 |
yi/a+符号 | 对配对符号内的内容复制,当i为a时,连同符号一起操作 |
vi/a+符号 | 对配对符号内的内容选中,当i为a时,连同符号一起操作 |
大小写转换
gu+符号 | 将符号指定区域大写转小写,符号即为:w,0,$等等 |
gU+符号 | 将符号指定区域小写转大写 |
~ | 将光标下字母大小写替换 |
大块操作
1、多行操作:使用[CTRL]+V选中多行,在选中的第一行进行一般的编辑操作,[ESC]后,操作便复制到其他行。