Linux第六章之vim与gcc使用

news2024/12/23 9:32:40

 一、Linux编辑器-vim使用

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。

1.1 vim的基本概念 

命令模式(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

1.2 vim的基本操作 

进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:
 

$ vim test.c
不过有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文
字。
  • [正常模式]切换至[插入模式]
  • 输入a
  • 输入i
  • 输入o
  • [插入模式]切换至[正常模式] 

目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下「ESC」键转到[正常模式]再删除文字。当然,也可以直接删除。 

  • [正常模式]切换至[末行模式]
「shift + ;」, 其实就是输入「:」
  • 退出vim及保存文件,在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如:
  • : w (保存当前文件)
  • : wq (输入「wq」,存盘并退出vim)
  • : q! (输入q!,不存盘强制退出vim)

1.3vim正常模式命令集 

 1.4vim末行模式命令集

在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。

 1.5vim操作总结

三种模式:

  • 正常模式
  • 插入模式
  • 底行模式

 

vim操作:
打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作。 

1.6简单vim配置

1.6.1自动配置(推荐):

GitHub - askunix/VimForCpp: VIM一键配置C/C++开发环境,可自动下载各类插件。

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

1.6.2配置文件的位置

  • 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
  • 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。
  • 切换用户成为自己执行su ,进入自己的主工作目录,执行 cd ~
  • 打开自己目录下的.vimrc文件,执行 vim .vimrc

1.6.3常用配置选项,用来测试

  • 设置语法高亮: syntax on
  • 显示行号: set nu
  • 设置缩进的空格数为4: set shiftwidth=4 

二、Linux编译器-gcc/g++使用

2.1背景知识

1. 预处理(进行宏替换)
2. 编译(生成汇编)
3. 汇编(生成机器可识别代码)
4. 连接(生成可执行文件或库文件)

2.2gcc如何完成

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

2.3预处理(进行宏替换)

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

2.4编译(生成汇编)

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

2.5汇编(生成机器可识别代码)

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

2.6连接(生成可执行文件或库文件)

  • 在成功编译之后,就进入了链接阶段。
  • 实例: gcc hello.o –o hello

2.7函数库

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

2.8函数库一般分为静态库和动态库

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

2.9 gcc选项 

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
  • -S 编译到汇编语言不进行汇编和链接
  • -c 编译到目标代码
  • -o 文件输出到 文件
  • -static 此选项对生成的文件采用静态链接
  • -g 生成调试信息。GNU 调试器可利用该信息。
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
  • -O0
  • -O1
  • -O2
  • -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
  • -w 不生成任何警告信息。
  • -Wall 生成所有警告信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据分享】1999—2021年地级市各类交通工具的客货运量和拥有量数据(Shp/Excel格式)

1999-2021年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、地方一般公共预算收支状况、工业企业数、固定资产投资和对外经济贸易数据、科技创新指标数据、劳动力就业及…

软考中级信息安全工程师2023下半年报名时间及报名入口官网

软考中级信息安全工程师2023下半年考试时间: 2023年下半年软考中级信息安全工程师的考试时间为11月4日、5日。考试时间在全国各地一致,建议考生提前备考。共分两科,第一科基础知识考试具体时间为9:00-11:30;第二科应用技术考试具…

【Android Framework系列】第9章 AMS之Hook实现登录页跳转

1 前言 前面章节我们学习了【Android Framework系列】第5章 AMS启动流程和【Android Framework系列】第6章 AMS原理之Launcher启动流程,大概了解了AMS的原理及启动流程,这一章节我们通过反射和动态代理对不同Android版本下的AMS进行Hook,实现…

Ansible —— playbook 剧本

Ansible —— playbook 剧本 一、playbook的概述1.playbook简介2.什么是Ansible playbook剧本?3.Ansible playbook剧本的特点4.如何使用Ansible playbook剧本?5.playbooks 本身由以下各部分组成 二、playbook示例1.运行playbook2.定义、引用变量3.指定远…

低代码PAAS平台源码,采用对象式和勾选式实现企业应用程序开发

管理后台低代码PaaS平台是一款基于 Salesforce Platform 的开源替代方案,旨在为企业提供高效、灵活、易于使用的低代码开发平台。低代码PaaS平台的10大核心引擎功能:1.建模引擎 2.移动引擎 3.流程引擎 4.页面引擎 5.报表引擎 6.安全引擎 7.API引擎 8.应用…

C++多线程环境下的单例类对象创建

使用C无锁编程实现多线程下的单例模式 贺志国 2023.8.1 一、尺寸较小的类单例对象创建 如果待创建的单例类SingletonForMultithread内包含的成员变量较少,整个类占用的内存空间较小,则可以使用如下方法来创建单例对象(如果类的尺寸较大则不…

【Linux命令200例】用rcp复制远程文件到本地

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜…

再添新证书!数据库云管平台 zCloud 与 OceanBase 完成产品兼容互认证

近日,云和恩墨 zCloud 数据库云管平台(简称:zCloud)与北京奥星贝斯科技有限公司(简称:OceanBase)完成产品兼容性互认证。本次测试结果表明:zCloud 具备对 OceanBase 的纳管、监控告警…

工业机器视觉系统开发流程简介

工业机器视觉系统的开发过程主要包括以下几个阶段: 需求分析和系统设计:与用户合作,明确系统的功能和性能需求,并设计系统的整体架构。 软、硬件选型:根据需求分析结果,选择适合的软、硬件设备&#xff0…

NASA和uAvionix在AAM测试场部署SkyLine C2指挥和控制服务

蒙大拿州比格福克和弗吉尼亚州汉普顿2023年07月28日——美国宇航局和uAvionix签署了一项太空法案协议,为城市环境中的无人机系统 (UAS)开发先进的超视距(BVLOS)指挥和控制(C2)技术。根据协议,NASA将与uAvionix合作,利用基于互联网的基础设施和…

qiankun框架vue3项目,子应用什么情况下会卸载

1.手动卸载 2.路由不匹配的时候,会自动卸载

STM32基础入门学习笔记:基础知识和理论 开发环境建立

文件目录: 一:基础知识和理论 1.ARM简介 2.STM32简介 3.STM32命名规范 4.STM32内部功能* 5.STM32接口定义 二:开发环境建立 1.开发板简介 2.ISP程序下载 3.最小系统电路 4.KEIL的安装 5.工程简介与调试流程 6.固件库的安装 7.编…

K3s vs K8s:轻量级对决 - 探索替代方案

在当今云原生应用的领域中,Kubernetes(简称K8s)已经成为了无可争议的领导者。然而,随着应用规模的不断增长,一些开发者和运维人员开始感受到了K8s的重量级特性所带来的挑战。为了解决这一问题,一个名为K3s的…

【数据结构与算法】单链表反转、双链表反转(含相关题型)

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 链表反转 1. 单链表反转 实现2. 双链表反转 实…

IT技术中最被人忽略的网络安全方向~超乎你的想象~

正文 听说网络工程师已成为IT人的最底层了?标题的问题是知乎上很多网工在提问的问题之一,总是在说网工行业已经不行了、网工成为最低成、网工已经没落了…… 今天针对这些问题,我们先明确一个看法: 这些都是对网工行业的误解。 …

Vue(五)git

Vue 三十二、git1.工具引入2.本地仓库3.远程仓库4.两人协作(1)非冲突(2)冲突(3)可视化 5.分支6.vue项目git注意 三十三、三十四、三十五、 三十二、git 1.工具引入 项目内容合并 传统:U盘&…

Twitter 劲敌 Threads,“魔改”了哪些 Python 技术栈?

Meta 创始人 Mark Zuckerberg 昨天在 Threads 上宣布,周三正式上线的 Threads 注册量已突破三千万。 Threads 是一个基本文本的社交应用,由 Instagram 团队开发。虽然它在功能上还无法真正取代 Twitter,但目前看来事实上已是 Twitter 的替代方…

前端学习--vue2--插槽

写在前面: 这个用法是在使用组件和创建组件中 文章目录 介绍简单使用多个插槽省写默认/后备内容作用域插槽常用实例Element-ui的el-table 废弃用法slot attributeslot-scope attribute 介绍 我们在定义一些组件的时候,由于组件内文字想要自定义&#…

minio-分布式文件存储系统

minio-分布式文件存储系统 minio的简介 MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置…

手机图片怎么转换成pdf?掌握这几种转换方法就够了

手机图片怎么转换成PDF?现在,随着手机拍照功能的不断升级,手机摄影已成为人们记录生活、工作的一种重要方式。但是,有时候需要将手机拍摄的图片转换成PDF,以便更好地编辑和分享。那么,如何将手机图片转换成…