目录
一. vim 简介
vim 是一种文本编辑器,其主要有三种模式:命令模式、底行模式、插入模式;
1.模式切换
模式功能介绍:
命令模式:打开文件后默认进入命令模式,可以进行光标移动、复制粘贴、搜索替换等操作。
插入模式:在命令模式下按i
、a
、o
等键可以进入插入模式,这里可以编辑文件内容(敲代码)。
底层模式:在命令模式下按v
或V
键可以进入可视模式,此时可以选择文本块并进行复制、粘贴等操作。
2.sudo 将普通用户添加到信任列表
在 Linux 系统中,有些操作要用到 root 权限,普通用户无权操作,而普通用户如果想使用到 root 权限就需要使用 sudo 指令,但使用 sudo 指令有个前提,那就是需要在 root 的配置文件中将该用户添加到信任列表中。
在 root 下,使用 vim /etc/sudoers 指令进入配置文件。
注意:进入配置文件后,不要使用滚轮,而是使用上下键滑动!!!
然后:wq!(强制退出)
3.vim的配置
a.基础配置---初步理解vim配置的原理
vim在启动时,会自动扫描当前用户家目录下的.vimrc文件,让.vimrc文件内容生效
vim配置,其核心就是向.vimrc文件里面添加更多的配置选项
b.直接自动化部署配置
yum list | grep lrzsz(查看lrzsz)
yum install lrzsz.x86_64(安装lrzsz.x86_64)
yum remove lrzsz.x86_64(删除lrzsz.x86_64)
ls /etc/yum.repos.d/ -l (查看yum安装源)
c.yum 扩展源
yum install -y epel-release
vim的配置(家目录下的.vimrc文件)
配置指令:curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
如果默认自动化配置完成,缩进是2个字符(阿里),想要改成四个字符缩进的话,操作如下
cd ~ (进入家目录) ——> vim .vimrc (打开配置文件) ——> 将 tabstop 改成4
wq (保存退出) ,即OK ~~
二.vim 各模式下的指令
1.底行模式下的指令
w!(退出 vim 时,对修改的内容进行保存) q!(退出 vim 时,不保存,强制退出)
set nu\number (对每行数据进行编号) set nonu (撤销行号)
! + cmd (在不退出vim的情况下,使用外界命令行中的指令)
/ + key (搜索关键词key,按n切换下一个)
2.命令模式下的指令
a.光标定位
h:光标左移
j:光标下移
k:光标上移
l:光标右移
gg:定位到代码的第一行
n + shift + g:定位到代码的第n行
shift + 6(^):定位到光标所在行的开始位置
shift + 4($):定位到光标所在行的结尾位置
*shift + 3(#):查找同名单词,按n进行切换
n + l:光标移动到当前行的第n列
w:以单词为单位,向后移动(支持换行)
b:以单词为单位,向前移动(支持换行
b.复制粘贴
n + yy:复制当前行在内的n行内容
n + yw:复制光标所在位置的n个单词
n + p:粘贴内容到当前行,粘贴n次
n + dd:剪切当前行在内的n行内容
u:撤销当前操作,返回到上一步
Ctrl + r:对撤销操作进行反撤销
c.文本数据替换
shift + ~:对文本当前字符进行大小写转换操作
n + r + x:将光标所在的多个字符替换成x,
shift + r:替换模式
n + x:向后删除n个字符
3.视图模式
Ctrl + v:命令模式进入视图模式
a.批量化注释
ctrl + v -> j/k 两个键上下选中区域 -> shift + i + // -> Esc 注:区间是前闭后开
b.批量化删除注释
ctrl + v -> hjkl(四个键上下选中区域) -> d
4.vim 多文件同屏编辑
在底行模式下:
vs + code.c 可以将 code.c 文件同屏打开
ctrl + ww 进行分屏切换
小技巧:vim + file + n 进入file文件的第n行
三.代码编译
1. gcc && g++ 简介
code.c/code.cc/code.cxx 在这些文件中,以 .c 为后缀的文件是C语言文件,以.cc和.cxx为后缀的文件是C++文件。
gcc 只能编译C语言代码,而 g++ 可以编译C语言代码和C++代码,例如:
① gcc test.c -o mybin.exe -std=c99 以c99的标准,将 test.c 文件编译生成的可执行程序名字设定为mybin.exe;
② g++ test.cc -o test -std=c++11 以c++11的标准,将 test.c 文件编译生成的可执行程序名字设定为 test。
2.编译器底层机制
a.预处理:gcc -E code.c -o code.i 1.头文件展开 2.去注释 3.条件编译* 4.宏替换
b.编译:gcc -S code.i -o code.s 将C/C++代码翻译成汇编代码
c.汇编:gcc -c code.s -o code.o 将汇编代码翻译成二进制机器码
d.链接:将 code.o文件链接动态库,最终生成可执行程序。
动态库:是C/C++或者其他第三方提供的所有方法的集合,被所有程序以链接的方式关联起来。
静态库:是C/C++或者其他第三方提供的所有方法的集合,被所有程序以拷贝的方式,将需要的代码,拷贝到自己的可执行程序中。
库中所有的函数都有入口地址,所谓的动态链接,其实就是把要连接的库中的函数地址拷贝到我们可执行程序的特定位置。
3. make/makefile
自动化构建代码
make:是一个命令
makefile:是一个在当前目录下存在的一个具有特定格式的文本文件
touch makefile/Makefile (创建makefile文件) vim makefile (编辑makefile文件)
在该makefile文件中,我们可以用 make 指令,来代替 gcc code.c -o mybin 指令,用 make clean指令,来代替 rm -f mybin 指令。make 可以有效提高我们对代码的编译效率~~
① .PHONY: 修饰得到目标称为伪目标,该目标总是被执行.
② @ + 指令 可以使指令不在屏幕上打印出来
③ 变量名的宏替换
④ $^代表依赖关系冒号右边的变量,$、@代表依赖关系左边的变量
4.ACM时间
编译是一个很耗时的过程,当有多个源文件时,部分源文件被修改,编译器只会再次编译那些被二次修改过的文件,以节省时间.
因为先有源文件,再有bin文件,所以bin文件的修改时间>源文件的修改时间.
当源文件被二次修改,此时源文件的修改时间>bin文件的修改时间.
所以,通过对比源文件和bin文件(可执行程序)的修改时间,可以判断该源文件是否被修改.
stat code.c 查看code.c文件的属性数据,其中就包括该文件的ACM修改时间
Access:文件最近一次的打开时间;
Modify:文件内容的修改时间;
Change:文件属性的修改时间;
修改Access或Modify任意时间都会改变Change时间,因为Access和Modify都是文件属性数据.
touch -a/c/m code.c 修改code.c文件的A/C/M时间
四. gdb 的使用
1.调试代码的工具---gdb
Liunx默认的发布版本是release版本 而只有debug版本下的代码可以被调试,若想使发布版本是debug版本,如 gcc test.c -o mybin -g 即加上一个 -g 命令即可.
如何进入gdb调试状态?—— gdb + mybin (可执行程序)
2. gdb 调试状态下的常用指令
① 查看代码信息
l (list) 显示代码段
l + n 从第n行开始展示代码 按回车 可以显示更多代码
r 进入调试状态 相当于VS中的F5
② 断点的使用
b + n 在第n行打一个断点
b + mycode.c: 20 在mycode.c文件的第20行打一个断点
b + fun (函数名) 是在该函数内的第一行打一个断点
d + num 去掉第num个断点
info b 查看所有断点
enable + num:使num号断点起作用
disable + num:使num号断点不起作用
注意:在一个gdb的调试周期中,断点的num是一直递增的,即不随断点的删除而重置;当退出gdb后,此前所打的所有断点都会被清除;gdb会记录最近的历史命令,直接回车就是上一个命令
③ 逐过程 && 逐语句
n 逐过程 相当于VS中的 F10 会跳过函数
s 逐语句 相当于VS中的 F11 会进入函数
c:直接运行到下一个断点处
until + n 直接运行到第n行
finish:直接运行到当前函数的结尾
④ 变量查看
p + 变量名或地址 = 查看该变量名或地址
display/undisplay + 变量名或地址 常显示/关闭该变量名或地址
bt:查看调用堆栈
set var + 变量名 = k 将该变量的值暂时改为k
quit 退出gdb调试状态