【Linux上机实验】实验三 vi编辑器的使用
实验内容及步骤:
1.进入vi,编辑一个脚本,保存并退出vi。
(1)进入vi,创建一个myscript文件。
命令:vi myscript
进入vi编辑环境,处于命令模式下,如何切换到输入模式:
按下小写字母 "i"
(2)在输入模式下输入下列脚本。
#!/bin/bash
echo -n "Hello,current path is "
pwd
echo -e "The current date is \c"
date
echo -n "My name is "
whoami
echo -e "current calendar is:\n"
cal
(3)输入完毕,需先切换到命令模式,按Esc
键,再切换到末行模式,按Shift+;键
(4)末行模式下,存盘退出命令::wq
(5)在终端命令行运行该脚本方法:bash myscript
2. 光标移动
首先,用cp 命令拷贝一个有内容的文本文件到当前目录下,用vi或者vim进入该文本文件。(在此文件下练习vi常用命令)
- 输入模式下:(用i进入输入模式)
①上下左右移动用的是什么键:H、J、K、L(分别代表左、下、上、右)键
②HOME键作用:将光标移动到当前行的开头
③END键作用:将光标移动到当前行的末尾
④向上翻页/向下翻页键:使用 Page Up 和 Page Down 键进行页面切换
- 命令模式下:(用ESC键进入命令模式)
上下左右移动用的是什么键:
①h(向左移动)
②l(向右移动)
- 左右移动键还有:
b(向前移动一个单词)和w(向后移动一个单词)。
- 向下移动的键还有:
Ctrl + F(向下滚动一页)和 Ctrl + D(向下滚动半页)。
- 移动光标到行首(非空白字符):
^
- 移动光标到行首(不管是否是空白字符):
O
(大写O) - 移动光标到行尾,停在最后一个字符上:
$
- 5$ 命令含义:
将光标移动到当前行末尾之后的第5个字符处。
- gg命令:
将光标移动到第一行的行首。
- G命令:
将光标移动到最后一行的行首。
- 5G命令:
将光标移动到第5行的行首。
- w命令:
向后移动一个单词。
- W命令:
向后移动一个以空格分隔的字符串。
- b命令:
向前移动一个单词。
- e命令:
移动到当前单词的末尾。
- 6|命令:
将光标移动到当前行的第6个字符处。
3. 文本修改
①输入模式下:
- 删除光标前一个字符:
Backspace
- 删除光标后一个字符:
Delete
- 切换光标为输入/替换模式:
Insert
- 退出输入模式到命令模式:
Esc
②命令模式下:
- x命令:
删除光标所在位置的字符
- X命令:
删除光标前一个字符
- 5x命令:
删除光标后的5个字符
- 5X命令:
删除光标前的5个字符
- dd命令:
删除当前行
- 5dd命令:
删除当前行及其后的4行
- D命令:
删除光标后的内容
③d与光标移动命令组合:
- d0命令:
删除光标到行首的内容
- d$命令:
删除光标到行尾的内容
- d5G命令:
删除光标到第5行的内容
- d3w命令:
删除光标后的3个单词
- d3B命令:
删除光标前的3个单词
- u命令:
撤销上一次编辑操作
- U命令:
恢复当前行的原始内容
4. 复制粘贴命令
- yy命令:
复制当前行
- 5yy命令:
复制当前行及其后的4行
- y^命令:
复制光标到行首的内容
- y$命令:
复制光标到行尾的内容
- 复制从光标开始到词尾的字符:
yw
- 复制从光标开始的3个单词:
3yw
- 粘贴剪贴板的内容在光标后:
p(小写)
- 粘贴剪贴板的内容在光标前:
P(大写)
5. 文本替换
修改文本对象,修改命令c或者C:
一般使用方式:c+光标移动命令+新文本+ESC(删除老文本插入新文本)
新文本:
Welcome to here.
Together,we will glow.
Share your smiles in the spring world.
要求:删除光标所在行至第10行的所有内容,然后接收用户输入的新文本,最后按ESC键结束。
命令:
10G //将光标移动到第10行
c //进入替换模式
Welcome to here.
Together, we will glow.
Share your smiles in the spring world.
ESC
截屏:
修改文本对象,替换命令s或者S:
一般使用方式:s或者S+替换正文+ESC(删除当前字符或者整行插入替换文本)
s命令含义:
替换当前字符
S命令含义:替换当前行
要求:光标移到15行,用新文本I have lots of homeworke to catch up on tonight.替换当前行,最后按ESC。
命令:
15G // 将光标移动到第15行
s // 进入替换模式
I have lots of homeworke to catch up on tonight.<按回车键>
<按ESC键退出替换模式>
截屏:
修改文本对象,取代命令r和R :
- r命令含义:
用一个字符替换当前光标所在位置的字符,替换完成后光标会停留在原来位置。
- R命令的含义:
进入替换模式,光标所在位置的字符会被新输入的字符替换,光标会一直停留在当 前位置,直到按下ESC键退出替换模式。
要求:光标移到18行第9列,用新文本I did not sleep a wink last night with that
noise.取代10列之后的字符,最后按ESC。
命令:
将光标移动到第18行第9列,执行命令:18G9l
进入替换模式,执行命令:R
输入新的文本:"I did not sleep a wink last night with that noise."
按下Esc键,结束替换操作
截屏:
6. 字符串检索命令
- 向前字符串检索
格式:/模式+Enter键
gg回到行首,输入下列命令。
命令:
/man+Enter(在命令模式下)
截屏:
- 向后字符串检索
格式:?模式+Enter键
G回到文件最后一行,输入下列命令。
命令:
?The +Enter键(?和Enter之间没得空格,输入?The后直接按Enter键)
截屏:
- 重复检索命令
①重复检索的方向同上一个检索命令:按下小写字母"n"键
②重复检索的方向与上一个检索命令相反:按下大写字母"N"键
7. 字符串搜索和替换命令
语法格式:
s/<search_string>/<replace_string>/
range - 定义执行“查找和替换”函数的范围,有两个不同的值:
- % - 对整个文件执行
- < start _line > < end_line > - 在一组特定的行上面执行
:% s/Man/man/g 命令含义:
该命令的含义是在整个文件中搜索字符串 "Man",并将所有匹配的 "Man" 替换为 "man"。% 表示整个文件,g 表示全局替换,一行中的所有匹配都会被替换。
:2,10 s/line/lines/g 命令的含义:该命令的含义是在第2行到第10行之间搜索字符串 "line",并将所有匹配的 "line" 替换为 "lines"。2,10 表示行范围。
:1,$s/Vim/vim/gc 命令的含义:该命令的含义是在整个文件中搜索字符串 "Vim",并将所有匹配的 "Vim" 替换为 "vim"。1,$ 表示从第1行到最后一行,g 表示全局替换,c 表示对每个匹配进行确认。
8. 全局替换命令
语法格式: g/模式/命令表
其中,命令表可以是替换命令s/old/new/option,也可以是s/模式/替代文本/选项这种形式。
:g/pattern/s/old/new/g 命令含义:
在匹配到模式的所有行中,将每行中的旧文本替换为新文本。
9. 综合练习。
(1)请在主目录(/home/student)下建立一个名为 vitest 的目录;
命令:mkdir /home/student/vitest
(2)进入 vitest 这个目录当中;
命令:cd /home/student/vitest
(3)将 /etc/manpath.config 拷贝到本目录下;
命令:cp /etc/manpath.config .
(4)使用 vi 开启本目录下的 manpath.config 这个文件;
命令:vi manpath.config
(5)在 vi 中设定一下行号;
设置行号命令::set nu(取消行号命令: :set nonu)
(6)移动到第67 行,向右移动 26 个字符,请问您看到的是什么目录?
移动到第67 行的命令:67G 向右移动 26 个字符的命令:26l
看到:/var/cache/man
(7)再向左移动16个字符的命令:16h
看到:/usr/share/man
(8)回到当前行第一个字符处命令:0
移动到当前行的行尾命令:$
(9)移动到第5行(包含当前行)词尾命令:5ge
。再回到当前行的第一个字符处:0
。
(10)光标向前移至下一个词的开头命令:w
。
(11)光标后退到前一个词的开头命令:b
。
(12)移动到第一行,并且向下搜寻一下『 modify 』这个字符串,请问他在第几行?
移动到第一行:gg, 向下搜寻一下“modify ”/modify它在76行。
(13)接着下来,我要将 50 到 70 行之间的 man 改为 MAN ,并且一个一个挑选是否需要修改,如何下达指令?
命令::50,70s/man/MAN/gc
(14)修改完之后,突然反悔了,要全部复原,有哪些方法?
按下 u 键撤销之前的操作,直至回到初始状态。退出当前编辑并且不保存:输入 :q!。
(15)我要复制51到60行这十行的内容,并且贴到最后一行之后;
//命令:
:51,60y
:$
:p
(16)删除11到30行之间的20行;
:11,30d
(17)到第29行,并且删除 15 个字符;
:29
15x
(18)将这个文件另存成一个 mantest.config 文件;
:w mantest.config
(19) 请问目前的文件有多少行与多少字符?用什么命令统计?
命令:wc manpath.config
131 715 5173 manpath.config
131 表示 mantest.config 文件的行数。
5173 表示 mantest.config 文件的字符数。
(20)储存后离开吧。
:wq
撒花,完结!
愿,所有相遇,都恰逢其时!
愿,此刻心头,正满怀欣喜!
本文来自博客园,作者:Cloudservice,转载请注明原文链接:https://www.cnblogs.com/whwh/p/17786751.html,只要学不死,就往死里学!