Linux(二)vim编辑器,gcc,库

news2024/11/25 11:17:01

vim

简介

vi是“visual interface”的简称。
类似于Windows下的记事本。
vim可以视为vi的高级版本
按下vimtutor进入帮助文档,以下内容在其中都有

vim的三种模式

Vi有三种基本工作模式:命令模式、文本输入模式、末行模式

基本操作

命令模式下的操作

用户按下ESC键,即可进入命令模式

光标移动:

快捷键作用
ZZ保存退出
gg=G代码的格式化
h光标左移
j光标下移
k光标上移
l光标右移
w移动一个单词
gg移动到文件头开头
G移动到文件末尾
0光标移动到行首
$光标移动到行尾
nG行跳转,跳转到n行处

删除命令:

快捷键作用
x删除光标当前覆盖的字符
X删除光标前一个字符
dw删除选中的字符,包括光标所在的字符
d0删除光标前本行的所有内容,不包括光标所在的字符
d$或D删除光标后本行内容,包括光标所在的字符的
dd删除光标所在行,本质是剪切
nddn是数字,从光标当前行向下删除指定的n行内容
ctrl+v按下后进入可视 块模式,可以通过hjkl或上下左右按键选择内容,再按d可以删除选中的内容

撤销和反撤销

快捷键作用
u单步撤销,相当于word文档下的ctrl+z
ctrl+r反撤销

复制粘贴

快捷键作用
yy复制当前行
nyy复制n行,复制的行是从当前行向下数的
p在光标位置向下开辟一行进行粘贴
P在光标位置向上开辟一行进行粘贴,本质就是粘贴在当前行,把当前行原来的内容向下挤

如果粘贴的是可视块的内容,则p在光标后粘贴,P在光标前粘贴
粘贴的有多少行,会根据光标位置向下选中

查找和替换

快捷键作用
//xxx,从光标所在的位置开始搜索,按n向下搜索,按N向上搜索
?xxx,从光标所在的位置开始搜索,按N向下搜索,按n向上搜索
#将光标移动到待搜索的字符串上,从光标所在的位置开始搜索,按N向下搜索,按n向上搜索
shift+k在待搜索的字符创上按shift+k或者K,可以查看相关的帮助文档
r替换当前字符
R替换当前行光标后的内容,包括光标所在的字符,按下ctrl+c可以终止替换

切换到文本输入模式

从命令模式切换到文本输入模式只需要如下命令

快捷键作用
i在光标前插入
a在光标后插入
I在光标所在行的行首插入
A在光标所在行的行尾插入
o在光标所在行的下面新创建一行,行首插入
O在光标所在行的上面新创建一行,行首插入
s删除光标后面的字符,从光标当前位置插入
S删除光标所在当前行,从行首插入

末行模式下的操作

从命令模式切换到末行模式,输入

保存退出

快捷键作用
q退出
ql强制退出,不保存修改内容
w保存修改,不退出
wq保存退出
x相当于wq

替换操作

快捷键作用
:s/old/new光标所在行的第一个old替换成new
:s/old/new/g光标所在行的所有old替换成new
:m,ns/old/new/g将第m行至第n行之间的old全部替换成new
:%s/old/new/g将当前文件中多有的old替换成new
:l,$s/old/new/g当前文件中所有old替换成new
:%s/old/new/gc当前文件中所有old替换成new,但每次替换前需要用户确认

快速翻屏

快捷键作用
ctrl+u向下翻半屏(up)—光标向上移动,内容向上更新
ctrl+d向上翻半屏(down)–光标向下移动,内容向下更新
ctrl+f向上翻一屏(front)内容向下更新
ctrl+b向后翻一屏(back),内容向上更新

分屏操作

在打开文件之后分屏

快捷键作用
sp当前文件水平分屏
vsp当前文件垂直分屏
sp 文件名当前文件和另一个文件水平分屏
vsp 文件名当前文件和另一个文件垂直分屏
ctrl+w-w在多个窗口切换光标
wall/wqall/xall/qall/qall!保存/保存退出/保存退出/退出/强制退出分屏窗口

vim的配置文件

用户级别配置文件

~ /.vimrc

修改用户级别的配置文件只会影响当前用户,不会影响其他的用户

1 set tabstop=4  设置缩进4个空格
2 set nu          设置行号
3 set shiftwidth=4  设置gg=G(代码格式化) 缩进4个空格,默认为8个空格

系统级别配置文件

/etc/vim/vimrc

修改了系统级别的配置文件将影响系统下所有的用户
建议只修改自己的配置文件

gcc

在这里插入图片描述

gcc 的工作流程

  1. 预处理 :cpp预处理器,去掉注释,展开头文件,宏替换
gcc -E xxx.c -o xxx.i
  1. 编译:gcc,将源代码文件编译成汇编语言代码
gcc -S xxx.i -o xxx.s
  1. 汇编:as,将汇编语言代码编译成二进制文件
gcc -c xxx.s -o xxx.o
  1. 链接:ld,链接.c文件中调用的库函数
gcc -o test test.o

gcc 常用参数

参数意义
-v查看版本号,-version也是一样的效果
-E生成预处理文件
-S生成汇编文件
-c只编译,生成o文件,通常称为目标文件
-I指定头文件所在的路径,这里是大写的i
-L指定库文件所在的路径
-l指定库的名字,这里是小写的l
-o指定生成文件的名字
-g包含调试信息,使用gdb调试需要添加-g参数
-Wall提示更多警告信息

静态库和共享(动态)库

库是二进制文件,是源代码文件的另一种表现形式,是加了密的源代码;
是一些功能相近或者类似的函数的集合体;
库分静态库(static library)和动态库;

使用库的好处

  • 提高代码的课重要性,而且还可以提高程序的健壮性
  • 可以减少开发者的代码开发量,缩短开发周期

库提供给用户使用

  • 头文件 包含库的声明
  • 库文件 包含库函数的代码实现

(库不能单独使用,只能作为其他执行程序的一部分完成某些功能,也就是说只能被其他程序调用才能使用)

静态库

静态库可以认为是一些目标代码的集合,是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分,按照习惯,一般以.a作为文件后缀名。
静态库的命名一般分为三个部分:

  • 前缀:lib
  • 库名称:自定义即可
  • 后缀:.a

静态库的制作

步骤1:
将c源文件生成对应的.o文件
步骤2:
使用ar工具将准备好的.o文件打包为.a文件

  • 使用ar工具是需要添加参数 rcs,r更新,c 创建 ,s 建立索引
  • 命令: ar rcs 静态库名 .o文件

静态库的使用

gcc -o xxx xxx.c -I头文件路径 -L库文件路径 -l库名称


在这里插入图片描述

共享库(shared library)/动态库

  • 共享库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入,不同的应用程序如果调用相同的库,那么在内存里只需要一份该共享库的拷贝,规避了空间浪费问题。

  • 动态库在程序运行时才被载入,也解决了静态库对程序的更新、部署和发布会带来麻烦,用户只需要更新动态库即可,增量更新

  • 为什么需要动态库,其实也是静态库的特点导致的

    按习惯,一般以".so"作为文件后缀名
    共享库的命名一般分为三个部分:
    前缀:lib
    库名称: 自己定义即可
    后缀 : .so

动态库的制作

  1. 生成目标文件.o ,此时需要加编译选项: -fPIC (fpic)
gcc -fpic -c xx1.c xx2.c
参数: -fpic创建与地址无关的编译程序(pic,position independent code),目的
       就是为了能够在多个应用程序间共享
  1. 生成共享库,此时要加链接器选项 -shared (指定生成动态链接库)
gcc -shared xx1.o xx2.o libxxx.so

查看动态库有哪些函数 nm xxx.so

动态库的使用

引用动态库编译成可执行文件(跟静态库方式一样)

动态库链接失败

在这里插入图片描述

程序找不到库

如何让程序找到我们创建的动态库?

拷贝自己制作的共享库到/lib 或者 /user/lib
临时设置 LD_LIBRARY_PATH:
 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径

不建议,测试使用,如果退出再重进,则还是会报程序找不到库的错误

永久设置1(建议使用)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径,设置到~/.bashrc文件中,然后执行下列三种方法之一:

  1. 执行. ~/.bashrc使配置文件生效(第一个点后面有一个空格)
  2. 执行source~/.bashrc 配置文件生效
  3. 退出当前终端,然后再次登录也可以使配置文件生效

永久设置2 把 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径,设置到/etc/profile文件中

将其添加到/etc/ld.so.cache文件中

  1. 编辑/etc/ld.so.cache文件,加入库文件所在目录的路径
  2. 运行 sudo ldconfig -v ,该命令会重建/etc/ld.so.cache文件

解决了库问题,再次使用ldd命令可以查看可执行文件依赖的库文件

动态库文件在编译的时候,连接器需要使用参数-L找到库文件所在的路径。
在执行的时候,是加载器ldd根据动态库的路径进行加载的,与编译的时候用得-L指定的路径无关

动态库和静态库比较

静态库优点:

静态库执行速度快,因为其已经编译到文件内部
移植方便,不依赖其他库文件

静态库缺点

耗费内存,是由于每一个静态库的可执行程序都会加载一次
部署更新麻烦,因为静态库修改以后,所有的调用到这个静态库的可执行文件都需要重新编译

动态库优点

节省内存
部署升级更新方便,只需要替换动态库即可,然后重启服务

动态库缺点

加载速度比静态慢
移植性差,需要把所有用到的动态库都移植

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

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

相关文章

迷宫--dfs解法以及迷宫问题要不要回溯

文章目录题意题解思路:问题: 迷宫问题dfs要不要回溯?题意 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由 n∗n 的格点组成,每个格点只有2种状态,.和#,前者表示可以通行…

装载问题 ——分支限界法(Java)

装载问题 ——分支限界法(Java) 文章目录装载问题 ——分支限界法(Java)1、 问题描述2、算法设计3、算法的改进4、程序代码5、参考资料1、 问题描述 有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集 装箱…

数图互通高校房产管理——教职工住宅方案

数图互通房产管理系统在这方面做得比较全面; 1、住房管理 1.1 住房档案 住房模块的管理主要是针对学校的承租住宅和已售住宅的管理,用于登记已售住宅的产权人信息,记录承租住宅的租赁起止日期、月租金等基本信息。 支持住房的坐落信息、楼栋…

Cas:146368-11-8(水溶)|Sulfo CY5-羧酸|Cyanine5 Carboxylic Acidic acid

Cas:146368-11-8(水溶)|Sulfo CY5-羧酸|Cyanine5 Carboxylic Acidic acid Sulfo CY5-羧酸这种分子可以被认为是非活性染料,用于控制样品和仪器校准。为了与胺和蛋白质标记偶联, 中文名:Sulfo CY5-羧酸 英文名:Cyanine5 Carboxy…

rate-limit 一款 java 开源渐进式分布式限流框架使用介绍

项目简介 rate-limit 是一个为 java 设计的渐进式限流工具。 目的是为了深入学习和使用限流,后续将会持续迭代。 特性 渐进式实现 支持独立于 spring 使用 支持整合 spring 支持整合 spring-boot 内置多种限流策略 快速开始 需求 jdk 1.7 maven 3.x mav…

ARM S5PV210 时钟系统与时钟体系框图

前言 This chapter describes the clock management unit (CMU) supported by S5PV210. The system controller (SYSCON) manages CMU and power management unit (PMU) in S5PV210. 本章介绍 S5PV210 支持的时钟管理单元(CMU)。系统控制器&#xff08…

【软考】系统集成项目管理工程师(十一)项目人力资源管理

一、项目人力资源管理概述二、激励理论1. 马斯洛需求层次理论2. 赫茨伯格的双因素理论3. X 理论/ Y 理论4. 期望理论三、人力资源管理子过程1. 规划人力资源管理2. 组建项目团队3. 建设项目团队4. 管理项目团队一、项目人力资源管理概述 在了解人力资源管理之前,我们先来认识…

从局部到全局:语义相似度的测地线距离

©PaperWeekly 原创 作者 | 苏剑林单位 | 追一科技研究方向 | NLP、神经网络前段时间在最近的一篇论文《Unsupervised Opinion Summarization Using Approximate Geodesics》[1] 中学到了一个新的概念,叫做“测地线距离(Geodesic Distance&#xff…

.net开发安卓入门 - Service (服务)

.net开发安卓入门 - Service Android Service 概述Service VS Thread (服务和线程之间进行选择)前台服务代码启动前台服务方法运行效果后台服务代码启动代码绑定服务AIDL同系列文章推荐Android Service 概述 移动应用不像桌面应用。 桌面具有大量资源&a…

基于51单片机的正弦波发生器设计

程序运行图&#xff1a; 仿真原理图&#xff1a; 部分程序&#xff1a; #include <reg52.h> //接口定义 sbit DA P1^1; sbit CK P1^2; sbit CS P1^4; //10bit取样&#xff0c;1024点正弦查表数据 unsigned int code sine_dot[1024] { 0x200,0x203,0x206,0x209,…

可视化编排的数据集成和分发开源框架Nifi轻松入门-上

文章目录概述定义dataflow面临挑战特性核心概念架构高级概述安装部署常见处理器入门示例概述 定义 Nifi 官网地址 https://nifi.apache.org/ Nifi 官网文档 https://nifi.apache.org/docs.html Nifi GitHub源码地址 https://github.com/apache/nifi Apache NiFi是一个易于使用…

NetInside助力IT提高业务性能管理能力(二)

​​需求简介 某外高桥公司的OA系统是其重要的业务系统&#xff0c;OA系统负责人表示&#xff0c;部分用户反馈&#xff0c;访问OA系统时比较慢。需要通过分析系统看一下实际情况。 本次分析重点针对OA系统性能进行分析&#xff0c;以供安全取证、性能分析、网络质量监测以及…

关于推特隐私设置的一些小窍门

大家在使用推特进行引流的时候&#xff0c;在使用的时候难免会遇到一些功能模糊不清&#xff0c;这里twitter群推王给大家总结了一些偏门功能应该如何去设置&#xff0c;让你使用起来更加得心应手。 一、推特怎么设置自动放声音 1、首先打开推特APP并登陆。 2、其次在推特主…

CPDA认证|数据分析能给企业带来哪些好处?

数据分析的核心并不在于数据本身&#xff0c;而在于设计有意义、有价值的数据分析主题与指标体系&#xff0c;通过科学有效的手段去分析&#xff0c;进而发现问题优化迭代。 无论分析给出的结果是积极的还是负面的&#xff0c;都是价值承载体&#xff0c;必须以客观的态度面对。…

Enum枚举

枚举一般是针对常量需求,优化代码,.使代码看起来简洁 看下下面这个工具类 说有问题,那就是是看起来代码不够简洁 我看着倒还行,也许也是枚举不怎么实用的原因 下面就用枚举来优化这个代码,首先看下枚举介绍 java中对常量数据的配置可以使用枚举类型实现,,枚举类型是面向对象…

3小时!开发ChatGPT微信小程序

导读 | 上周OpenAI发布了对话语言模型 ChatGPT&#xff0c;相关讨论引爆全网。你是否也迫不及待体验一番&#xff1f;本文特邀作者腾讯云开发者社区作者戴传友从开发环境准备、开发过程、服务器接口、腾讯API网关接入到部署&#xff0c;详细教你如何动手开发一个chatGPT微信小程…

2022年华中杯数学建模挑战赛A题分拣系统优化问题

2022年华中杯数学建模 A 题 分拣系统优化问题 真的有想占便宜的 醉了 几十元让我写论文这是什么选手 想占便宜想疯了么 还要求查重率在10% 一开始说想看看你的A题论文 想学习一下 然后谈完价(几十块钱)之后 需要改成现做一篇独一无二的论文 然后想套路我占便宜 套路是真的深啊…

【R语言绘图】R在气象、水文中数据处理及结果分析、绘图技术

【查看原文】R语言在气象、水文中数据处理及结果分析、绘图实践技术应用 【内容简述】&#xff1a; 一、R简介与 R 在气象水文中的应用 R语言与 R软件简介 R 在各行业的应用 R 与其他语言的比较及其在数据分析与作图上的优势 R 在地学中的应用以及R 在气象水文中的应用 二、…

【react】虚拟DOM的两种创建方式

1、使用js创建虚拟DOM <body><div id"test"></div><!-- 引入react核心库 --><script src"../js/react.development.js"></script><!-- 引入react-dom&#xff0c;用于支持react操作dom --><script src"…

大数据期末课设~基于spark的气象数据处理与分析

目录 一 、项目背景 .......................................... 3 二 、实验环境 .......................................... 3 三 、实验数据来源 ................................... 4 四 、数据获取 .......................................... 5 五 、数据分析 ....…