一、编辑器vi
1、vi是Linux系统中一种文本编辑器,vim 是vi的高级版本,兼容vi,功能更强大。
2、基本操作
(1)进入vim:vim
vim可以自动帮你载入所要编辑的文件或是开启一个新文件。进入vim后屏幕左方会出现波浪符号,凡是列首有该符号就代表此列目前是空的。
(2)离开vim:
:q 退出vim
:q! 不保存强制退出vim
:wq 保存后再离开
:x 保存后再离开
3、Vi的三种模式
(1)命令行模式
①开始编辑命令
i 在光标前输入文本
I 在当前行开始输入文本
o 在当前行后输入新一行
O 在当前行前输入新一行
②光标移动命令
b 移动到当前单词的开始
e 移动到当前单词的结尾
w 向后移动一个单词
h 向前移动一个字符 ←
j 向下移动一行 ↓
k 向上移动一行 ↑
l 向后移动一个字符 →
③删除命令
x 删除光标所在的字符
dd 删除当前行
ndd 删除当前行以后的n行
④改变与替换操作命令
⑤拷贝和粘贴命令
yy 将当前行复制到粘贴板
nyy 将当前行后的n行复制到粘贴板
p 将粘贴板中的内容粘贴在光标后
⑥其他有用的命令
nG 跳到第n行
u 撤销
gg 移动到第一行行首
G 移动到最后一行行首
nx 删除n个字符
n+ 向后跳转n行
n- 向前跳转n行
n↑↓←→ 向上下左右跳转n次
(2)底行模式
①设置vi
:set number等于:set nu 显示行号
: set nonumber等于:set nonu 隐藏行号
:set autoindent 智能缩进
:set mouse=a 开启鼠标
②文件保存及退出命令
:w filename 另存为文件 filename
:wq 保存退出
:x 同 :wq
ZZ 同 :wq
③查询命令
/abc 向后查询abc
?abc 向前查询abc
n 向后继续查询
N 向前继续查询
④替换与查找
:s/old/new 替换该行第一个old为new
:s/old/new/g 可以替换全行中所有的old为new
:#,#s/old/new/g 替换两行之间出现的old为new,#,#为两行的行号
:%s/old/new/g 替换全文的old为new
:%s/old/new/gc 全文替换前需确认
(3)插入模式
二、编译器gcc
1、.c为后缀的文件,c语言源代码文件;
.h为后缀的文件,是程序包含的头文件;
.i为后缀的文件,是已经预处理过的c源代码文件;
.s为后缀的文件,是汇编语言源代码文件
.o为后缀的文件,是编译后的目标二进制文件;
2、编译过程
(1)预处理
预处理器(cpp)根据以字符#开头的命令,修改原始c程序。
gcc -E hello.c -o hello.i
(2)编译
gcc -S hello.i -o hello.s
(3)汇编
gcc -c hello.s -o hello.o
(4)链接
gcc hello.o -o hello
3、其他注意事项
(1)gcc example.c -o example 直接生成可执行文件
(2)./example 运行可执行文件
(3)若不使用 -o 则生成可执行文件 a.out
(4)Linux头文件默认放在/usr/include中
三、调试器Gdb
1、首先使用Gcc进行编译
gcc -g func.c -o test
gdb test
2、常用命令
(1)l(list) 一次列出10行代码(list n,m #列出n~m行)
(2)r(run) 执行程序(未设置断点,将程序执行完毕)
(3)b(break) b+行号,在该行设置断点
(4)c(continue) 当程序运行时,继续运行程序,直到遇到断点
(5)i b(info break) 查看断点信息
(6)d+编号 (delete)删除该断点(d删除所有断点)
(7)clear+行号 删除指定行断点(不加行报错)
(8)p(print) p+变量名,显示变量的值
(9)s(step) 单步执行(进入调用函数)
(10)n(next) 不进入调用的函数,只在主函数中运行
(11)return/finish 退出step进入的调用函数
(12)q(quit) 退出gdb调试
四、makefile 工程管理器
makefile 是 make 读入的唯一配置文件
1、makefile的基本格式:target:dependency
(Tab字符)command
2、makefile中变量的使用
OBJECTS = sum.o sub.o operator.o 定义变量
$(OBJECTS) 使用变量
3、makefile的自动推导(隐晦规则)
GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,make会自动识别,并自己推导命令。只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中。如:如果make找到一个main.o,那么main.c就会是main.o的依赖文件。并且gcc -c main.c -o main.o也会被推导出来。