vim分为命令行模式,编辑模式,转义命令(需要输入:)模式
退出vim (在转义命令模式下)
:w | 保存 |
:wq | 保存并退出 |
:q | 不保存并退出 |
:q! | 强制退出 |
:! | 强制 |
:ZZ | 保存并退出(和wq一样) |
三种进入编辑模式的方法
插入命令:
i 在当前光标位置进入插入模式 I 在当前光标所在行的行首进入插入模式 追加模式:
a 在当前光标之后进入插入模式 A 在当前光标所在的行的末尾进入插入模式 添加模式:
o 在当前行之后插入一个新行并进入插入模式 O 在当前行之前插入一个新行并进入插入模式
移动指令(在命令行模式下)
向右移动 | l 向右移动n个字符,nl,保证中间夹了n个字符 |
向左移动 | h 向左移动n个字符,nh,保证中间夹了n个字符 |
向下移动 | j 向下移动n个字符,nj |
向上移动 | k 向上移动n个字符,nk |
移动到行首 | ^ 或 0 |
移动到行尾 | $(这里注意,行尾代表光标落在最后一个字符左边) n$ 移动到往下n-1行的行尾 |
移动到指定行 | G nG 移动到指定行的行首 |
移动到指令列 | | n| 光标的位置代表的就是第几列 |
移动光标到下一个单词 | w (标点符合也可以作为分割的依据) W(要求的单词更为严格,必须以空白分割) |
移动光标到上一个单词 | b(标点符合也可以作为分割的依据) B(要求的单词更为严格,必须以空白分割) |
移动到屏幕顶部 | H nH 移动到屏幕的第n行 |
移动到屏幕中间 | M |
删除指令(在命令行模式下)
向右删除n个字符 | nx |
向左删除n个字符 | nX |
删除当前行 | dd ndd 删除当前行以及后面的n行 |
删除光标到行尾的内容,删除之后,下一行不上移 | D |
撤销指令和重复指令
撤销上一次的编辑操作 | u |
撤销光标所在行的所有操作,使其返回上一次被保存的状态 | U |
重复做一次最上一条指令 | . |
替换操作指令
当c,C,cc被输入后,模式会变为编辑模式。
r替换命令和s替换命令的区别是r命令只是单独的替换,而s命令会让模式变成编辑模式
删除指定的文本并进入插入模式 | c cw 删除从光标位置开始到当前单词结尾并进入插入模式 cnw 删除从光标位置开始到n个单词结尾并进入插入模式 c6G 删除从当前行到第六行的内容,并进入插入模式 |
从光标位置到行尾被删除并且进入插入模式 | C |
删除当前整行内容并进入插入模式 | cc |
将光标位置的单个字符替换为输入的字符 | r ra 代表将这个字符替换为a nr 从光标开始的n个字符被替换为你输入的字符 |
从光标位置开始的单个字符替换为输入的字符串 | R |
将光标当前位置的字符替换为输入的内容 | s s指令格式为s/旧内容/新内容/ 当出现s//新内容/这种格式时,第一个/后面内容空缺,会将上一次替换操作中的旧内容作为此次的旧内容。 |
将光标所在当前行替换为输入内容 | S |
将指定的一些行向右扩展8个单位 | > |
将指定的一些行向左缩进8个单位 | < |
将当前行和下面的n-1行合并为一行 | nJ |
屏幕显示命令
字符串查找命令
系统从当前行向下找到第一个要找的字符串,并且光标停在那里 | /model+Enter键 |
系统从当前行向下找到第一个要找的字符串,光标停在这个字符串所在行的上面n行的位置(n不填默认为1) | /model/-n+Enter键 |
系统从当前行向下找到第一个要找的字符串,光标停在这个字符串所在行的下面n行的位置(n不填默认为1) | /model/+n+Enter键 |
系统从当前行向上找到第一个要找的字符串,并且光标停在那里 | ?model+Enter键 |
系统从当前行向上找到第一个要找的字符串,光标停在这个字符串所在行的上面n行的位置(n不填默认为1) | ?model?-n+Enter键 |
系统从当前行向上找到第一个要找的字符串,光标停在这个字符串所在行的下面n行的位置(n不填默认为1) | ?model?+n+Enter键 |
重复上一次的查找命令 | n 查找方向与上一次相同 N 查找方向与上一次不同 |
在当前行查找指定字符 f是向后找 F是向前找 | f charactor F charactor |
用于重复上一次的查找方向的查找操作 | ; |
用于重复与上一次查找方向相反的查找操作 | , |
给特定的字母处打上标记 | m 小写字母 用 `小写字母 可以找回刚才标记的位置 |
全局替换指令
全局替换命令是一系列命令的指令集合
指令格式: g/model/command list
将所有字符串s1出现过的行显示到屏幕上 | g/s1/p |
将每行第一次出现的字符串s1替换为字符串s2 | g/s1/s//s2/ |
文本中所有字符串s1被替换为字符串s2 | g/s1/s//s2/g |
文本中所有字符串s1被替换为字符串s2并且把替换后的行显示在屏幕上 | g/s1/s//s2/gp |
文本中所有字符串s1被替换为字符串s2,在替换之前会问一下是否要替换 | g/s1/s//s2/gc |
标记所有有字符串s0的行,并且在标记的行中将字符串s1替换为s2 | g/s0/s/s1/s2/g |
对不包含model的行进行替换操作 | g!/model/command list |
在行首添加固定长度的空格 | g/^/s// /g |
位置转义命令
将光标移动到第n行的行首 | : n + Enter |
从当前行开始向下寻找字符串 光标移动到该位置 | : /model/ +Enter |
从当前行开始向上寻找字符串 光标移动到该位置 | : ?this? + Enter |
移动到当前行的行首 | : . |
显示行数 | : set nu |
取消显示行数 | : set nonu |
对于当前行的相对位移 | +n或-n |
对整个文件的所有行进行操作 | :%1,$ |
编辑区的最后一行 | :$ |
e,w,r,q转义命令
当用vim打开一个文件时,可以打开并编辑另外一个文件 | e命令 当前文件的编号用%这个符号来代替,用#记录从哪个文件移出的,可以用:buffers来查看 如果想回到之前的文件,则用:b[文件编号] |
在一个文件中打开另外一个文件,如果不需要系统提醒是否保存过,加上! | e filename e! filename |
保存并退出 | :wq |
忽略执行w命令之前所做的检查,例如,用户有个文件并没有打开它的写权限但是使用wq!就允许用户用任何方式修改该文件 | :wq! |
不保存直接退出 | :q |
强制退出 | :q! |
文本移动指令
将缓冲区中的内容复制到光标的下一行 | p |
将缓冲区中的内容复制到光标的上一行 | P |
复制当前行 | yy |
复制光标位置到单字结束的字符 | yw |
复制光标位置开始向后n行(包括当前行) | nyy |