vi编辑器及Linux C 开发工具

Vi编辑器

  1. vi+文件名 进入命令模式
    • n+空格,光标向右移动n格;n+回车,光标向下移动n行
    • 0/home 移动到本行最前面字符;$/end 移到本行最后一个字符
    • G移动到文件最后一行,nG移动到第n行;gg移动到第一行
    • X删除光标前一个字符,x删除光标所在字符
    • nx连续向后删除n个字符
    • dd删除光标所在整行,ndd删除光标所在的向下n行
    • d0删除光标到该行第一个字符
    • yy复制光标所在行,nyy复制光标所在向下n行
    • p将复制的东西粘贴在光标下一行,P粘贴在光标上一行
    • J把光标所在行和下一行合成一行
    • U复原前一个动作
  2. 插入模式
    • i为从当前光标所在处插入,I为从所在行的第一个非空格字符插入
    • a为从目前光标所在处的下一个字符插入,A为光标所在行的最后一个字符处开始插入
    • o目前光标所在行的下一行插入新的一行,O目前光标所在行的上一行插入新的一行
    • 进入取代模式(Replace mode): r只会取代光标所在的那一个字符一 次;R会一直取代光标所在的文字,直到按下ESC为止;
    • i, o,R三个按钮即可!尤其是新增一行的o与取代的R
  3. 底行模式
    • 命令模式+“:”“?”"/"可以切换至底行模式
    • /word 向光标之下寻找word;?word向光标之上寻找word
    • :n1,n2s/word1/word2/g 在n1到n2行之间找到word1并替换成word2
    • :1, s / w o r d 1 / w o r d 2 / g , 从 第 一 行 到 最 后 一 行 找 到 w o r d 1 并 替 换 成 w o r d 2 • : 1 , s/word1/word2/g,从第一行到最后一行找到word1并替换成word2 • :1, s/word1/word2/g,word1word2:1,s/word1/word2/gc,替换前请求用户确认
    • set nu 设置行号,set nonu 取消行号
    • w保存,q退出,w+文件名,表示另存为
  4. vi文件的暂存
    • vi编辑文件时,会在编辑文件所在的文件夹下生成.filename.swap。 记录了对文件的操作。若vi编辑器非正常退出、掉线,则可用该文件进行救援
  5. vi编辑器扩展功能
    • 区块选择:v会将光标经过的地方反白选择;V行选择,会将光标经过的行反白选择;Ctrl+v区块选择,用长方形方式选择文件
    • 多文本编辑::n编辑下一个文件,:N编辑上一个文件,:files列出打开的所有文件
    • 多窗口功能:先打开一个文件,后输入命令sp filename 。ctrl+w+上/下切换到上一个或下一个文件
  6. vi编辑器常用设置
    • 使用vi编辑器会在家目录下生成~/.viminfo文件,记录访问位置、搜索记录等
    • set all 可以查看所有环境的变量
    • 配置文件/etc/vimrc)

GCC概述

  1. 基本语法
    • -g包含调试信息;-E生成预处理文件;-c只编译子程序;-o产生目标文件;-I<>指定头文件路径
  2. 编译流程:
    • hello.c——gcc -E(预处理)——hello.i——gcc -S(编译器gcc)——hello.s——gcc -c(编译器as)——hello.o——gcc(链接器ld)——a.out
    • 预处理:gcc -E -o [目标文件] [编译文件](处理文件中的#ifdef,#include和#define等预处理命令
    • 编译阶段:gcc -S -o [目标文件] [编译文件](检查语法错误)
    • 汇编阶段:gcc -c -o [目标文件] [编译文件](生成二进制机器代码)
    • 连接阶段:gcc -o [目标文件][编译文件] gcc test.o -o test生成test可执行文件,./test执行
    • 直接编译:gcc test.c -o test
    • 多文件同时编译:gcc 1.c 2.c 3.c -o test/gcc -c 1.c -o 1.o ,gcc -c 2.c -o 2.c——gcc 1.o 2.o -o test
    • gcc默认在当前目录(子目录也不行)和/usr/include目录下查找相应的头文件(.h文件),若找不到则报错

静态库与动态库

  1. Linux库文件名:lib+库名+后缀(静态.a;动态.so)
  2. 静态库动态库区别:
    • 静态库的代码在编译时就拷⻉到应⽤程序中,因此当有多个程序同时引⽤⼀个静态库函数时,内存中将会调⽤函数的多个副本。由于是完全拷⻉,因此⼀旦连接成功,静态库就不再需要了,代码体积⼤。
    • 动态库在程序内留下⼀个标记,指明当程序执⾏时,⾸先必须要载⼊这些库,在程序开始运⾏后调⽤库函数时才被载⼊,被调⽤函数在内存中只有⼀个副本,代码体积⼩
  3. 静态库的创建
    • 1.在一个头文件(.h文件)中声明静态库所导出的函数
    • 2.在一个源文件中实现静态库所导出的函数
    • 3.编译源文件,生成目标文件(*.o)
    • 4.通过命令ar将目标文件加入到某个静态库中 ar rcs 静态库名 目标文件列表
    • 5.将静态库拷贝到系统默认的存放库文件的目录或指定目录下
  4. gcc –o test test.c –lother1 –lother2 装载名为libother1.a和libother2.a的静态库
  5. -L指定静态库的路径,-l指定头文件的路径(大写i)
  6. 动态库创建时产生的是与位置无关的目标文件(.o文件)在这里插入图片描述
    • 创建动态库 gcc -shared -o libdy.so *.o 生成libdy.so动态库
  7. 动态库的使用
    在这里插入图片描述在这里插入图片描述
    8. 解决找不到链接库的方法
    在这里插入图片描述

分布式版本控制系统git

  1. git int,创建库, git add 把文件加入暂存区
  2. git commit 把文件提交到当前分支
  3. git status 查看状态
  4. git log查看提交记录
  5. 回退:
    • git reset –-hard HEAD^ # 退回后新的不存在了,若git log还存在可用版本号回退
    • git reset –-hard 版本号(来自git log)
    • git reflog # 记录每一次更改,可找到最新版本
  6. 撤销修改(删除)
    • git checkout – filename ,回到最近一次git commit或git add时的状态。 若未放到暂存区,回到和版本库一样的状态 ,放到暂存区,则回到添加到暂存区后的状态
    • Git reset HEAD filename:撤销暂存区中的内容(git add)
    • git rm filename:删除提交到版本库中的文件 (错删,则git checkout – filename 从版本库恢复)
  7. 远程克隆
    • 远程有项目组其他人上传的项目,或开源项目,需要克隆到本地开发。
    • 步骤:git clone git@github.com:Coder-Peng/repo_git.git
  8. 分支管理
    • 创建分支: git checkout -b newbranch
    • 查看当前分支:git branch
    • 返回master分支: git checkout master
    • 合并分支: git merge newbranch
  9. 冲突管理:多分支修改相同文件,合并时会产生冲突,必须手动解决冲突,提交解决冲突后的文件,删除新分支

GDB(非重点)

  1. . 启动方式:gdb 程序名;gdb -q后再用file加载程序名;
  2. gcc –g testgdb.c –o test 要使用gdb进行调试的程序,在编译时需要添加-g 选项
  3. 退出:(gdb)quit (q)
  4. List
    • list: 输出从上次调用list命令开始往后的10行程序代码,若再
    • 次运行该命令则显示接下来的10行代码
    • list -(减号):输出从上次调用list命令开始往前的10行代码
    • list n:输出n行附近的10行代码
    • list function:输出函数funciton附近的10行代码
    • list 5,10:显示第5到第10行的代码
  5. forward/search:从当前行向后查找某个字符串的程序行,查找时不包括当前行,可以用list n,n,将当前行设置为n。
  6. reverse-search 字符串:从当前行向前查找第一个匹配的字符串。
  7. 使用gdb test或file test 只是装入程序,程序并没有运行 . 运行 (gdb) run
  8. 设置断点:break n到n行暂停,第n行不执行;break 函数名,停在函数第一行;break 6 if i==99执行到第六行,如果i为99,暂停;watch 条件表达式,必须在运行过程中设置观察,且表达式中的变量已经使用过
  9. 查看当前设置的断点 info breakpoints keep:生效一次后不失效 y:是否有效
  10. 使中断失效或有效
    • 失效:disable 断点编号
    • 有效:enable 断点编号
  11. 删除断点
    • clear 行号:删除此行断点
    • delete:删除程序中所有断点
    • delete 断点编号:删除指定编号的断点,若一次要删除多个断点,各 个断点编号以空格隔开
  12. print i打印i,print i=20给i赋值
  13. whatis i显示i的数据类型
  14. set variable 变量=值 给变量赋值
  15. continue 程序继续运行,直到下一个断点或运行完为止
  16. kill 结束当前程序的调试
  17. next和step
    • 功能:一次一条执行该程序代码
    • 区别:next把函数调用当作一条语句来执行 ,step跟踪进入函数,一次一条地执行函数内的代码
  18. help +类名 查看帮助文档
    • breakpoints – Making program stop at certain points
    • files – Specifying and examining files
    • running – Running the program

Make(重点)

  1. 功能:通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。
  2. makefile文件可以改名:make -f rules.txt/make --file=rules.txt
  3. : # ⽬标: 前置条件
  4. [tab] # [必须有个table键] <命令>
  5. PHONY:clean声明clean是个伪目标
  6. 每⾏命令之前必须有⼀个tab键。如果想⽤其它键,可以⽤内置变量.RECIPEPREFIX声明。 例:.RECIPEPREFIX=> , ⽤.RECIPEPREFIX指定⼤于号(>)替代tab键
  7. 每⾏命令都是在⼀个单独运⾏的Shell中执⾏的,这些Shell间没有继承关系
  8. 解决⽅法: (1) ; 2) \ # “;”后可以换行 (3) .ONESHELL
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值