vi 的刪除指令有幾種,如下: x : 刪除游標上的字元。 X : 刪除游標的前一個字元。 dd: 刪除該行。 dw: 刪除游標所在之單字。 d0: 刪除自行首至游標所在之所有字元。 d$: 刪除自游標至行尾之所有字元。
在命令模式下使用指令
vi中删除第几行到第几行
在命令模式下
比如删除第5行到第8行
:5,8d
d1G 删除光标所在行到第一行的所有数据
n<space>
按下数字后再按空格键,光标会向右移动这一行的n个字符。例如20<space>,则光标会向右移动20个字符
这个需要这一行有字符的情况
vi删除连续几行的第一个字符
按ctrl+v然后再按上下箭头选中需要删除的行再点击d
命令行模式下输入
6,9 co 12
复制第6行到第9行之间的内容到第12行后面。
光标移到起始行,输入ma
光标移到结束行,输入mb
光标移到粘贴行,输入mc
然后 :'a,'b co 'c
把 co 改成 m 就成剪切了
命令模式
查找与替换
/word
在光标之后查找一个名为word的字符串(常用)
?word
在光标之前查找一个名为word的字符串
:n1,n2s/word1/word2/g
在第n1与n2行之间查找word1这个字符串,并将该字符串替换为word2(常用)
:1,$s/ word1/word2/g
在第一行与最后一行之间查找word1这个字符串,并将该字符串替换为word2(常用)
:1,$s/ word1/word2/gc
在第一行与最后一行之间查找word1这个字符串,并将该字符串替换为word2,且在替换前显示提示符让用户确认(conform)(常用)
:131,142s/j/k/g
把131于142行之间出现的j字母全都替换成k字母
vi跳到文件末尾方法是按shift+g,另外,到文件开头是gg
在非编辑模式打小写的u
vi光标移动
ctrl+f 向前滚动一屏(forward)
ctrl+b 向后滚动一屏(backward)
ctrl+b 向后滚动一屏(backward)
ctrl+d 向前滚动半屏(down)
ctrl+u 向后滚动半屏(up)
5. 移至行首
将光标移到当前行的行首使用的命令为0和^。这两个命令在使用时的差别在于命令0是将光标移到当前行的第一个字符,不管它是否为空白符,而命令^将光标移到当前行的第一个非空白符。
6. 移至行尾
将光标移到当前行的行尾使用的命令为$。光标移至行尾后,停留在最后一个字符上,如果在该命令前加数字n,则光标将下移到n-1行的行尾。
vi如何移动到指定行
输入:n即可,比如跳到100行,则输入 :100
也可以输入nG
,比如跳到100行,则输入100G
撤销上一次操作:u
vi设置行号,命令模式下输入set number
o 在当前行后插入一行,O 在当前行前插入一行
vi正则表达式:待学习to be continued
vi如何将每行第一个字符(如果该字符是'a'),改为字符'c'。
:注意是第一个字符,不是第一个非空字符
:%s/^[a]/c/
%百分号代表所有行,元字符^表示匹配行首,[a]代表匹配字符a
在行首和行末添加字符
在当前文件的所有行首插入字符“a”
:%s/^/a
在当前文件的所有行尾 插入字符“b”
:%s/$/b
:%s/^/a
在当前文件的所有行尾 插入字符“b”
:%s/$/b
转义字符
如何查询*之类的字符前面需添加\(反斜杠)以转义
比如把每行中的第一个*字符替换为&符号可以如下表示
%s/\*/\&/
替换的字符如果也需转义也必须添加斜杠。
实践中曾经漏掉&前面的\,结果一直替换不了
关于正则表达式的内容可以参考这篇文章
二、元字符
元字符是具有特殊意义的字符。使用元字符可以表达任意字符、行首、行 尾、某几个字符等意义。
元字符一览
元字符 | 说明 |
. | 匹配任意一个字符 |
[abc] | 匹配方括号中的任意一个字符。可以使用-表示字符范围, 如[a-z0-9]匹 配小写字母和阿拉伯数字。 |
[^abc] | 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。 |
\d | 匹配阿拉伯数字,等同于[0-9]。 |
\D | 匹配阿拉伯数字之外的任意字符,等同于[^0-9]。 |
\x | 匹配十六进制数字,等同于[0-9A-Fa-f]。 |
\X | 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]。 |
\w | 匹配单词字母,等同于[0-9A-Za-z_]。 |
\W | 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。 |
\t | 匹配<TAB>字符。 |
\s | 匹配空白字符,等同于[ \t]。 |
\S | 匹配非空白字符,等同于[^ \t]。 |
另外,如果要查找字符 *、.、/等,则需要在前面用 \ 符号,表示这不是元字符,而只是普通字符而已。
元字符 | 说明 |
\* | 匹配 * 字符。 |
\. | 匹配 . 字符。 |
\/ | 匹配 / 字符。 |
\\ | 匹配 \ 字符。 |
\[ | 匹配 [ 字符。 |
表示数量的元字符
元字符 | 说明 |
* | 匹配0-任意个 |
\+ | 匹配1-任意个 |
\? | 匹配0-1个 |
\{n,m} | 匹配n-m个 |
\{n} | 匹配n个 |
\{n,} | 匹配n-任意个 |
\{,m} | 匹配0-m个 |
表示位置的符号
元字符 | 说明 |
$ | 匹配行尾 |
^ | 匹配行首 |
\< | 匹配单词词首 |
\> | 匹配单词词尾 |
使用例
/char\s\+[A-Za-z_]\w*; " 查找所有以char开头,之后是一个以上的空白, " 最后是一个标识符和分号 /\d\d:\d\d:\d\d " 查找如 17:37:01 格式的时间字符串 :g/^\s*$/d " 删除只有空白的行 :s/\<four\>/4/g " 将所有的four替换成4,但是fourteen中的four不替换
vi列模式
又称纵向编辑模式
ctrl+v
进入纵向编辑模式输入r进入修改模式
行尾操作
输入ctrl+v进入visual block模式,输入$进入行尾,选择要编辑的行,比如包括当前行之后的5行,就输入5j
输入A进入行尾编辑模式,输入要插入的字符,再按esc键便完成了
vi如何同时打开多个文件
vi -o f1 f2 (f1,f2为相应的文件名)
如何在不同文件间切换
ctrl+w+方向键