vi 常用命令
vi的3种模式
1、命令行模式 (command mode/一般模式)
任何时候,不管用户处于何种模式,只要按一下“ESC”键,即可使Vi进入命令行模式;
此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
2、文本输入模式 (input mode/编辑模式)
在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。
3、末行模式 (last line mode/指令列命令模式,ex转义模式
在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。)
一、移动
1.1 单词
- w:下一个单词第一个字符
- W:下一个长单词第一个字符
- e:下一个单词最后一个字符
- E:下一个长单词最后一个字符
- b:前一个单词第一个字符
- B:前一个长单词第一个字符
- ge:前一个单词的最后一个字符
- gE:前一个长单词的最后一个字符
1.2 行
- 0:到行首
- $:到行尾
- gg:到第一行
- G:到最后一行
- xG:到第x行
1.3 句
- (:到句首
- ):到句尾
- {:到段首
- }:到段尾
1.4 屏幕
- ctrl+e:向下滚屏
- ctrl+y:向上滚屏
- ctrl+d:向下滚半屏
- ctrl+u:向上滚半屏
- ctrl+f:向下滚整屏
- ctrl+b:向上滚整屏
1.5 跳转
- fx:跳转到下一个出现x字符的地方
- ctrl+]:跳到下一个主题(tag)
- ctrl+0:跳回原来的位置
1.6 保存和退出
- :w:保存
- :q:退出
- :wq | :x | ZZ:保存退出
- :q! | ZQ:不保存退出
- :w filename:另存为filename
二、编辑
2.1 字符
- x:删除当前光标下的字符
- X:删除当前光标左边的字符
- s:修改一个字符
- i:在光标之前插入
- a:在光标之后插入
2.2 单词
- diw:删除光标所在的单词,不包括空白字符
- daw:删除光标所在的三次,包括空白字符
- dw:从当前位置删除到下一个单词词首
2.3 行
- D:删除到行尾的内容
- C:修改到行尾的内容
- S:修改一整行
- dd:删除一行
- yy:复制一行
- o:在当前行下插入一空行
- O:在当前行上插入一空行
- I:在当前行首插入
- A:在当前行尾插入
2.4 撤销及重复
- u:撤销改动
- U:撤销所有改动
- .:重复上一命令
2.5 编辑
- p:粘贴到光标之后
- P:粘贴到光标之前
2.5.1 复制
在命令模式下输入v进入自由选取模式,选择需要剪切的文字后,按下y就可以进行剪切了
- yy:复制当前行
- nyy:n表示大于1的数字,复制n行
- yw:从光标处复制至一个单子/单词的末尾,包括空格
- ye:从光标处复制至一个单子/单词的末尾,不包括空格
- y$:从当前光标复制到行末
- y0:从当前光标位置(不包括光标位置)复制之行首
- y3l:从光标位置(包括光标位置)向右复制3个字符
- y5G:将当前行(包括当前行)至第5行(不包括它)复制
- y3B:从当前光标位置(不包括光标位置)反向复制3个单词
2.5.2 剪切
在命令模式下输入v进入自由选取模式,选择需要剪切的文字后,按下d就可以进行剪切了
- dd:剪切当前行
- ndd:n表示大于1的数字,剪切n行
- dw:从光标处剪切至一个单子/单词的末尾,包括空格
- de:从光标处剪切至一个单子/单词的末尾,不包括空格
- d$:从当前光标剪切到行末
- d0:从当前光标位置(不包括光标位置)剪切之行首
- d3l:从光标位置(包括光标位置)向右剪切3个字符
- d5G:将当前行(包括当前行)至第5行(不包括它)剪切
- d3B:从当前光标位置(不包括光标位置)反向剪切3个单词
- dH:剪切从当前行至所显示屏幕顶行的全部行
- dM:剪切从当前行至命令M所指定行的全部行
- dL:剪切从当前行至所显示屏幕底的全部行
三、查找和替换
- /x:从光标位置往后查找x
- ?x:从光标位置往前查找x
- /^x:从光标位置开始只在行首查找x
- /x$:从光标位置开始只在行尾查找x
替换命令的格式是:
:s/old/new/
:s/old/new/g:一行命令替换所有old。
:n,ms/old/new/g:替换行号n和m之间所有old。
:%s/old/new/g:替换整个文件中的所有old。
:%s/old/new/gc:替换整个文件中的所有old,但在每次出现时提示。
四、设置行号
1、显示行号:set nu
2、取消显示行号:set nu!
五、多窗口功能
-
:sp 【filename】打开一个新窗口,如果加filename,表示在新窗口打开一个新文件,否则表示两个窗口为同一个文件内容
-
ctrl+wj:先按下ctrl ,再按下w后,放开所有按键,然后按下j,则光标可移动到下方的窗口
-
ctrl+wk:同上,不过光标移动到上面的窗口
-
ctrl+wq:其实就是:q结束离开。