文章目录
Linux 工具使用:Vim 、 GCC
5.vim使用
vim是Linux系统里的一款文本编辑器,当然也可以选择vscode配置编程环境 ,或者使用vs2019使用ssh技术在windows下编程,发送到Linux下编译。
这里简单介绍纯粹的vim编辑器的使用方法
#Ubuntu 中安装 vim
$sudo apt install vim
#CentOS 中安装 vim
$sudo yum install vim
5.1vim的模式
vim中有三种模式 :命令模式、末行模式、编辑模式 ,以vim方式打开文件默认进入命令模式
命令模式:
可以查看文件内容、简单修改文件、搜索等操作
编辑模式:
可以对文件内容修改
末行模式:
可以执行Linux命令 ,保存文件,跳转等操作
编辑模式和末行模式之间是不能相互直接切换的
[
5.2 命令模式操作
通过vim打开一个文件,如果文件不存在及会创建一个新文件
#打开文件
$vim 文件名 (默认命令模式)
#保存退出
#连续按两次 z (按shift 切换大写)
ZZ
代码对齐
假设c/c++ 代码格式比较乱,可以在命令行模式下快速代码格式化,使代码美观
#通过命令行对齐代码
#最后的字符为G (按shift 切换大写)
gg = G
光标移动
光标的上下左右移动可以直接使用方向键(↑, ↓, ←, →) ,可也使用 h, j,k,l
快捷键 | 功能 |
---|---|
gg | 光标移动到文件头 |
G | 光标移动到文件尾 |
n G | 行跳转,光标移动到 第n行 |
n 回车 | 行数向下跳转 n行 |
删除:
用不习惯还是按a 进入编辑模式操作
vim中的删除原理就是剪切
快捷键 | 功能 |
---|---|
x(小写) | 删除光标后面字符 |
X(大写) | 删除光标前面字符 |
dw | 删除单词(需要将光标移动单词首字符) |
dd | 删除光标所在行 |
复制和粘贴
快捷键 | 功能 |
---|---|
p(小写) | 粘贴在光标行下面 |
P(大写) | 粘贴在光标行上面 |
撤销和反撤销
快捷键 | 功能 |
---|---|
u | 撤销 |
ctrl + r | 反撤销 |
5.3 末行模式操作
命令模式 -> 末行模式 (shift :)
末行模式 -> 命令模式 (两次 Esc)
保存退出
使用vim编辑后,保存文件并退出在末行模式下完成
快捷键 | 功能 |
---|---|
q | 退出,未保存(会提示保存) |
q! | 强制退出(不提示保存) |
w | 保存,不退出 |
wq | 保存并退出 |
x | 保存并退出 |
替换
在末行模式下可以指定对应内容 ,替换为指定文本 (几行或全文)
快捷键 | 功能 |
---|---|
s / 被替换的关键字 / 新关键字 / g | 对光标所在行替换 |
行号 1, 行号 2s / 被替换的关键字 / 新的关键字 /g | [行号1 , 行号2] 是一个从小到大的范围,对这个范围进行替换 |
% s / 被替换的关键字 / 新的关键字 /g |
% 代表对所有行进行替换 |
6.gcc
GCC是Linux下一个编译工具集 ,包含 gcc \ g++等编译器
,GCC不仅支持C/C++,其他语言如 Objective -C \java等根据不同硬件平台编译,也能交叉编译。A平台编译B平台程序
部分Linux默认不带gcc编译器需要手动安装
#Ubuntu
$sudo apt update #更新本地软件下载列表,获得最新下载地址
$sudo apt install gcc g++
#CentOS
$sudo yum update
$sudo yum install gcc g++
#查看版本
$gcc -v
$g++ -v
6.1 gcc运行流程
编译器对程序的编译有4个阶段 :预处理(预编译) 、 编译和优化 、 汇编 、 链接
- 预处理: 展开头文件 、 宏替换 、 去点注释行 (GCC调用预编译器,得到还是源文件,文本格式)
- 编译: GCC调用编译器 ,将文本编译为汇编文件
- 汇编: GCC调用汇编器 ,将汇编文件编译为二进制文件
- 链接: GCC调用汇编器 ,对程序需要调用的库进行链接,得到可执行的二进制文件
gcc参数 | 文件后缀 | 说明 |
---|---|---|
.c | 源文件 | |
-E | .i | 预处理后的源文件 |
-S | .s | 汇编源文件 |
-C | .o | 汇编后的二进制文件 |
细分gcc流程:了解即可
#预处理 -E -o 用来指定 文件名
$gcc -E demo.c -o demo.i
#编译 -S,获得汇编文件
$gcc -S demo.i -o demo.s
#汇编 -c,获得二进制文件
$gcc -c demo.i -o test.o
#链接 ,将二进制文件和标准库链接 ,获得可执行二进制文件
$gcc test.o -o test
gcc 编译单个文件很简单 (常用)
#常用方式
$ gcc 源文件名 -o 指定文件名
#如没有指定生成文件名 gcc会自动生成 a.out可执行二进制文件
$gcc 源文件
6.2 gcc 常用参数
gcc 参数 | 作用 |
---|---|
-E | 预处理源文件 |
-S | 编译指定源文件 |
-c | 编译、汇编源代码 ,但不链接 |
-o (常用) |
将编译的文件 取名 |
-I (制作静/动态库时常用) |
编译的时候,指定使用的库 |
-L (使用静/动态库时常用) |
指定include 包含文件 搜索目录 |
-D (为便于调试时 使用) |
编译时指定一个宏 |
-g | 编译时生成调试信息 |
6.3 多文件编译
例如一个项目中有三个文件 ,addNum.h \ addNum.cpp \ main.cpp ,main.cpp中调用addNum.cpp函数
addNum头文件
#include<iostream>
using namespace std;
int addNum(int a,int b);
addNum源文件
#include "addNum.h"
int addNum(int a,int b)
{
return a+b;
}
main源文件
#include<iostream>
#include "addNum.h"
using namespcae std;
int main()
{
int a =10,b = 20;
int c = addNum(a,b);
cout<<"c = "<<c<<endl;
return 0;
}
因为头文件是包含在源文件中的,因此在使用 gcc 编译程序的时候不需要指定头文件的名字(在头文件无法被找到的时候需要使用参数 -I 指定其具体路径而不是名字)
#将文件打包编译
$g++ addNum.cpp main.cpp -o test
#运行可执行程序
$./ test