第三步:了解vim及vim的基础使用

vim 官方网站:https://www.vim.org/

什么是vi

首先,我们需要了解以下vi到底是什么东西?为什么要使用vi呢?

  • 所有的 UNIX-like 系统都会内置vi文本编辑器,但是其它软件就不一定了。
  • 众多软件的编辑接口都会主动调用vi
  • vim具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性、方便程序设计
  • 程序简单,编辑速度相当地快速

上面,我们提到了vi、vim,这两个有什么区别呢?

通俗一点来说,vim是vi的升级版。除了vi拥有的功能外,它还可以用颜色或者下划线的方式来显示一些特殊的信息。还有一点,涉及到shell脚本程序,vim会根据文件的\color{#FF0000}{扩展名}\color{#FF0000}{文件内的开头信息}判断文件内容自动调用该程序的语法判断样式,最终再以颜色来显示。这一点广泛应用于Linux中语法问题的检查

可以说,vi就是一个文本编辑器,而vim则是程序编辑器

vi的使用

image.png
  • 一般命令模式(command mode)
    以 vi 打开一个文件就直接进入一般命令模式了\color{#FF0000}{默认模式}。在这个模式中,可以使用【上下左右】按键来移动光标,可以使用【删除、复制、粘贴】等操作来处理文件内容
  • 编辑模式(insert mode)
    在一般模式下可以进行删除、复制、粘贴等操作,却无法进行编辑,此时就需要按【i、I、o、O、a、A、r、R】任意一个字母进入编辑模式,此时左下方会出现【INSERT】或【REPLACE】字样,若想回到一般命令模式,按下【ESC】即可退出编辑模式
  • 命令行模式( command-line mode)
    在一般命令模式下,输入【:/ ?】三个中任何一个按钮,就可以将光标移动至最下面一行。在该模式当中,提供了【查询数据】的操作。通常在该模式下我们会进行读取、保存、批量替换字符、退出vi以及显示行号等操作

vi/vim命令

进入vi编辑器命令

命令 作用
vi filename 打开或者新建文件,并将光标置于第一行首
vi +n filename 打开文件,并将光标置于第n行首
vi + filename 打开文件,并将光标置于最后一行首
vi +/pattern filename 打开文件,并将光标置于第一个与pattern相匹配的行行首
vi -r filename 在上次正编辑时发生系统崩溃,恢复filename
vi filename......filename 打开多个文件,进行依次编译

移动光标的命令

命令 作用
[ctrl] + [f] 屏幕[向下]移动一页,相当于[Page Down]
[ctrl] + [b] 屏幕[向上]移动一页,相当于[Page Up]
[ctrl] + [d] 屏幕[向下]移动半页
[ctrl] + [u] 屏幕[向上]移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n<space> 按下数字再按下<space>,光标会移动到这一行的第n个字符
数字0或功能键[Home] 移动到这一行的最前面字符处
$或功能键[End] 移动到这一行的最后面字符
H (High)光标移动到这个屏幕最上面的一行的第一个字符处
M (Middle)光标移动到这个屏幕中央的一行的第一个字符处
L (Low)光标移动到这个屏幕最下面的一行的第一个字符处
G 移动到这个文件的最后一行
nG n为数字,移动到这个文件的第n行。可配合set nu使用
gg 移动到这个文件的第一行,相当于1G
n<Enter> n为数字,光标向下移动n行

查找与替换命令

命令 作用
/test 向光标之下寻找一个名称为 test 的字符串
?test 向光标之上寻找一个字符串名称为word的字符串
n 【重复前一个查找的操作】 如:前面执行/test向下查找test字符串,按下n会查找下一个名称为test的字符串
N 【反向进行】 如:前面执行/test后,按下N会向上查找名称为test的字符串

使用 /test 配合n和N同时使用,可以重复查找关键词
:n1,n2s/word1/word2/g | 在第n1行与n2行之间寻找word1字符串,并将该字符串替换为word2
:1,s/word1/word2/g** | **从第一行到最后一行寻找word1字符串并将该字符串替换为word2** **:1,s/word1/word2/gc | 从第一行到最后一行寻找word1字符串,并将该字符串换为word2,且在替换前显示提示字符给用户确认是否需要替换

删除复制与粘贴

命令 作用
x/X x为向后删除一个字符(相当于del),X为向前删除一个字符(相当于backspace)
nx 连续向后删除n个字符
dd 删除(带复制)光标所在的那一整行
ndd 删除光标所在的向下n行
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除光标所在处,到该行的最后一个字符
d0 删除光标所在处,到该行的最前面一个字符
yy 复制光标所在的那一行
nyy 复制光标所在的向下n行
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行末的所有数据
p或P p为将已复制的数据在光标下一行粘贴,P则为将已复制的数据粘贴在光标上一行
J 将光标所在行与下一行数据结合成一行
c 重复删除多个数据,例如向下删除10行,[10cj]
u 恢复前一个操作
[Ctrl] + r 重做上一个操作

退出vi编辑器命令

命令 作用
:q 退出,在文件内容没有被改变时使用
:q! 强制退出不保存,在改变文件后不想保存时使用
:w [filename] 相当于[另存为],将编辑的数据保存成一个新的文件
:r [filename] 在编辑的数据中,读入另一个文件的数据,即将[filename]文件内容加到光标所在行的后面
:n1,n2 w [filename] 将n1到n2的内容保存为 filename 文件
:wq 对vi编辑器中的文件进行保存并退出vi编辑器
:wq! 强制退出保存在对只读文件编写时使用。注意,编辑只读文件必须使用

vim环境的修改
:noh | 取消高亮
:set nu | 显示行号
:set nonu | 取消行号

案例练习

1. 请在 /tmp 这个目录下建立一个名为 vitest 的目录;

\color{#FF0000}{mkdir /tmp/vitest/}

2. 进入 vitest 这个目录当中

\color{#FF0000}{cd /tmp/vitest/}

3. 将/etc/man_db.conf复制到本目录下(或在线获取)

\color{#FF0000}{cp /etc/man_db.conf .}
\color{#FF0000}{wget http://linux.vbird.org/linux_basic/0310vi/man_db.conf}

4. 使用vi打开本目录下的 man_db.conf 文件,在 vi 中设置行号,移动到第43行,向右移动59个字符,请问你看到小括号内是哪个文字?

\color{#FF0000}{vim man_db.conf}
\color{#FF0000}{43G}
\color{#FF0000}{59 + <space>}

image.png

5. 移动到第一行,并且向下查找一下【gzip】这个字符串,请问它在第几行?

\color{#FF0000}{1G或者gg}
\color{#FF0000}{/gzip}
93行

image.png

6. 接着下来,要将29到41行之间的【小写man字符】改为【大写MAN字符】,并且一个一个是否要修改,如何执行命令?如果在确定过程中一直按【y】,结果会在最后一行出现改变了几个man?

\color{#FF0000}{:29,41/man/MAN/gc}
13个man

image.png

7. 修改完后,后悔了,如何恢复?

\color{#FF0000}{按【u】恢复到原始状态}

8. 复制66到71这6行的内容,并且粘贴到最后一行之后

\color{#FF0000}{:66,71 y 或者 66G 6yy}
\color{#FF0000}{【G】+【p】}

9. 113行到128行之间的开头为#符号的注释数据我不要了,如何删除

\color{#FF0000}{【113G】+ 【16d】 }

10. 将这个文件另存成一个 man.test.config 的文件名

\color{#FF0000}{:w man.test.config}

11. 去到第25行,并且删除15个字符,结果出现的第一个单词是什么?

\color{#FF0000}{【25G】+ 【15x】}
tree

12. 在第一行新增一行,该行内容输入【I am a student...】

\color{#FF0000}{【1G】}
\color{#FF0000}{【O】}
\color{#FF0000}{I am a student...}

13. 保存退出

\color{#FF0000}{:wq}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343