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

发布于:2025-06-21 ⋅ 阅读:(16) ⋅ 点赞:(0)

 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必须为大写

mGmgg

到指定行,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)查找

按键

功能

/字符串

从当前光标位置向下查找(nN查找内容切换)

?字符串

从当前光标位置向上查找(nN查找内容切换)

8)替换

按键

功能

r

替换当前字符

R

替换当前行光标后的字符(ESC退出替换模式)

9)可视模式

按键

功能

v

按字符移动,选中文本,可配合hjkl选择内容,使用d删除,使用y复制

Shift + v

行选(以行为单位)选中文本,可配合hjkl选择内容,使用d删除,使用y复制

Ctrl + v

列选 选中文本,可配合hjkl选择内容,使用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、记事本)是指我用它来写程序的(编辑代码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我们用编辑器编写程序,由编译器编译后才可以运行!

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

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

gcc最初用于编译C语言,随着项目的发展gcc已经成为了能够编译CC++JavaAdafortranObject CObject 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都有这个命令,比如:DelphimakeVisual C++nmakeLinuxGNUmake。可见,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一致。


网站公告

今日签到

点亮在社区的每一天
去签到