• [ Linux 长征路第四篇 ] 开发工具 vim的使用 gcc/g++的使用


    目录

    1.Linux下软件包管理器yum

    1.1 什么是软件包

    1.2如何安装软件

    1.3 如何卸载软件 

    2. vim使用

    2.1 vim的安装和配置

    2.2 vim的基本概念

    2.3 vim的基本操作

    3.  vim正常模式命令集

    3.1 插入模式

    3.2 命令模式下的文本批量化操作

    4. Linux编辑器 -gcc/g++使用

    4.1 gcc如何完成

    4.2  gcc 翻译过程

    4.2.1 预处理

    4.2.2  编译(生成汇编)

    4.2.3 汇编

    4.2.4 链接

    4.3 函数库

    4.3.1 函数库的分类

    补充:vim下批量化注释和去注释

    注释:

    去注释:


    1.Linux下软件包管理器yum

    在Linux下软件的安装,软件的卸载在Linux下该做呢?

    在centos 7中有三种安装方式:1.源码安装 2.rpm包安装 3.yum安装 

    1.1 什么是软件包

    • Linux下安装软件, 一个通常的办法是下载到程序的源代码(源码安装), 并进行编译, 得到可执行程序.
    • 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.(rpm安装)
    • 软件包和软件包管理器, 就好比 "App" "应用商店" 这样的关系.
    • yum(Yellow dog Updater, Modifified)Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.(yum安装)

    yum安装的好处:

    1、不用编译源码

    2、不用解决软件的依赖关系

    1.2如何安装软件

    通过 yum, 我们可以通过很简单的一条命令完成sl的安装(在root用户下执行)
    yum install sl
    yum 会自动找到都有哪些软件包需要下载 , 这时候敲 "y" 确认安装 .
    出现 "complete" 字样 , 说明安装完成 .
    注意事项:
    • 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
    • yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.

    yum使用举例

    在xshell输入sl可出现一个火车头。如果我们没有安装sl的话可以进行安装(切换成root用户):yum install sl

     

    通过这个例子我们知道如果要在Linux下安装什么软件,使用yum可以很简单。

    1.3 如何卸载软件 

    仍然使用一条指令,假设我们要删除刚刚删掉的sl软件(切换到root用户)

    yum remove ls

     

    2. vim使用

    2.1 vim的安装和配置

    vim的安装:切换到root账户下输入命令即可安装

    yum install -y vim

    vim的配置:安装好之后,大家可以复制下面链接输入到命令行,配置vim(自动补齐,高光,自动纠错等)

    curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

     下载完成后按照提示输入指定命令即可使vim配置生效!

    2.2 vim的基本概念

    vim是一个编辑器,它能用来写代码并且功能强大(多模式的编辑器)
    vim的三种模式 ( 其实有好多模式,目前掌握这 3 种即可 ), 分别是 命令模式 command mode )、
    入模式 Insert mode )和 底行模式 last line mode ),各模式的功能区分如下:

    正常/普通/命令模式(Normal mode)

    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

    插入模式(Insert mode)

    只有在 Insert mode 下,才可以做文字输入,按「 ESC 」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
    末行模式 (last line mode)
    文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim ,底行模式直接输入 :help vim-modes

    2.3 vim的基本操作

    如何进入vim,输入vim 及文件名称即可。就进入全屏幕编辑画面

    vim test.c

    当我们进入vim后,是处于命令模式,在命令模式中你在键盘输入一些字符是毫无效果的,要切换到插入模式才能输入文字

    命令模式切换至插入模式

    • 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
    • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
    • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字

    写完代码了再从插入模式切换至正常模式

    按一下「ESC 」键转到 [ 正常模式 ]

     写完代码之后想要退出vim该如何做呢?

    此时要从命令模式切换至底行模式:shift + ; 其实就是输入 :

    退出vim及保存文件,在底行模式中输入wq,也有不同的选项

    :w (保存当前文件)

    :wq ( 输入「 wq , 存盘并退出 vim)
    :q! ( 输入 q!, 不存盘强制退出 vim)

    退出后我们输入cat 文件名可以查看刚刚我们所写的代码

     

    3.  vim正常模式命令集

    3.1 插入模式

    • 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
    • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
    • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

    这个大家可自行验证 

    3.2 命令模式下的文本批量化操作

    • yy:复制当前行  nyy:复制多行
    • p :   粘贴
    • dd : 剪切(删除)当前行,ndd
    • u : 撤销
    • ctrl + r  :针对u操作再次进行撤销(恢复刚刚的撤销)
    • shift + g :G 光标快速定位到最后一行
    • gg :快速将光标定位到第一行
    • n + shift + g  : 光标快速定位到文本的第 n  行
    • shift + 4: $ 光标快速定位到文本行的末尾
    • shift + 6 :^ 光标快速定位到文本行的开头
    • w ,b :向后,向前在一行以单位为单位移动
    • h,j,k,l :光标向左,下,上,右移动
    • shift + ` : ~ 大小写快速切换
    • r + 替换字母:替换光标所在的字符 支持nr
    • shift + r :R替换模式,批量化替换
    • x :删除光标所在的字符,支持nx 批量化删除

    以上操作大家可自行验证

    4. Linux编辑器 -gcc/g++使用

    4.1 gcc如何完成

    格式 gcc [ 选项 ] 要编译的文件 [ 选项 ] [ 目标文件 ]

    我们刚才所写的test.c已经完成了,那我们如何进行编译呢?我们使用gcc 文件名。

    输入 ./a.out 执行结果

    gcc test.c -o mytest  //指定名称

      

    4.2  gcc 翻译过程

    在C语言中,我们知道一个程序要被执行要经过4个阶段。分别是预处理,编译,汇编,链接

    在VS下,我们无法直接查看每一个阶段所做的工作,我们只知道预处理可能做了宏替换,去注释等,在gcc编译器下,我们可以进行查看。

    4.2.1 预处理

    1.  预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
    2. 预处理指令是以#号开头的代码行。
    3. 实例: gcc –E hello.c –o hello.i
    4. 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
    5. 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序图像 小部件

    首先我们来写一部分代码,在Linux下查看一下预处理过程的结果 

      

    gcc -E test.c -o test.i

     -E :从现在开始进行程序的翻译,当预处理完成时,就停下来

       

    此时我们想要查看预处理的结果 vim打开test.c

      

     当我们进入test,i后 shift + g 直接闪现到最后一行发现 预处理结果确实进行了头文件的展开,宏替换,去注释,条件编译等等

      

    4.2.2  编译(生成汇编)

    在这个阶段中 ,gcc 首先要检查代码的规范性、是否有语法错误等 , 以确定代码的实际要做的工作 , 在检查无误后,gcc 把代码翻译成汇编语言。
    用户可以使用 “-S” 选项来进行查看 , 该选项只进行编译而不进行汇编 , 生成汇编代码
    预处理完成后想要在编译结束后停下来输入
    gcc -S test.i -o test.s

    -S:从现在开始进行程序的翻译,当我们编译完成后就停下来

      

    我们进入test.s发现代码行数已经变得非常少了,其实这已经变成了x86环境下的汇编指令

      

    4.2.3 汇编

    汇编阶段是把编译阶段生成的 “.s” 文件转成目标文件
    读者在此可使用选项 “-c” 就可看到汇编代码已转化为 “.o” 的二进制目标代码了
    gcc -c test.s -o test.o

    -c :从现在开始进行程序的翻译,当我们汇编完成后就停下来

    此时我们进入test.o发现已经变成了二进制文件

      

    4.2.4 链接

    在成功编译之后 , 就进入了链接阶段。
    gcc test.o -o test

      

    4.3 函数库

    • 我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而 没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
    • 最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到 系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函“printf”,而这也就是链接的作用

    4.3.1 函数库的分类

    函数库一般分为静态库动态库两种

    静态库:

    静态库是指编译链接时 , 把库文件的代码全部加入到可执行文件中 , 因此生成的文件比较大 , 但在运行时也就不再需要库文件了。其后缀名一般为“.a”
    动态库:
    动态库与之相反 , 在编译链接时并没有把库文件的代码加入到可执行文件中 , 而是在程序执行时由运行时链接文件加载库, 这样可以节省系统的开销。动态库一般后缀名为 “.so”, 如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后 ,gcc 就可以生成可执行文件 , 如下所示。 gcc hello.o –o hello
    gcc 默认生成的二进制程序,是动态链接的

    补充:vim下批量化注释和去注释

    注释:

    小写,ctrl + v ,h j k l 选中区域, 切换成大写 ,输入 I (艾)  , // , 按esc

    去注释:

    小写,ctrl + v ,h j k l 选中区域(注释区域) ,按d

    (本篇完)
  • 相关阅读:
    【C++面向对象】8. 继承
    Java项目:SSM的食堂点餐系统
    Dense embedding model 和 sparse embedding model 对比
    长尾关键词优化 网站是卖大闸蟹的 怎么用长尾关键词优化网站
    Python 常用基础模块(四):sys模块
    【玩转Redhat Linux 8.0系列 | 从命令行管理文件(二)】
    泰山OFFICE技术讲座:上标研究2:上标的大小
    ESP8266-Arduino编程实例-ADC
    arthas诊断windows服务模式运行的Java进程
    许战海战略文库|隆基绿能,光伏龙头如何走出战略无人区?
  • 原文地址:https://blog.csdn.net/qq_58325487/article/details/126697372