vi技巧

 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+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/\*/\&/
替换的字符如果也需转义也必须添加斜杠。
实践中曾经漏掉&前面的\,结果一直替换不了
关于正则表达式的内容可以参考这篇文章

二、元字符

元字符是具有特殊意义的字符。使用元字符可以表达任意字符行首行 尾某几个字符等意义。

元字符一览

元字符说明
.匹配任意一个字符
[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+方向键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值