Linux工具【1】(编辑器vim、编译器gcc与g++)

news2024/9/20 20:49:30

vim详解

  • 引言
  • vim
    • Vim的三种模式及模式切换
    • 普通模式下操作
    • 底行模式下操作
  • gcc与g++
    • gcc的使用(g++类似)
      • 预编译
      • 编译
      • 汇编
      • 链接
      • 静态库与动态库
  • 总结

引言

vim(vi improved)编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳转、语法高亮等方便编程的功能特别丰富,在程序员中被广泛使用。
vim 可以说是程序开发者的一项很好用的工具,它更是一个程序开发工具而不只是文字处理软件。

在这里插入图片描述
在vim中编辑代码可以使程序员的手指集中在键盘中央,从而提高效率。

在vim中编辑代码后,要执行代码就需要编译器,在Linux中使用gccg++编译C与C++代码

vim

为方便演示,我们touch一个test_vim.c文件,并使用vim 文件名以vim方式打开这个文件
在这里插入图片描述

Vim的三种模式及模式切换

vim编辑器有许多模式,在这里只介绍三种常用的模式:命令(普通)模式Normal mode、底行模式Last line mode、插入模式Insert mode

在这里插入图片描述
命令模式(Normal mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入到Insert mode或者到 last line mode下:

使用vim 文件名 打开后的状态就是命令(正常)模式:
在这里插入图片描述

插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,是使用的最频繁的编辑模式。在命令模式下按i即可进入该模式,按Esc键可回到命令行模式:
在这里插入图片描述
这个模式中可以正常编辑代码,就不赘述了。

末行模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下按: 即可进入该模式,按Esc键可回到普通模式:
在这里插入图片描述

普通模式下操作

由于空文件下无法观察普通模式的操作,所以先使用插入模式在test_vim.c文件中输入一些内容
在这里插入图片描述

常用命令:

  1. 移动光标
    小写英文字母hjkl,分别控制光标左、下、上、右移一格:
    G:移动到文章的最后
    $ :移动到光标所在行的“行尾”
    ^:移动到光标所在行的“行首”
    w:光标跳到下个字的开头
    e:光标跳到下个字的字尾
    b:光标回到上个字的开头
    #l:光标移到该行的第#个位置
    gg:进入到文本开始
    ctrl + b:屏幕向后移动一页
    ctrl + f:屏幕向前移动一页
    ctrl + u:屏幕向后移动半页
    ctrl + d:屏幕向前移动半页
    (移动光标的命令就不举例使用了)

  2. 删除文字
    x:每按一次,删除光标所在位置的一个字符
    #x:表示删除光标所在位置的后(包含自己在内)#个字符
    X:每按一次,删除光标所在位置的前一个字符
    #X:表示删除光标所在位置的前#个字符
    dd:删除光标所在行
    #dd:从光标所在行开始删除#行
    在这里插入图片描述

  3. 复制
    yw:将光标所在之处到字尾的字符复制到缓冲区中
    #yw:复制#个字到缓冲区
    yy:复制光标所在行到缓冲区。
    #yy:表示拷贝从光标所在行向下#行文字
    p:将缓冲区内的字符贴到光标所在位置
    需要注意的是:所有与y有关的复制命令都必须与p配合才能完成复制与粘贴功能
    在这里插入图片描述

  4. 替换
    r:替换光标所在处的字符。
    R:替换光标所到之处的字符,直到按下Esc键为止。
    在这里插入图片描述

  5. 撤销上一次操作
    u:回到上一个操作,按多次可以执行多次回复
    ctrl + r: 撤销的恢复

  6. 更改
    cw:更改光标所在处的字到字尾处
    c#w:表示更改#个字符

  7. 跳至指定的行
    ctrl+g: 列出光标所在行的行号
    #G:表示移动光标至文章的第#行行首

底行模式下操作

常用命令:

  1. 列出行号
    set nu: 在文件中的每一行前面列出行号。
    (我使用的vim环境已经是配置过的,所以会默认显示行号)

  2. 跳到文件中的某一行
    #:跳到第#行

  3. 查找字符
    /关键字: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n往后寻找
    ?关键字:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n往前寻找

  4. 保存与退出
    w: 可以将文件保存起来,使用强制保存
    q:退出vim,后加!强制离开vim
    wq:保存并退出

gcc与g++

在之前的C语言部分,我们知道我们所写的C代码要经过一系列处理为可执行程序后才能被系统执行,其中包括预编译、编译、汇编、链接

在Windows环境下我们经常使用Visual Studio、DevC、VC等开发环境环境进行代码的编写、编译与运行。而在Linux下我们使用vim编写代码后,就使用gccg++编译C与C++代码

gcc的使用(g++类似)

首先创建一个test_gcc.c文件,并使用vim在其中编辑一段代码:
在这里插入图片描述

预编译

在预编译中会进行头文件包含、宏替换、注释删除、条件编译等,在Linux中执行完预编译后会生成一个.i文件

使用 gcc -E 依赖文件 -o 目标.i文件 就可以实现将原文件只处理到预编译结束,生成.i文件为止
在这里插入图片描述

我们可以使用vim打开这个test_gcc.i文件查看预编译后的代码:
在这里插入图片描述
可以看到,与之前的代码对比,将stdio.h文件拷贝到这里,并删除了注释,将M替换为100。

编译

编译即将预编译后的文件转化为汇编代码,在这之前还需要做词法分析、语法分析、语义分析、代码优化等的行为,在这过程中将会检查代码中的错误(即编译错误)。编译结束后会生成一个.s文件

使用gcc -S 原文件 -o 目标.s文件 就可以实现将原文件只处理到编译结束,生成.s文件中止,(原文件可以为.c文件,也可以是已经预编译后的.i文件)
在这里插入图片描述
当然我们也可以使用vim查看这个.s文件:
在这里插入图片描述

汇编

汇编即将之前生成的汇编代码生成目标代码(在这里就是机器可识别的二进制代码),这其中还要进行符号表的生成等(符号与其地址),之后会生成一个.o文件

使用 gcc -c 原文件 -o 目标.o文件 就可以将原文件处理到汇编结束,生成.o文件为止(原文件可以为之前的任意状态的文件)
在这里插入图片描述
我们当然也可以通过vim查看这个.o文件(但这并没有什么意义,因为完全看不懂,这里就不展示了)

链接

在进行完之前的处理后,就需要将我们写的文件与库,或者与我们写的其他文件链接起来,最终生成一个可执行程序。这个过程中会重新定位符表
在这里插入图片描述
使用 gcc 原文件 -o 可执行文件 就可以实现将之前任一状态的文件处理后进行链接从而生成一个可执行程序
在这里插入图片描述
./打开这个可执行程序就可以运行了:
在这里插入图片描述

需要注意的是,当编辑的代码中含有C99标准及以后的语法时,需要在编译时加上 -std=c99 选项

静态库与动态库

我们在文件中包含的stdio.h只是头文件,即声明。而这些函数的定义是在库中的,这也就是为什么我们需要将我们写的代码与库进行链接后才能生成可执行程序。 系统中有两种类型的库,即静态库与动态库

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中。所以生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为.a
动态库是在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为.so

gcc 在编译时默认使用动态库(可以通过file查看):
在这里插入图片描述
在这里插入图片描述

总结

到此,关于Linux工具中的编译器vim与编译器gcc/g++就介绍完了
在下一篇文章中将介绍其余的Linux工具,希望大家持续关注哦

如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出

如果本文对你有帮助,希望一键三连哦

希望与大家共同进步哦

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

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

相关文章

C# 定时器封装版

一、概述 在 Winform 等平台开发中,经常会用到定时器的功能,但项目定时器一旦写多了,容易使软件变卡,而且运行时间长了会造成软件的闪退,这个可能是内存溢出造成的,具体原因我也没去深究,另一个…

2023年五大团队任务管理跟踪软件排行榜揭晓

企业对高效生产力的需求让团队任务管理跟踪软件在现代商业环境中变得越来越重要,然而市场上存在众多的任务管理工具,选择合适的工具对于提高工作效率和实现组织目标至关重要。本文章将提供一个客观的团队任务管理跟踪软件排行榜,帮助读者根据…

springboot创建并配置环境(二) - 配置基础环境

文章目录 一、介绍二、配置系统属性和环境变量三、配置自定义属性命令行参数四、作为应用配置信息 一、介绍 在上一篇文章:springboot创建并配置环境(一) - 创建环境中我们探讨了springboot是如何根据当前应用程序类型去创建对应的环境实例的。接下来探讨如何去配置…

java上传和解压任意压缩包

java上传zip文件并解压读取_java上传压缩包解压_梓隽的博客-CSDN博客 添加依赖 <dependency><groupId>com.github.junrar</groupId><artifactId>junrar</artifactId><version>7.4.1</version></dependency><dependency&g…

无涯教程-jQuery - hide( speed, callback)方法函数

hide(speed&#xff0c;[callback])方法使用优美的动画隐藏所有匹配的元素&#xff0c;并在完成后触发可选的回调。 hide( speed, [callback] ) - 语法 selector.hide( speed, [callback] ); 这是此方法使用的所有参数的描述- speed - 代表三个预定义速度("slow…

四. 点云着色(真彩点云)方案

前面内容&#xff1a; 一. 器件选型心得&#xff08;系统设计&#xff09;--1_goldqiu的博客-CSDN博客 一. 器件选型心得&#xff08;系统设计&#xff09;--2_goldqiu的博客-CSDN博客 二. 多传感器时间同步方案&#xff08;时序闭环&#xff09;--1 三. 多传感器标定方案&…

【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】

4.权限管理模块开发 4.1 权限管理概述 4.1.1 权限管理的意义 后台管理系统中&#xff0c;通常需要控制不同的登录用户可以操作的内容。权限管理用于管理系统资源&#xff0c;分配用户菜单、资源权限&#xff0c;以及验证用户是否有访问资源权限。 4.1.2 RBAC权限设计模型 …

【微信小程序创作之路】- 小程序事件绑定、动态提示Toast、对话框 Modal

【微信小程序创作之路】- 小程序事件绑定、动态提示Toast、对话框 Modal 第六章 小程序事件绑定、动态提示Toast、对话框 Modal 文章目录 【微信小程序创作之路】- 小程序事件绑定、动态提示Toast、对话框 Modal前言一、事件是什么&#xff1f;二、小程序中常用事件三、事件传…

iOS--多线程原理

进程、线程与队列 进程的定义 进程是指在系统中正在运行的一个应用程序&#xff0c;如微信、支付宝app都是一个进程每个进程之间是独立的&#xff0c;每个进程均运行在齐专用的且受保护的内存 线程的定义 线程是进程的基本执行单元&#xff0c;一个进程的所有任务都在线程中…

【牛客网】链表的回文结构

思路1&#xff1a;找到中间节点&#xff0c;从中间节点向后反转链表 寻找链表的中间节点和反转链表的程序已经讲解过 寻找链表的中间节点&#xff1a;CSDN 反转链表&#xff1a;CSDN 然后从头节点和中间节点依次向后比较节点的值 &#x1f4d6;Note: 后半段链表反转后&#xff…

每天100w次登陆请求, 8G 内存该如何设置JVM参数?

一、新系统上线如何规划容量&#xff1f; 1.套路总结 任何新的业务系统在上线以前都需要去估算服务器配置和JVM的内存参数&#xff0c;这个容量与资源规划并不仅仅是系统架构师的随意估算的&#xff0c;需要根据系统所在业务场景去估算&#xff0c;推断出来一个系统运行模型&…

事后多重比较方法

一、案例介绍 由单因素方差分析案例中&#xff0c;为研究郁金对低张性缺氧小鼠存活时间的影响&#xff0c;将36只小鼠随机生成A、B以及 C 三组&#xff0c;每组12个&#xff0c;雌雄各半&#xff0c;分别以10g/kg、20g/kg、40g/kg三种不同剂量的郁金灌胃&#xff0c;各组小鼠均…

vue elementui table去掉滚动条与实现表格自动滚动且无滚动条

当table内容列过多时&#xff0c;可通过height属性设置table高度以固定table高度、固定表头&#xff0c;使table内容可以滚动。 现在需求是右侧滚动条不好看&#xff0c;需要去除滚动条&#xff0c;并隐藏滚动条所占列的位置。让他可以滚动但是不出现滚动条,不然即时隐藏了滚动…

运动蓝牙耳机有什么推荐的?这几款非常值得入手!

运动不仅能够锻炼身体&#xff0c;还能调节情绪释放压力&#xff0c;每到周末均会去徒步或骑行&#xff0c;路途上少不了音乐的相伴&#xff0c;运动期间会佩戴耳机聆听音乐&#xff0c;边聆听喜欢的音乐或有声读物&#xff0c;边享受当下的美景。骨传导耳机可以说在多种耳机当…

每天一个电商API分享:获得淘宝商品快递费用 API

在电商行业中&#xff0c;快递费用是一项不容忽视的重要开支。随着电商行业的不断发展壮大&#xff0c;越来越多的消费者选择在线购物&#xff0c;这就增加了电商企业的订单量和物流压力。在这个过程中&#xff0c;快递费用起到了承载和运输商品的重要作用。 首先&#xff0c;…

easyUI框架学习

文章目录 一、前言二、引入使用easyUI 三、用法3.1 Dialog&#xff08;对话框窗口&#xff09;3.1.1 示例13.1.2 示例2 3.2 Layout&#xff08;布局&#xff09;3.2.1 示例1——通过标签创建布局3.2.2 示例2—— 创建嵌套布局 3.3 DateBox&#xff08;日期输入框&#xff09;3.…

【Spring框架】Bean作用域和生命周期

目录 Bean作用域设置Bean作用域生命周期⽣命周期演示 Bean作用域 Bean作用域指的是Bean在Spring容器中的某种行为(单例、原型…)。 Bean的6种作用域 singleton&#xff1a;单例作⽤域prototype&#xff1a;原型作⽤域&#xff08;多例作⽤域&#xff09;request&#xff1a;请…

Jenkins 配置maven和jdk

前提:服务器已经安装maven和jdk 一、在Jenkins中添加全局变量 系统管理–>系统配置–>全局属性–>环境变量 添加三个全局变量 JAVA_HOME、MAVEN_HOME、PATH 二、配置maven 系统管理–>全局工具配置–>maven–>新增 新增配置 三、配置JDK 在系统管…

node.js旅游景点分享网站【纯干货分享,免费领取源码03796】

node.js旅游景点分享网站 摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。旅游景点分享网站设计&#xff0c;主要的模块包括查看后台首页、轮播图&#xff08;轮播图管理&#xff09;、网站公告…

QSlider 样式 Qt15.15.2 圆形滑块

在看文档的时候测试了一下demo&#xff0c;然后发现了一个有意思的东西&#xff0c;自定义滑块为带边框的圆形。 在设置的时候边框总是和预期的有点误差&#xff0c;后来发现了这样一个计算方式可以画一个比较标准的圆。&#xff08;ABCDEF在下方代码块内&#xff09; 滑块的…