vi命令很多,目前我在工作中常用的就以下这些,后续如果还有需要再添加。
:x 同 :wq 保存后退出
:n 光标移到文件的第n 行
:0 光标移到文件的第一行
:$ 光标移到文件的最后一行
u 取消前一步操作
. 执行一个重复命令 其结果是依赖于光标当前位置
/ 从光标当前所在位置向文件尾部搜索(例如输入:/member进行查找含有member的行,按住字母'n'继续搜索)
? 由光标当前所在位置向文件头部搜索(例如输入:?member进行查找含有member的行,按住字母'n'继续搜索)
:s/text1/text2 用于将光标所在段落搜索到的第一个 text1 替换为text2
:s/text1/text2/g 用于将光标所在段落的所有 text1 替换为text2
:m,ns/text1/text2/g 用于将从 m行开始至n 行结束的所有搜索到的text1替换为text2 其中可以使用$表示末行即1,$ 表示替换文档中的所有符合条件的字符
====光标移动====
h 光标左移 如果在按h 命令前输入数字n 则光标左移n 个字符
l 光标右移 如果在按l 命令前输入数字n 则光标右移n 个字符
j 光标下移 如果在按j 命令前输入数字n 则光标下移n 个字符
k 光标上移 如果在按k 命令前输入数字n 则光标上移n 个字符
0 (零)光标移到行首
$ 光标移到行尾
H 光标移到屏幕上显示的第一行 并不一定是文件头
L 光标移到屏幕上显示的最后一行 并不一定是文件尾
Ctrl+G 状态命令 显示当前编辑文档的状态包括正在编辑的文件名是否修改过当前行号文件的行数以及光标之前的行占整个文件的百分比
====文本插入====
i 从光标所在位置前开始插入文本
I 将光标移到当前行的行首 然后在其前插入文本
a 在光标当前所在位置之后追加新文本
A 把光标挪到所在行的行尾,从那里开始插入新文本
o 将在光标所在行的下面新开一行 并将光标置于该行的行首等待输入文本
O 在光标所在行的上面插入一行并将光标置于该行的行首等待输入文本
====文本修改====
x 删除光标处的字符 若在x 之前加上一个数字n 则删除从光标所在位置开始向右的n 个字符
X 删除光标前面的那个字符 若在X之前加上一个数字n 则删除从光标前面那个字符开始向左的n 个字符
dd 删除光标所在的整行 在dd 前可加上一个数字n 表示删除当前行及其后n-1 行的内容
D 或d$ 两命令功能一样 都是删除从光标所在处开始到行尾的内容
d0 删除从光标前一个字符开始到行首的内容
dw 删除一个单词 若光标处在某个词的中间则从光标所在位置开始删至词尾 在dw之前加一个数字n 表示删除n 个指定的单词
dL 删除直到屏幕上最后一行的内容
dH 删除直到屏幕上第一行的内容
dG 删除直到工作缓存区结尾的内容
d1G 删除直到工作缓存区开始的内容
yy 复制光标所在的整行 在yy 前可加上一个数字n 表示复制当前行及其后n-1 行的内容
p 粘贴 若在p前加上一个数字n,则粘贴n次。注意如下区别,使用数字+p,则复制是顺次的;与多次按p命令结果不一样,
重复使用时数字+p命令时,粘贴结果与我们使用编辑器一样;多次按p命令,粘贴结果是顺次的
例如复制如下两行:
22
33
1)则使用命令2p后,复制结果如下:
22
33
22
33
2)连按两次p命令后,复制结果如下:
22
22
33
33
:n1,n2 co n3 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下。
:n1,n2 m m3 将 n1 行到 n2 行之间的内容移至第 n3 行下。
:n1,n2 d 将 n1 行到 n2 行之间的内容删除。
:n1,n2 w filename 将 n1 行到 n2 行之间的内容保存到文件 filename 中
:n1,n2 w! Command 将文件中n1行到n2行的内容作为 Command的输入并执行之,
若不指定 n1、n2,则将整个文件内容作为 Command 的输入。
为了记住以上命令,需要经常练习,以备不时之需。