vi是文本编辑器,只编辑纯ASCII码的文档,没有任何多余的修饰符。
首先需要确保系统已经安装了 VI 工具,那么怎样去检查是否已经安装了呢?
使用 rpm 命令查看是否已安装 vi:
[root@exercise1 ~]# rpm -qf `which vi`
vim-minimal-7.4.160-2.el7.x86_64
###以上输入的查询结果表示已安装好
vim是vi的增加版,最明显的区别就是vim可以语法加亮,它完全兼容vi
安装
yum -y install yum
模式介绍:
(1) 首次进入文件 处于“一般模式”。
(2) 出现 “Insert” 处于“编辑模式”。
(3) 输入 : 处于“命令行模式”。
即有三种模式:一般模式、编辑模式、命令行模式
模式切换
1. 一般模式 ==> 编辑模式:
(1) i:当前字符之前插入 (光标前)
(2) I:行首插入 (行首)
(3) a:当前字符之后插入 (光标后)
(4) A:行尾插入(行尾)
(5) o:下一行插入 (另起一行)
(6) O:上一行插入(上一行插入)
2. 在一般模式下做的操作:
(1) h:光标向左移动
(2) j :光标向下移动
(3) k:光标向上移动
(4) l :光标向右移动
(5) 0 和 home 键:切换到行首, $和 end 键表示切换到行尾
(6) gg:快速定位到文档的首行 , G 定位到未行
(7) 3gg:或者 3G 快速定位到第 3 行
(8) u:撤销一步,每按一次就撤销一次
(9) r :替换
(10) /string(字符串):找到或定位你要找的单词或内容,如果相符内容比较多,
我们可以通过 N、n 来进行向上向下查找,并且 vi 会对查找到的内容进行高亮显示,
取消用 :noh
(11) /^d:^符号表示以什么开头,查找以字母 d 开头的内容
(12) /t$:$符号表示以什么结尾,查找以字母 t 结尾的内容
3. 一般模式---》对文本进行编辑:
对于文本的内容编辑主要有:删除、复制、粘贴、撤销、等等常见操作。
(1) y:复制(以字符为单位)表示对单个字符进行复制,如果要复制整行,用 yy(以行为单位)
(2) Nyy:复制 N 行,比如: 2yy ,表示在光标所在的行往下复制 2 行
(3) dd:删除,以行为单位,删除当前光标所在行
(4) Ndd:删除 N 行,比如:2dd,表示光标所在行往下删除 2 行
(5) p:在光标所在位置往下插入粘贴的内容
(7) x:向后删除一个字符,等同于 Delete
(8) X:向前删除一个字符
(9) D:从光标处删除到行尾
(10) u:撤销操作
(11) ctrl+r:还原撤销过的操作,将做过的撤销操作再还原回去,也就是说撤销前是什么样,再还原成什么样
总结:vi 如何进入其它模式。
(1) a、A、o、O、i、I 都是可以进行插入,编辑模式
(2) : 输入冒号进入命令行模式
(3) r 擦除、改写,进入替换模式
(4) 进入以上模式后,想要退出 ,按 esc
4.命令行模式操作
(1) :w 保 存 save
(2) :w! 强制保存
(3) :q 没有进行任何修改,退出 quit
(4) :q! 修改了,不保存,强制退出
(5) :wq 保存并退出
(6) :wq! 强制保存并退出
(7) :x 保存退出
(8) :w filename 保存到新文件
(9) :n1,n10 w filename 将n1到n2的内容保存到新文件
文本替换:
格式 : 范围(其中%代表所有内容) s分隔符 旧的内容 分隔符 新的内容 (分隔符可以自定义)
默认是每一行的第一个符合要求的词 (/g全部)
:1,3 s/Jan/Feb 替换第1到3行中出现的第一个Jan进行替换为Feb
:1,3 s/Jan/Feb/g 替换第1到3行中查找到所有的Jan进行替换为Feb
:3 s/Jan/January 只把第3行中内容替换了
:% s/Jan/January/g 将文本中所有的Jan替换成January
:% s/Jan/January/gi 将文本中所有的Jan替换成January, 并且忽略Jan的大小写
:% s@a@b@g 将文本中所有的a替换成b
:1,$ s/Jan/January/g 替换第一行到最后所有的Jan替换成January
块选择
在一般模式下:
v 字符选择,会将光标经过的地方选中
V 行选择,会将光标经过的地方选中
ctrl+v 可以用长方形的方式选择数据
shift+v 进入行模式
y 将选中的地方复制
d 将选中的地方删除
vim异常退出:
方法1:
vim -r filename 恢复
方法2:
rm -f .filename.swp 删除
vim快速跳转至多少行:
vim proxy.conf +12
自定义 vi 使用环境
临时设置
(1) :set nu 设置行号
(2) :set nonu 取消设置行号
(3) :N 移动到第N行
永久设置
[root@exercise1 ~]# vi /etc/vimrc #设置后会影响到系统所有的用户
[root@exercise1 ~]# vi ~/.vimrc #在用户的家目录下,创建一个
#以点开头的的文件.vimrc 此修改的应用范围仅生效于
#该用户,~符号表示匹配当前登录用户匹配家目录,
#以.点开头的表示隐藏文件
root用户下所有文件打开默认带行号:
[root@exercise1 ~]# vi /root/.vimrc #使用vi命令创建或修改家目录下的.vimrc并添加set nu
set nu
[root@exercise1 ~]# cat /root/.vimrc
set nu
[root@exercise1 ~]# vi /etc/passwd #以上设置完成后,使用vi打开文件,自动会显示行号
vi/vim经典报错(这些报错有选项提示是用vim操作的)
情况一:
如果发现交换文件的占用进程状态是正在运行,说明有人正在修改该文件,一般我们会选择终止,或者退出。否则,
谁最后退出,就以谁的修改版本为准。这样会造成先提交修改的用户修改的内容丢失。
情况二:
非正常状态退出vi,导致不正常的保存退出,导致Swap文件残留。
出现以下提示。此时占据的进程号没有运行,这个是时候,我们一般会利用swp文件进行之前工作的恢复操作R,
恢复后,即可删除swp文件。也可以直接在报错界面输入:q退出,直接删掉.swp文件。
[root@exercise1 opt]# ls -a #此时没有.swp文件
. … 1 1d 1e 1f 2 3 4 5 i.bak id j log log.bak messages
[root@exercise1 opt]# vi /opt/messages #vi进去以后使用ctrl+z停止
[1]+ 已停止 vi /opt/messages
[root@exercise1 opt]# vi /opt/messages #此时进去会报错
[root@exercise1 opt]# ls -a #查看发现多了一个.swp文件
. … 1 1d 1e 1f 2 3 4 5 i.bak id j log log.bak messages .messages.swp
[root@exercise1 opt]# rm -rf .messages.swp #删掉.swp文件,删完再进去就正常了
[root@exercise1 opt]#
vi练习示例1
1.将/etc/passwd复制到/opt目录下,并重命名为test.txt
cp -r /etc/passwd /opt/test.txt
2.用vim打test.txt并显示行号
cd /opt
vi test.txt
:set nu
3.分别向下、向右、向左、向右移5个字符,分别向下、向上翻两页
(1) h:光标向左移动
(2) j :光标向下移动
(3) k:光标向上移动
(4) l :光标向右移动
(5)上下翻页分别用PgUpPause跟PgDnBreak来实现
4.把光标移动到第10行,让光标移动到行末,再移动到行首,移动到st.txt文件的最后一行,移动到仪件的首行
操作分别为:10+G,End,Home,G,gg,
5.搜索文件中出现的r0ot并数一下一共出现多少个,不区分大小写搜索
/root\c N(向上)n(向下)来上下查找后存在4个,
6.把从第一行到第三行出现的root替换成-od-,然后还原上一步操作
:1,3 s/root/-od-/g
8.把整个文件中所有的root替换成-od-
:% s/root/-od-/g
9.把光标移动到20行,删除本行,还原上一步操作
20+G,dd,u
10.删除第19行,还原上一步操作
19+G+dd,u
11.删除从5行到10行的所有内容,还原上一步操作
5+G,6+dd,u
12.复制2行并粘贴到11行下面,还原上一步操作
2+G,yy,11+G,End,p,u
13.复制从11行到15行的内容并粘贴到8行上面,还原上一步操作
11+G,5yy,7G,End,p,u
14.把13行到18行的内容移动文件的尾部,还原上一步操作
13G,V选中1318行内容,y,V选中1318行内容,d,G,End,p,u
15.光标移动到首行,把sbin/nologin改成bin/bash
gg,:% s@sbin/nologin@bin/bash@g
16.在第一行下面插入新的一行,并输入"#Helo!"
gg,End,i,回车,输入"#Helo!"
17.保存文档并退出
:wq
vi练习示例2
[root@exercise1 opt]# cat proxy.conf
server {
listen 8080;
server_name LOCALhost;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forward-for;
proxy_intercept_errors on;
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 3s;
proxy_next_upstream_tries 2;
error_page 500 502 403 404 /proxy_error.htm1;
}
location =/proxy_error.html {
root /code/proxy;
}
}
1.使用vim打开proxy.conf文件
2.修改Listen为listen.小写,并将8080修改为80
3.修ServerName为server name小写。
4.修LOCALhost为localhost
5.在server name行下插入一行root/code;
5.复制5-14行的内容,然后将其粘贴到14行下面
6.删除与proxy_set_headerj相关的两行全部删除
7.如上操作完成后,在13-20行前面加上#号
8.删除21-23的行,然后保存当前文件