Vim
Vim 是一个编辑器
只能编辑,只能写代码
直接输入vim
: q就是退出
touch新文件,vim 进入
vim是一款多模式的编辑器
命令模式(默认打开的模式)
按 i 进入编辑模式/插入模式
esc回到命令模式
冒号进入底行模式
保存并退出 加感叹号是强制。
退出底行 esc
插入模式不能直接进入底行模式,要从命令进
底行也不要直接进插入
常见命令
复制光标行 yy 加数字 从当前行 往下复制多少行 nyy
粘贴 p 加数字就是粘贴多少行 np
u—撤销历史操作
ctrl+r 撤销刚才的撤销
光标定位:
到结尾:shift+g
最开始: gg
定位到某一行:数字加shift+g
到行尾:shift+4
到行首:shift+6
行内快速移动:w和b是依据单词左右移动的
hjkl: h 左 j 下 k上 l右 记忆方法:h(最左边) j(jump向下跳) k(king高高在上) l(最右边)
删除(剪切)整行:dd ndd就是删除n行
剪切 dd p
只要大写或小写
shift+~ 小写转大写 或 小写转大写
shift +r 替换 覆盖式替换老内容
r 就是只替换一个字符 加数字就是换多少个字符。
想要删一个字符 :x 数字+x就是删多少个字符 默认从左向右删除
shift+x :从右往左删除 也支持nx
练习方法:天天用
底行模式
-
调出行号:: set nu
- vs 对比模式 分屏操作 光标在哪 ,底行在哪
光标从左侧跳转到右侧 :ctrl+ww快速按
vs 文件名 可以分屏操作
w:表示写入 w!
q:退出 q!
回去看运行结果: !cmd: 不退出vim执行对应的命令
!ls 就是看目录
vim配置
https://github.com/wsdjeg/vim-galore-zh_cn
.vimrc 当启动vim时,自动启动
vim. vimrc即可
一键配置vim VimforCpp gitee
找到vimrc 设置缩进 查找tabstop softtabstop shiftwidth 修改即可
如果配置出错,进入root
vim /etc/sudoers
把行号加上,加入信任列表
Linux编译器——gcc/g++
gcc -v gcc只能编译C
g++ -v g++可编译C也可编译C++
sudo yum install -y gcc-c++
安装g++
程序编译的过程:
文本的C - 计算机二进制
磁化 用南北极表示所以是二进制,硬件只认识二进制。
1.程序的预处理阶段(去注释、宏替换、头文件展开、条件编译……)
2.编译 (C—> 汇编)
3.汇编 (汇编→可重定向二进制目标文件)
4.链接 (链接 → 多个.o文件合并成一个可执行).exe
自己做实验
条件编译
gcc
编译mytest.c 生成可执行程序
把预处理完成的内容写到临时文件mytest.i
-O:形成另一个名字的新文件
-E:从现在开始进行程序的翻译,如果预处理完成,就停下来。
#parama once 防止头文件被重复拷贝到源文件
预处理之后依旧是C语言
编译:
-S:从现在开始进行程序的翻译,如果编译完成,就停下来。(转成汇编语言)
-c:从现在开始进行程序的翻译,如果汇编完成,就停下来。
.o文件是可重定向目标文件 变成了二进制 只是你自己的代码变成了二进制,并未和库关联起来
链接:
和库关联起来
背记:ESc
动静态库——感性的理解
dynamically linked动态链接
一般链接的过程,是有两种方式:
a.动态链接-需要动态库
b.静态链接-需要静态库
ls /lib64/ 这是库文件
ls /usr/include/stdio.h 提供C语言的方法列表,方法的声明
ls /lib64/libc-2.17.so -l 提供C语言的方法实现
包含头文件,链接方法 实现exe
Linux: .so 动态库, .a静态库
Windows: .dll动态库,.lib静态库
C程序是脱离不了C库文件的。
动态链接
网吧
告诉你库在哪里,需要用的时候就跳转至动态库。
需要我自己调用时,就跳转至库中去执行,编译时只要把当中使用库函数的地址填到代码中,就叫动态链接。
gcc和g++默认动态链接
静态链接
自己买电脑
把方法的实现给自己的代码中拷了一份
将库中方法的实现,真的拷贝到我们的可执行程序中。
gcc test.c -o mytest-s -static 就变成了静态链接
动态链接必须使用.so动态库文件
静态链接必须使用.a静态库文件
sudo yum install -y glibc-static
sudo yum install -y libstdc+±static
make/makefile
make是一个命令
makefile是一个文件
他们为了帮我们自动化地构建项目
编写makefile
a.依赖关系
b.依赖方法
依赖关系,左侧目标文件,右侧依赖文件列表
第二行table紧挨,依赖方法
make执行
清除
make后面跟依赖关系名字,就可以运行哪个方法
make是从上到下扫描的
.PHONY
伪目标总是被执行
就是make clean不会因为Update last 而不允许 总是被运行.
习惯:clean设置.PHONY
makefile根据文件的最近修改时间来的。
ACM
stat文件名
Modify:内容改变
Change:属性的变化
两个文件同时编译
进度条小程序:
缓冲区的概念
先保证makefile能把hello world跑出来 再写程序。
自动补全是通过头文件自动推断的
sleep先出来,是因为Printf早就执行完了,只不过信息没有被立马显示出来。
C语言是会给我们提供输出缓冲区的,根据特定的刷新策略,来进行刷新。
输出缓冲区就是C语言给我们提供的一段内存空间
显示器设备,一般的刷新策略是行刷新
碰到\n就把\n之前的所有字符全部给我显示出来。
如果我要立马刷新,fflush
回车换行:
换行是到下一行的旧位置‘\n’
回车回到行首’\r’
换成\r就出不来,因为在缓冲区出不来 要用fflush
预留100个字符
负号左对齐
完整版
yum
windows
1.要下载安装的软件是在你的电脑上吗?———不是
2.你怎么知道在哪里?——搜索
3.谁放的?它内部的工作人员
Linux
Linux社区或者对应开发人员放的。
基本过程
yum就相当于手机上的应用商店
作用:
1.搜索 下载 安装
2.解决依赖关系
yum的操作
yum源:
就是一个配置文件
安装扩展源
sudo yum install -y epel-release
yum源 -Centos- Base.repo就是配置文件
更新yum源:
网上搜,centos 7 更新国内yum源
做备份就是把它重命名一下
yum三板斧:
yum list #yum | greap + 软件名称 搜索软件
el7就是 centos7简写
yum install
yum remove 你的软件 #移除
git
版本控制器
精华在多人协作
1.什么是版本控制?
实验报告举例,备份每个版本
写个代码实现上面的过程
退回某个版本叫做回滚
从V2改一个版本叫做拉了一个分支
2.git的历史
林纳斯·托瓦兹 手写了一个版本控制器git
开源精神
3.git三板斧
1.git clone+ 仓库链接
2.git add 你的文件 #添加我们的代码到本地仓库
3.git commit -m “这里必须写提交日志”
4.git push #提交代码到远端仓库中
其他情况:
- 配置用户名和邮箱
- git log就是看提交日志
- 有时候会有提交冲突 git pull远端与本地再同步
- .gitignore #不想提交某个后缀名的文件
5. git rm 文件名 #删除文件
gdb
调试器
退出gdb quit
no debugging symbols found : gcc 和 g++ 默认形成的可执行程序是动态链接版本的release的 所以无法直接被调试
gcc -g 就是以debug版本发布
rodata只读数据
gdb操作
20221117目录下是gdb文件
gdb+可执行程序
quit可退出gdb
显示代码 list 简写成l
l 0 回车 查看所有代码
gdb会记录最近一条命令,回车就是执行最近一条指令
run命令开始跑程序,开始调试,如果没有设置断点,就直接结束。(vs里的F5)
给特定行打断点: break point + 行号
缩写:b+行号
info b: 查看断点(编号)
d +断点编号 删断点
逐语句调试:next 简写n
p 变量名 :打印变量内容
step +回车 简写s 进入函数调试(VS里的F11)
bt调用堆栈 第一个是所处函数
将当前函数跑完 finish
display叫做常显示
undisplay 编号:取消显示
until 行号:跳转到指定行
continue:跳断点 简写c
disable 断点编号: 禁用断点
打开断点 enable
set var i = …. 让循环变量到什么值