linux使用vscode加cmake代替vim、gcc、gdb、makefile编辑、构建、调试程序

vim简要介绍

什么是vi(vim)

vi (Visual interface)编辑器是 Linux 系统中最常用的文本编辑器,vi 在Linux界有编辑器之神的美誉,几乎所有的 Linux 发行版中都包含 vi 程序。

vi 工作在字符模式下,不需要图形界面,非常适合远程及嵌入式工作,是效率很高的文本编辑器,尽管在 Linux 上也有很多图形界面的编辑器可用,但vi的功能是那些图形编辑器所无法比拟的。

vim 是 vi 的升级版,它不仅兼容 vi 的所有指令,而且还有一些新的特性,例如 vim 可以撤消无限次、支持关键词自动完成、可以用不同的颜色来高亮你的代码。vim 普遍被推崇为类 vi 编辑器中最好的一个。

vim基本操作

打开文件

vim filename :打开或新建文件,并将光标置于第一行行首,如果文件不存在,则会新建文件。

打开不存在文件:

编辑文件

如果通过vi打开一个已经存在的文件,首先进入命令模式,此时输入的任何字符都被视为命令,不能输入内容。

在命令模式输入i即可进入编辑状态

6 保存文件

一定要先退出插入模式(按Esc进入命令模式),然后(小写状态下),shift + zz (按住 "shift" + 按两下"z"键),或者(大写状态下:ZZ) 即可保存退出当前文件。

第一步:进入命令模式(ESC)

第二步:shifit + z z

vim实用操作

命令模式下的操作

1 )切换到编辑模式

按键 功能
i 光标位置当前处插入文字
I 光标所在行首插入文字
o(字母) 光标下一行插入文字(新行)
O(字母) 光标上一行插入文字(新行)
a 光标位置右边插入文字
A 光标所在行尾插入文字
s 删除光标后边的字符,从光标当前位置插入
S 删除光标所在当前行,从行首插入

2) 光标移动

按键 功能
Ctrl + f 向前滚动一个屏幕
Ctrl + b 向后滚动一个屏幕
gg 到文件第一行行首
G(大写) 到文件最后一行行首,G必须为大写
mG或mgg 到指定行,m为目标行数
0(数字) 光标移到到行首(第一个字符位置)
$ 光标移到到行尾
l(小写L) 向右移动光标
h 向左移动光标
k 向上移动光标
j 向下移动光标
^ 光标移到到行首(第一个有效字符位置)

3 )复制粘贴

按键 功能
[n]yy 复制从当前行开始的 n 行
p 把粘贴板上的内容插入到当前行

4 )删除

按键 功能
[n]x 删除光标后 n 个字符
[n]X 删除光标前 n 个字符
D 删除光标所在开始到此行尾的字符
[n]dd 删除从当前行开始的 n 行(准确来讲,是剪切,剪切不粘贴即为删除)
dG 删除光标所在开始到文件尾的所有字符
dw 删除光标开始位置的字,包含光标所在字符
d0(0为数字) 删除光标前本行所有内容,不包含光标所在字符
dgg 删除光标所在开始到文件首行第一个字符开始的所有字符

5 )撤销恢复

按键 功能
. (点) 执行上一次操作
u 撤销前一个命令
ctrl+r 反撤销
100 + . 执行上一次操作100次

6 )保存退出

按键 功能
ZZ(shift+z+z) 保存退出

7 )查找

按键 功能
/字符串 从当前光标位置向下查找(n,N查找内容切换)
?字符串 从当前光标位置向上查找(n,N查找内容切换)

8 )替换

按键 功能
r 替换当前字符
R 替换当前行光标后的字符(ESC退出替换模式)

9 )可视模式

按键 功能
v 按字符移动,选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制
Shift + v 行选(以行为单位)选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制
Ctrl + v 列选 选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制

末行模式下的操作

1 )保存退出

按键 功能
:wq 保存退出
:x(小写) 保存退出
:w filename 保存到指定文件
:q 退出,如果文件修改但没有保存,会提示无法退出
:q! 退出,不保存

all 表示所有

2 )替换

按键 功能
:s/abc/123/ 光标所在行的第一个abc替换为123
:s/abc/123/g 光标所在行的所有abc替换为123
:1,10s/abc/123/g 将第一行至第10行之间的abc全部替换成123
:%s/abc/123/g 当前文件的所有abc替换为123
:%s/abc/123/gc 同上,但是每次替换需要用户确认
:1,$s/abc/123/g 当前文件的所有abc替换为123

3 )分屏

按键 功能
:sp 当前文件水平分屏
:vsp 当前文件垂直分屏
: sp 文件名 当前文件和另一个文件水平分屏
: vsp 文件名 当前文件和另一个文件垂直分屏
ctrl-w-w 在多个窗口切换光标
:wall/:wqall/:qall 保存/保存退出/退出所有分屏窗口
vim -O a.c b.c 垂直分屏
vim -o a.c b.c 水平分屏

4) 其它用法 ( 扩展 )

按键 功能
:!man 3 printf 在vim中执行命令 (q退出)
:r !ls -l 将ls -l执行的结果写入当前文件中
:r /etc/passwd 将/etc/passwd文件中的内容写入到当前文件中
:w /tmp/txt 将当前文件内容写入到/tmp/txt文件中
:w! /tmp/txt 强制将当前文件内容写入到/tmp/txt文件中
:1,10s/^/\/\//g 将第1行到10行行首添加// (^表示行首) /\/\转移字符
:1,10s#^#//#g 将第1行到10行行首添加// (#可以临时代替/ 分隔)
:%s/;/\r{\r\treturn0;\r}\r/g 将;替换成{ return 0; }
:1,10s#//##g 将第1行到10行行首去掉// (#可以临时代替/ 分隔)

gcc简要介绍

编辑器(如vi、记事本)是指我用它来写程序的(编辑代码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我们用编辑器编写程序,由编译器编译后才可以运行!

编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。

gcc(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,gcc同样适用于微软的Windows。

gcc最初用于编译C语言,随着项目的发展gcc已经成为了能够编译C、C++、Java、Ada、fortran、Object C、Object C++、Go语言的编译器大家

GCC工作流程和常用选项

gcc编译器从拿到一个c源文件到生成一个可执行程序,中间一共经历了四个步骤:

四个步骤并不是gcc独立完成的,而是在内部调用了其他工具,从而完成了整个工作流程:

gcc工作的流程

1hello.c代码:

复制代码
#include <stdio.h>

int main(void)
{

	printf("hello world");
	return 0;
}

第一步: 进行预处理

gcc -E 1hello.c -o 1hello.i

第二步: 生成汇编文件

gcc -S 1hello.i -o 1hello.s

第三步: 生成目标代码

gcc -c 1hello.s -o 1hello.o

第四步: 生成可以执行文件

gcc 1hello.o -o 1hello

第五步: 执行

./1hello

如果不指定输出文件名字, gcc编译器会生成一个默认的可以执行a.out

gcc常用选项

选项 作用
-o file 指定生成的输出文件名为file
-E 只进行预处理
-S(大写) 只进行预处理和编译
-c(小写) 只进行预处理、编译和汇编
-v / --version 查看gcc版本号
-g 包含调试信息
-On n=0~3 编译优化,n越大优化得越多
-Wall 提示更多警告信息
-D 编译时定义宏

gdb简要介绍

GDB主要帮忙你完成下面四个方面的功能:

  1. 启动程序,可以按照你的自定义的要求随心所欲的运行程序。
  2. 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
  3. 当程序被停住时,可以检查此时你的程序中所发生的事。
  4. 动态的改变你程序的执行环境。

基本的断点调试,数据查看等功能可以自己搜索相关博客查看,这里不再赘述,gdb调试程序还是比较繁琐麻烦,需要输入指令例如:

b: b 20 在20行位置设置断点。

run/r: 运行程序

n/next: 下一条指令(会越过函数)

s/step: 下一条指令(会进入函数)

p/print:p i 查看变量的值。

continue:继续执行断点后续指令。

finish:结束当前函数调用。

quit:退出gdb当前调试。

大多数人习惯用Windows下的Visual Studio 进行编译调试程序方便得多,例如 F9设置断点,F10单步执行等,但linux下不提供Visual Studio,所以我建议使用vscode进行调试方便得多。

makefile简要介绍

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令

Makefile带来的好处就是------"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

make 主要解决两个问题:

1) 大量代码的关系维护

大项目中源代码比较多,手工维护、编译时间长而且编译命令复杂,难以记忆及维护

把代码维护命令及编译命令写在makefile文件中,然后再用make工具解析此文件自动执行相应命令,可实现代码的合理编译

2) 减少重复编译时间

在改动其中一个文件的时候,能判断哪些文件被修改过,可以只对该文件进行重新编译,然后重新链接所有的目标文件,节省编译时间

基本的语法规则、命令格式等功能可以自己搜索相关博客查看,这里不再赘述,

CMake 是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile(通过 make 命令进行项目的构建),大多是IDE软件都集成了make,比如:VS 的 nmake、linux 下的 GNU make、Qt 的 qmake等,如果自己动手写 makefile,会发现,makefile 通常依赖于当前的编译平台,而且编写 makefile 的工作量比较大,解决依赖关系时也容易出错。

而 CMake 恰好能解决上述问题, 其允许开发者指定整个工程的编译流程,在根据编译平台,自动生成本地化的Makefile和工程文件,最后用户只需make编译即可,所以可以把CMake看成一款自动生成 Makefile的工具。所以我更建议大家学习cmake,用cmake自动生成 Makefile。

cmake的相关教程用例可参考我的专栏:

CMake_Little-Hu的博客-CSDN博客

vscode加cmake编译调试程序

linux下关于vscode和cmake的配置可参考博客:

vscode与cmake在linux下的配置使用_linux vscode cmake-CSDN博客

调试程序的话需要配置vscode的launch.json和tasks.json文件,这两个文件主要用于启动和管理你项目的构建以及调试任务。配置好这两个文件之后,不需要在终端使用命令行去一步步编译和运行,比如cmake、make、./main等命令,可以直接打断点运行调试,配置教程可参考博客:

VScode加cmake 调试教程之tasks.json和launch.json的配置-CSDN博客

配置成功后便可和Visual Studio 一样一键式调试程序,调试方法和Visual Studio一致。

相关推荐
Insist7532 分钟前
linux操作系统---小白玩转shell脚本
linux·运维·服务器
Xの哲學35 分钟前
hostapd状态机解析
linux·网络·算法·wireless
孞㐑¥38 分钟前
Linux之线程同步与互斥
linux·c++·经验分享·笔记
yangshuo12811 小时前
解决node项目nginx静态缓存导致项目重建后页面无变化问题
linux·nginx·缓存
独行soc2 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 01(题目+回答)
linux·科技·安全·面试·职场和发展·区块链
独行soc3 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 02(题目+回答)
linux·科技·安全·面试·职场和发展·渗透测试·区块链
小天源3 小时前
Visual Studio Code 1.101下载
ide·vscode·编辑器
hola1738414393 小时前
node.js在vscode的配置
ide·vscode·node.js
海上彼尚3 小时前
NestJS中实现动态Cron任务管理
linux·服务器·ubuntu·node.js
cui_win3 小时前
【内存】Linux 内核优化实战 - vm.max_map_count
linux·运维·jenkins