欢迎来到CloudService文涵的博客

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

【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

image

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

截屏:
image

修改文本对象,替换命令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键退出替换模式> 

截屏:
image

修改文本对象,取代命令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键,结束替换操作

截屏:
image

6. 字符串检索命令

  • 向前字符串检索
    格式:/模式+Enter键
    gg回到行首,输入下列命令。

命令:/man+Enter(在命令模式下)
截屏:
image

  • 向后字符串检索
    格式:?模式+Enter键
    G回到文件最后一行,输入下列命令。

命令:?The +Enter键(?和Enter之间没得空格,输入?The后直接按Enter键)

截屏:
image

  • 重复检索命令
    ①重复检索的方向同上一个检索命令:按下小写字母"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

撒花,完结!

愿,所有相遇,都恰逢其时!
愿,此刻心头,正满怀欣喜!
posted on 2023-10-25 11:27  Cloudservice  阅读(1802)  评论(0编辑  收藏  举报