vim编辑器和gcc/g++编辑器的使用讲解

news2024/11/16 19:59:01

vim编辑器

1 vim的基本概念

vim是Linux的编写代码的工具,是一种多模式的编辑器。
Linux中vim的常用的模式大概可以分为三种,分别是:
命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)

各种模式下的功能如下:

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

插入模式
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式

底行模式
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入

那么我们的新建的文件的默认模式是什么呢?
我们在xshell上一探究竟:
可以看到我新建的一个文件用vim打开后默认时插入模式
但是有些版本打开默认时命令模式
在这里插入图片描述
那么该如何切换各种模式呢?

从命令模式到插入模式,输入i即可
从插入模式到命令模式,按Esc键即可
从命令模式到底行模式,按shift键加;键即可
从底行模式到命令模式,按Esc键即可
插入模式和底行模式不能直接进行转换

2 vim的基本操作

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

vim test.c 创建test.c文件并且直接进入该文件的编辑

在这里插入图片描述
想要退出vim及保存文件,需要切换到底行模式,输入指定的指令:
但是编辑文件时为插入模式,所以先要按Esc键,然后shift+;
例如:

 w (保存当前文件)
 wq (输入「wq」,存盘并退出vim)
 q! (输入q!,不存盘强制退出vim)
 w!(强制保存)

在这里插入图片描述
输入wq后我们就可以保存并且退出了

3 vim命令模式命令集

3.1 光标的移动

在命令行模式下光标的移动可以通过各种指令来出来,Linux中不支持鼠标的使用

vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
按「G」:移动到文章的最后
按「 $ 」:移动到光标所在行的“行尾”
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,如:5l,56l
按[gg]:进入到文本开始
按[shift+g]:进入文本末端
按「ctrl」+「b」:屏幕往“后”移动一页
按「ctrl」+「f」:屏幕往“前”移动一页
按「ctrl」+「u」:屏幕往“后”移动半页
按「ctrl」+「d」:屏幕往“前”移动半页
3.2 删除文字
「x」:每按一次,删除光标所在位置的一个字符
「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
「dd」:删除光标所在行(可以作为剪切,dd后可以p粘贴)
「#dd」:从光标所在行开始删除#行
3.3 复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
3.4 替换
「r」:替换光标所在处的字符
「R」:替换光标所到之处的字符,直到按下「ESC」键为止
3.5 撤销
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
「ctrl + r」: 撤销的恢复,就是撤销上一次的撤销
3.6 更改
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改3个字
3.7 调至指定行

「ctrl」+「g」列出光标所在行的行号。
「#G」:例如,「15G」,表示移动光标至文章的第15行行首

4 vim底行模式命令集

4.1 列出行号
「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号

例如:
在这里插入图片描述

4.2 跳到文件的某一行
「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行

例如:
输入5后光标跳转到第5行
在这里插入图片描述

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

二者的区别就是一个按n往前找,一个按n往后找
例如:
在这里插入图片描述

4.4 保存退出
 w (保存当前文件)
 wq (输入「wq」,存盘并退出vim)
 q! (输入q!,不存盘强制退出vim)
 w!(强制保存)

gcc/g++编辑器

gcc和g++两个编译器分别用于c语言和c++的编译

1 gcc如何完成

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

例如:

在这里插入图片描述

2 gcc的三个阶段

2.1 预处理(进行宏替换)

有一个点大家要记住:
预处理后代码还是C语言!

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

在这里插入图片描述

在这里插入图片描述

2.2 编译(生成汇编)

这个过程只是将代码转成汇编语言,并不会进行汇编过程

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

在这里插入图片描述

在这里插入图片描述

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

这个过程就是将汇编语言进行汇编,转为能够被计算机识别的二进制代码文件
又称为可重定向目标文件

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

在这里插入图片描述

在这里插入图片描述

2.4 链接(生成可执行文件或者库文件)

到这里就是将多个后缀为.o的文件合并形成一个可执行文件(exe)

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

我们可以用file查一下:
在这里插入图片描述

在这里插入图片描述

3 函数库

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

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

例如,在windows中
.dll就是动态库,.lib就是静态库

静态库是指编译链接时**,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大**,但在运行时也就不再需要库文件了。其后缀名一般为“.a”

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”, 如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。其实动态库的使用就是存储一个地址,从而建立链接

部分系统没有安装静态库,安装命令如下:

yum install -y glibc -static  c语言静态库
yum install -y libstdc++ -static  c++静态库

4 gcc选项

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

好了,本篇博文的分享到这里就结束了,感谢大家的支持!

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

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

相关文章

Xcode-双架构arm64 x86_64编译

要启用通用构建,在最新版本的 Xcode 中,请打开您的项目设置,然后依次选择: 1. “Build Settings” 选项卡。 2. 在顶部输入框中输入 “Architectures”。 3. 在 “Architectures” 下拉列表中选择 “Other”。 4. 在输入框中输入 …

Personal Website

Personal Website Static Site Generators hexo hugo jekyll Documentation Site Generator gitbook vuepress vitepress docsify docute docusaurus Deployment 1. GitHub Pages 2. GitLab Pages 3. vercel 4. netlify Domain 域名注册 freessl 域名解析域名…

【微服务】Eureka(服务注册,服务发现)

文章目录 1.基本介绍1.学前说明2.当前架构分析1.示意图2.问题分析 3.引出Eureka1.项目架构分析2.上图解读 2.创建单机版的Eureka1.创建 e-commerce-eureka-server-9001 子模块2.检查父子pom.xml1.子 pom.xml2.父 pom.xml 3.pom.xml 引入依赖4.application.yml 配置eureka服务5.…

火星文:一种特殊的文字编码

title: 火星文:一种特殊的文字编码 date: 2024/3/25 13:26:20 updated: 2024/3/25 13:26:20 tags: 火星文文字变种网络流行解码阅读社交趣味艺术创新未来符号 定义 火星文是一种特殊的文字编码,也称为奇文,其特点是将常见的文字进行特殊的变…

5.3 用PyTorch实现Logistic回归

一、数据准备 Logistic回归常用于解决二分类问题。 为了便于描述,我们分别从两个多元高斯分布 N₁(μ₁,Σ₁ )、N₂(μ₂,Σ₂)中生成数据 x₁ 和 x₂,这两个多元高斯分布分别表示…

【Redis知识点总结】(七)——缓存雪崩、缓存穿透、缓存击穿、Redis高级用法

Redis知识点总结(七)——缓存雪崩、缓存穿透、缓存击穿、Redis高级用法 缓存雪崩缓存穿透布隆过滤器 缓存击穿Redis高级用法bitmapHyperLogLog 缓存雪崩 缓存雪崩是指,同一时间有大量的缓存key失效,或者redis节点直接宕机了&…

基于nodejs+vue学生作业管理系统python-flask-django-php

他们不仅希望页面简单大方,还希望操作方便,可以快速锁定他们需要的线上管理方式。基于这种情况,我们需要这样一个界面简单大方、功能齐全的系统来解决用户问题,满足用户需求。 课题主要分为三大模块:即管理员模块和学生…

(已解决)vue运行时出现Moudle Bulid error: this.getoptios is not a function at........

1.首先查看你的less-loader版本 点击package.json 即可查看less-loader版本,我之前的版本是12.0,太高了,出现了不兼容的问题 2、卸载less-loader ctrlshift~ 打开项目终端 ,输入: npm uninstall less-loader 3.重…

Linux中的常用基础操作

ls 列出当前目录下的子目录和文件 ls -a 列出当前目录下的所有内容(包括以.开头的隐藏文件) ls [目录名] 列出指定目录下的子目录和文件 ls -l 或 ll 以列表的形式列出当前目录下子目录和文件的详细信息 pwd 显示当前所在目录的路径 ctrll 清屏 cd…

突破极限!DNF全新装备现身,无限高达流震撼登场

近期,DNF(地下城与勇士)的玩家们热议的话题不再是往日的副本攻略或职业平衡,而是一件神秘的装备——“玉化腰带”。这个装备的出现,引发了一股前所未有的热潮,因为它带来的无限高达流,彻底颠覆了…

0325 ISP流程介绍 RAW/RGB/YUV

学习参考:isp流程介绍(yuv格式阶段) - 知乎 一、RAW 1.1 ISP RAW 之DPC DPC(defective pixel correction)也就是坏点矫正,在sensor接收光信号,并做光电转换之后。 这一步设计的意义在于:摄像头sensor的感光元件通常很多会存在一些工艺缺陷…

硅谷甄选项目笔记

硅谷甄选运营平台 此次教学课程为硅谷甄选运营平台项目,包含运营平台项目模板从0到1开发,以及数据大屏幕、权限等业务。 此次教学课程涉及到技术栈包含***:vue3TypeScriptvue-routerpiniaelement-plusaxiosecharts***等技术栈。 一、vue3组件通信方式 通信仓库地…

maven下载与使用

Maven介绍 Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven就是一个软件,掌握软件安装、配置、以及基…

苍穹外卖项目笔记

软件开发流程 需求分析:说明书和原型 设计:UI,数据库,接口设计 编码:项目代码,单元测试 测试:测试用例,测试报告 上线运维:软件环境安装,配置 软件环境…

《大模型技术要求标准》重磅发布,九章云极DataCanvas公司助力我国大模型技术发展

近日,中国信息通信研究院(简称“中国信通院”)重磅发布**《人工智能开发平台通用能力要求 第4部分:大模型技术要求》**(以下简称“大模型技术要求标准”),九章云极DataCanvas公司依托在大模型领…

Linux收到一个网络包是怎么处理的?

目录 摘要 ​编辑 1 从网卡开始 2 硬中断,有点短 2.1 Game Over 3 接力——软中断 3.1 NET_RX_SOFTIRQ 软中断的开始 3.2 数据包到了协议栈 3.3 网络层处理 3.4 传输层处理 4 应用层的处理 5 总结 摘要 一个网络包的接收始于网卡,经层层协议栈…

Samtec应用漫谈 | EVSE基础设施的前进道路

【摘要/前言】 能源的格局正在不断变化,燃油价格正在上升,因此越来越多的人正在考虑个人电动车的经济性。 此外,全球物流公司正在更多地采用电动面包车和卡车进行物流运输。大街小巷中,大家可以看到各式新能源汽车,电…

闻了刚脱下的袜子导致肺部感染真菌?后果很严重

之前有网友分享自己只因闻了刚脱下的袜子,就导致了肺部感染真菌的经历,引发众多网友的关注与热议。 那么,臭袜子又怎么会和肺部感染有关系呢?臭袜子为什么不能闻呢?袜子上面到底有什么有危险的成分呢? 图源…

10-shell编程-辅助功能

一、字体颜色设置 第一种: \E[1:色号m需要变色的字符串\E[0m 第二种: \033[1:色号m需要变色的字符串\033[0m ########################### \E或者\033 #开启颜色功能 [1: #效果 31m #颜色色号 \E[0m #结束符 1,颜色案例 2,效果案例 二、gui&am…

应急响应实战笔记04Windows实战篇(1)

第1篇:FTP暴力破解 0x00 前言 ​ FTP是一个文件传输协议,用户通过FTP可从客户机程序向远程主机上传或下载文件,常用于网站代码维护、日常源码备份等。如果攻击者通过FTP匿名访问或者弱口令获取FTP权限,可直接上传webshell&#…