• 【看表情包学Linux】软件包管理器 yum | Vim 编辑器介绍 | Vim 文本批量化操作


      🤣 爆笑教程 👉 《看表情包学Linux》👈 猛戳订阅  🔥

    💭 写在前面

    本章首先介绍 Linux 软件包管理器 yum,学习如何在 Linux 上安装和卸载软件。最后我们讲解一下 vim 编辑器,我采会用实际操作去讲解 vim 的文本操作。对于 vim 的这些操作按键,不需要死记,用的多了自然就会熟。默认的 vim 配置简陋不堪,没有代码提示、没有缩进甚至没有行号,但至少还是有语法高亮的。在这一章我们主要去学习 vim 的基础操作,对于 vim 的配置我打算放到下一章去讲。

     本篇博客全站热榜排名:未上榜


    Ⅰ.  Linux 软件包管理器 yum

    0x00 引入:我想安装个软件

    Windows 下我们是如何装软件的?比如说我想下一款高清视频播放器:

    我们可以百度上搜索,然后进入官网下载安装包,之后打开安装包进行安装,

    我们顶多要做的就是勾勾选选,设置一下安装到哪个盘,总体来说还是非常容易的。

     (当然如果你装软件去什么 xx 软件园,当我没说)

     那在 Linux 下安装软件,会像 Windows 下这么方便吗?答案是不会!

    在 Linux 下安装软件,最通常的方式是去下载程序的源代码并进行编译,从而得到可执行程序。

    " 猪吃饲料,我们吃猪,太麻烦!直接吃饲料! "

     并且 Linux 没有图形化界面,这不强人所难么,整个安装过程堪比盲人摸象。

    正是因为太麻烦,所以有些人就把一些常用的软件提前编译好并做成软件包,放到服务器上。

    你只需要通过包管理器,就可以轻而易举地获取到这个编译好的软件包,直接无脑安装。

    0x01 安装软件的方式

    \textrm{Centos 7} 中安装软件分为三种方式:  源码安装   rpm 包安装    yum 安装

    💭 源码安装:

    源码安装就相当于,我把项目源代码给用户,让用户自己去编译去……

     额,这合理吗?下个 QQ 还要装个 VS 编译才能用?!

    这种源码方式安装在 Windows 下是绝对不可能存在的,但是在 Linux 下是有的,

    比如我想下载个 \textrm{python3.7} ,把源码下载下来自己安装自己编。

    💭 rpm 包安装:

    你可以理解为 Linux 下的安装包,只是下载好 rpm 包后想安装还需要用 rpm 命令,

    比较麻烦,而且 rpm 包安装不会帮你解决依赖关系(有些软件是需要依赖的)

    换句话说就是 —— 你下一个软件,就真的只有一个软件,依赖什么软件完全需要你自己去解决。

    啊这,这么实诚的么?这 rpm 包是真的雷人啊……

    而我们下载QQ一键就可以安装,那是因为腾讯已经帮你把需要的东西打包好了,

    也就不需要你去解决依赖关系了,但是 Linux 下没有人直接做这样得事情。

    💭 yum 安装:

    我们刚才讲的安装方式都不简单啊。

    如果只有源码和 rpm 包这两种安装方式,就连开发者用起来都头大,那更别说用户了。

    于是 Linux 就推出了一个简单到人直呼 ez 的集成化安装方案 —— yum 安装。

    yum 安装最大的好处显而易见,不用编译源码,且不用解决软件的依赖关系。

    0x02 试着安装一款软件

     有一个叫 sl 的小工具,这个工具是可以在命令行跑 "火车头" 的软件。

    在大家的系统中默认情况下是没有这个软件的,现在正好可以来试试用 yum 安装:

    # yum install sl

     显示 Complete! 即安装成功,此时我们输入 sl 看看效果如何:

     (呼啸而过.jpg)

    由此可见,用 yum 安装软件非常滴简单,下面我们来隆重讲解一下 yum 

    0x03 yum 指令

     我们要安装别人的软件,需要做的准备工作:

    ① 需要别人先把代码给我编译成可执行程序。

    ② 需要有人将编好的软件,放在用户能下载的地方(官網,應用程式商店)

    在 Linux 也是一样的!以手机应用市场 APP 为例:

    ❓ 思考:你手机上的 APP 是属于客户端还是服务器?

    💡 手机上的 APP 实际上是客户端,而不是服务器。云服务器相信大家并不陌生,我们所用的 XShell 其实就是一个客户端,我们登陆的是远端的服务器。

    🔺 总结:yum 就类似于手机上的应用市场APP。

    既然要安装软件,我们得知道软件的名字是什么,如果我们不知道软件叫什么那么自然也没法装。

    这就是为什么手机应用市场有应用推荐这个功能,按类别去给你推荐软件供你下载。

    然而 Linux 下我们可以通过 yum list 指令去执行类似于手机应用市场的 "软件推荐" 功能:

    yum list

    0x04 卸载软件 yum remove

     yum 既然能安装软件,自然也是能卸载软件的。

    # yum remove [目标]

    0x05 yum 源

     yum 在下载时是怎么知道去哪里搜的呢?

    因为 /etc/yum.repos.d 目录下存有配置文件:

    不是所有人的 Linux 上面的 yum 源都是国内的链接。

    如果你不是国内的,或者发现安装软件特别慢,建议大家更新一下 yum 源。

    🔍 百度搜索:Centos7 如何设置国内 yum 源。

     注意,做任何配置,坚决不要先删除,一定是先备份!

    0x06 文件上载工具推荐:lrzsz

     Irzsz:一款可以轻松地将 Window 的文件上载到 Linux 的神器。 

    如果你想把 Windows 下的东西传到 Linux 下,有了这个工具就可以直接拖拽!

     Ⅱ. Vim 编辑器

    0x00 什么是 Vim?

     👈 这是个什么玩意? vim 是什么?

    它是一个编辑器!只能用来写代码,编译 vim 也做不到,有其他工具帮我们做。

    ❓ 既然只能用来写代码,那我们为什么不用 nano 记事本呢,不都一样吗?

    当然不一样,vim 功能强大,是一个多模式的编辑器。因为过于强大,学习成本固然较高。

    我们之去学习它的一些常用的功能,一些边边角角的功能以后可以慢慢学习。

    你可以输入 vim  确认一下你有没有安装过 vim,若显示  bash: vim: command not found

    那就说明还没有安装 vim,我们用刚刚学习的 yum 安装一下即可:

    # yum install -y vim

    0x01 vim 的使用

    ❓ 为什么要学 vim?

    vim 是一个用来快速的解决问题、迅速查阅的一个非常好的工具。

    有时候,需要我们在生产环境下,需要你快速的定位问题,甚至需要你快速的修改代码!

    vim 实际上是非常职业化的工具,你不懂其实也不影响开发,但是你懂,就是个如虎添翼的东西。

    我们先创建一个 mytest.c 源文件:

    $ touch mytest.c

    随后输入 vim 跟上文件名,就可以用 vim 编辑器打开该文件了:

    $ vim mytest.c

    0x02 默认模式、底行模式和插入模式

    进入之后,此时你会发现是输入不了任何东西的,似乎没有反应:

    因为第一次打开 vim 时的命令模式为 "默认模式"

    如果我们现在什么都没干,想退出 vim,我们可以按下 shift + 冒号 ,此时:

    此时该模式我们称之为 "底行模式",此时如果你想退出 vim,在该模式下按一个 q 即可。

    由于此时什么都没有写,我们按 q 退出。如果写了东西并且想保存并退出,我们可以按 wq

    不过话又说回来了,我们刚才进去 vim 之后时输入不了任何东西的,这是因为处于默认模式。

    不乏一些新手首次使用时,在不看任何 "攻略" 的情况下,随便按按键,可以 "侥幸" 打出字。

    那是因为按到了 i 这个按键,进入了 "插入模式" ,当我们按下 i 按键后左下角会显示  {\color{Blue} \textrm{- insert -}}  

    💭 操作:此时我们就可以正常打字了,我们来写一个经典的 Hello 程序测试一下效果:

     写好代码后我们想退出,但是输入冒号却没有效果,而是尴尬的打出了一个冒号。

    这是因为我们处在了插入模式下,你任何输入的东西都会以 insert 的形式出现在界面上。

    📌 注意事项:不仅仅 i 可以进入插入模式,还有 a,可以自己去试试。

    a 进入插入模式后初始光标位置为第二个字符,而 o 进入插入模式后初始光标在第二行。

    如果想退出,我们要输入键盘上的 Esc 按键 ,此时再按冒号就可以回到底行模式:

    当然,如果你想从底行模式再回到命令模式,也是使用 Esc 就可以回去。

    退出去之后我们来 cat 一下看看我们刚刚写的内容:

    🔺 总结:任何模式想回到命令模式,无脑 Esc 即可。

    0x03 来自程序员的对于 Macbook TouchBar 的吐槽

     说到 vim 的 Esc,这里讲一个比较有意思的故事: 

    Macbook Pro 当年刚退出 Touch Bar 时,键盘第一行的所有按键(Esc、F1~F12……)

    都是在 touch bar 内展现的:

    然而当时有些程序员和专业人士就抱怨 —— 需要经常按 Esc 键,而 Esc 键在 Touch Bar 上:

     按上去的手感极差!就像是在敲木地板一样,又要经常按 Esc,就更加地难以忍受了。

    这也使其成为了 Touch Bar 最大的缺点之一,苹果听取了顾客的意见并作出了改变。

    于是新版的 Macbook Pro 将 Esc 键单独设计为实体的:

    估计苹果的程序员自己用 vim 的时候,自己都不爽了 2333

    Ⅲ. Vim 文本批量化操作

    0x00 复制和粘贴(yy & p)

    指令操作
    yy复制光标指定的当前行内容
    p

    粘贴 yy 复制的内容,默认粘贴到当前行后面(可光标指定)

     在文本操作的时候我们可能会需要对文本进行批量化操作,比如删除、复制粘贴等功能,

    这些在插入模式下是比较难做到的,我们一般会在命令模式下进行文本批量化操作。

    💭 操作演示:文本的复制和粘贴,如果我们想复制下面的 printf 代码,我们可以:

    在光标所在行 yy 进行复制,随后你可以把光标移到你想粘贴的位置按 p 进行粘贴,

    直接按 p 默认在 yy 复制行的下一行粘贴。你按几次 p 就会粘贴几次。

    0x01 批量化复制和粘贴(nyy & np)

    指令操作
    [n] yy复制光标指定的当前行(包括当前行以内的)n 行内容
    [n] p

    粘贴 n 份 yy 复制的内容,默认粘贴到当前行后面(可光标指定)

    ❓ 思考:如果我想粘贴 100 次,我难道要按100次 p 吗?

    王曰 —— dark♂不必 !当然不用,我们可以使用 批量化粘贴 的功能:

    💭 操作演示:此时输入如果想粘贴 100 份,我们可以输入 100p

    对应的,还有 批量化复制 的功能,如果我们想让这两行复制:

    我们可以光标选中第一个 printf 并输入 2yy,此时就复制了包括它本身以内的 2 行内容。

    此时我们在 p 一下,我们就可以把这两行粘贴出来了:

    0x02 剪贴操作(dd & p)

    指令操作
    dd剪贴光标指定行内容
    [n] dd

    剪贴光标指定行(包括当前行)的 n 行内容

    💭 操作演示:printf 剪贴到 return 0 后面

    值得一提的是,dd 也可以当删除去使用,你只要不 p 他就等于是删除的效果了。

    0x03 撤销操作和收回撤销(u & Ctrl+R)

    指令操作
    u撤销刚刚的操作
    Ctrl + R

    对撤销进行撤销(收回 u 撤销操作)

    我删着删着后悔了怎么办?也就是我们经常喜欢用的 Ctrl + Z 撤销!vim 下是什么呢?

    💭 操作演示:u 撤销

     诶,这个时候我又后悔了,我想收回刚才的 u 撤销,怎么办? Ctrl + R

     

    当然,你再 Ctrl + R 就没用了,会显示  Already at newest change 

    你需要回到刚才的撤销操作,你可以再 u 回去,此时才能 Ctrl + R,

    也就是 对于你的最近两次的误操作,你可以使用 u Ctrl + R 在两个操作之间来回跳转。

    0x04 光标跳转(gg & shift+gg & n+shift+gg)

    指令操作

    shift + g

    光标快速定位到文本末尾
    gg光标快速定位到文本的最开始
    [n] shift + g将光标快速定位到文本的任意 (n) 行

      为了方便我们讲解,我们先创建一个场景大文本的场景。

    我想要我的文本扩增到十万行,我们先产出十万行的 "哈哈哈哈哈哈" :

    在 Windows 下你会怎么做?不断地 CV……不断地 CV?

    而在 Linux 中你只需要 yy100000,再 p 一下即可瞬间完成:

    当文本一旦大了,我想让光标快速定位到文本的最尾部,该如何操作?

    💭 操作演示:

    ① shift + g 跳转至文本最后一行

    ②  gg 跳转至文本第一行首位置

    ③ 如果我想定位到第 12345 行呢?12345 + shift + g 即可!

     如果想让光标跳到当前所在的文本行开头呢?

    也就是我们在 Windows 下经常使用的 End 键:

    指令操作
    shift + $光标快速定位到文本行的末尾(我们称 $ 为 "锚点" )
    shift + ^光标快速定位到文本行的开始
    w / b以单词为单位移动(warp 与 back)

    💭 操作演示:单行光标移动操作

    0x05 方向键(HJKL)

    玩到这里相信你也发现了,我们是可以通过键盘上的方向键去进行光标移动的。

    但是我们是不太推荐用上下左右键去进行光标移动的,我们建议用 "HJKL" 

    指令操作
    h
    j
    k
    l

    ❓ 为什么建议使用 HJKL 而不使用我们一直习惯的 ↑ ↓ ← → 呢?

    💡 因为我们会学一些组合命令,比如批量化注释,它只能支持用 HJKL。

    至于为什么 vim 它的上下左右是这几个按键呢?

    老式键盘是没有上下左右键的,以前就是那 HJKL 充当 上下左右键的:

    这样的上下左右移动方式好奇怪啊,不是所见即所得的 ↑ ↓ ← → ,但我们可以这么记:

    (可以说是非常形象了)

    0x06 一些修改和替换操作(shift~ & r & nr)

    指令操作
    shift + ~大小写快速切换
    r替换光标所在位置的字符
    [n] r替换光标所在位置开始的 n 个字符

     我们现在想让这些字母大小写互换:

    按住 shift 不动 + 波浪号 ~  即可将光标位置字符进行大小写的转换。

    💭 操作演示:shift + ~

    现在我们又想让 KavaScript 改成 JavaScript,我不想删掉 K 之后敲上 J,我想直接覆盖修改:

    先输入一个 r,然后再输入你要替换的字符(这里是J),此时就可以做到修改。

    💭 操作演示:r 修改

    我们甚至还可以批量化修改,在 r 前加上数字。

    比如我们想把 JavaScript 改成 XXXXXXript,J 光标处按 6rX 即可:

    (我们这里没有提批量化替换,因为我们下面要介绍一种专门用来替换的模式:Replace)

    0x07 replace 模式

    输入 shift + r 进入 replace 模式:

    进入 replace 模式后,光标所在处直接输入即可替换,你的所有输入的都会直接替换。

    这非常类似于 Windows 中恼人的 Insert 键,一些不知道的人总会莫名其妙按到,然后百度问。

    💭 操作演示:replace 模式

    0x08 删除和批量化删除(x & nx)

    指令操作
    x删除当前光标位置字符
    [n] r删除当前光标位置开始的后n个字符

    如果我们要删除,我们可以按 X,如果要批量删除可以输入 nX(底行模式下):

    💭 操作演示:一次性删掉一个 Hello

    1. 📌 [ 笔者 ]   王亦优
    2. 📃 [ 更新 ]   2022.7.26
    3. ❌ [ 勘误 ]   /* 暂无 */
    4. 📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
    5. 本人也很想知道这些错误,恳望读者批评指正!

    📜 参考资料 

    C++reference[EB/OL]. []. http://www.cplusplus.com/reference/.

    Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

    百度百科[EB/OL]. []. https://baike.baidu.com/.

    比特科技. Linux[EB/OL]. 2021[2021.8.31 xi

  • 相关阅读:
    大一新生HTML期末作业 学生个人网页设计作业 HTML5响应式个人简历网站模板 web前端网页制作课作业
    【以太网硬件十八】网卡是什么?
    【开发者必看】【push kit】推送服务典型问题合集2
    Flink SQL DataGen Connector 示例
    第九章:面向对象编程(高级部分)
    开关按钮Switch
    bootstrap系列-1.简单的Demo
    面试题:Kafka 为什么会丢消息?
    Android源码学习---init
    【Linux系统管理】07 软件包管理 & 08 用户和权限
  • 原文地址:https://blog.csdn.net/weixin_50502862/article/details/125751276