Linux工具【1】(编辑器vim、编译器gcc与g++)

发布于:2025-03-16 ⋅ 阅读:(13) ⋅ 点赞:(0)

目录

🌟1.什么是vim?

🌟2.Vim的三种模式及模式切换 

1. 命令(普通)模式(常用指令)

2. 底行模式(常用指令)

3.插入模式

🌟3.gcc与g++ 

gcc的使用(g++类似)

1. 预编译

2.编译

3.汇编

4.链接

🌟4.静态库与动态库 

🌟5.完结 


 再见已是八转之下第一人

 

🌟1.什么是vim?

vim(vi improved)编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳转、语法高亮等方便编程的功能特别丰富,在程序员中被广泛使用。
vim 可以说是程序开发者的一项很好用的工具,它更是一个程序开发工具而不只是文字处理软件。


在vim中编辑代码后,要执行代码就需要编译器,在Linux中使用gccg++编译C与C++代码

到这里肯定有很多人还不懂?那么,我们接着往下看


1.1 vim展示(只是展示一下效果)

此图为vim模式下的一个展示,我们可以在其中编译代码

🌟2.Vim的三种模式及模式切换 

vim编辑器有许多模式,在这里介绍三种常用的模式:

命令(普通)模式、底行模式、插入模式

只要掌握这三种模式,就可以实现很多的功能


我们先看这样一张图,稍后解释->:

接下里开始解释->:

vim是一种多模式编译器,那么我们在日常使用vs2022时,其实就是对文件进行操作,而vim也是对文件进行操作,只不过vim有很多种模式,所以可以说是多模式文本编译器


在我们直接使用vim后进入的界面,就是普通模式,效果图如下->:

这两张图片的顺序就是产生效果的顺序


接下来介绍三种模式的功能->:

• 正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符、字或⾏的删除,移动复制某区段及进⼊Insert mode下,或者到 last line mode

• 插⼊模式(Insert mode)
只有在Insert mode下,才可以做⽂字输⼊,按「ESC」键可回到命令⾏模式。该模式是我们后⾯⽤ 的最频繁的编辑模式。

• 末行模式(last line mode)

⽂件保存或退出,也可以进⾏⽂件替换,找字符串,列出⾏号等操作。
在命令模式下,*shift+:* 即可进⼊该模式。要查看你的所有模式:打开 vim,底⾏模式直接输⼊ :help vim-modes

说是三种模式,其实每一种模式里面无非就是一些常用命令,用的熟练了就会使用了


1. 命令(普通)模式(常用指令)

如果出现单点没反应请先同时shift键,不需要一直摁

1.1 移动光标指令->:
小写英文字母h、j、k、l,分别控制光标左、下、上、右移一格:(也可以用上下左右)
G:移动到文章的最后
$ :移动到光标所在行的“行尾”
^移动到光标所在行的“行首”
w:光标跳到下个字的开头
e:光标跳到下个字的字尾
b:光标回到上个字的开头
#l:光标移到该行的第#个位置
gg:进入到文本开始
ctrl + b:屏幕向后移动一页
ctrl + f:屏幕向前移动一页
ctrl + u:屏幕向后移动半页
ctrl + d:屏幕向前移动半页
(移动光标的命令就不举例使用了)

1.2 删除文字


x:每按一次,删除光标所在位置的一个字符
#x:表示删除光标所在位置的后(包含自己在内)#个字符
X:每按一次,删除光标所在位置的前一个字符
#X:表示删除光标所在位置的前#个字符
dd:删除光标所在行
#dd:从光标所在行开始删除#行


这里展示一下 #x (#d,#X)同理

首先我们对于想删除的内容摁下 shift+# ,效果如下图->:

可以发现,"abcdefg"变成了黄色的,此时光标所在的位置,就代表我们从哪里要开始删除字符,接着我们摁下数字键3,再摁下x,就会删除从光标位置开始3个字符,效果如下->:


1.3 复制
yw将光标所在之处到字尾的字符复制到缓冲区中
#yw复制#个字到缓冲区
yy复制光标所在行到缓冲区。
#yy表示拷贝从光标所在行向下#行文字
p将缓冲区内的字符贴到光标所在位置
需要注意的是:所有与  有关的复制命令都必须与 配合才能完成复制与粘贴功能

(即,先执行与y有关的命令,最后摁下 p )


1.4 替换
r替换光标所在处的字符。
R替换光标所到之处的字符,直到按下Esc键为止


这里的 r/R 意味着我们可以对内容进行更改

而小r在更改完后光标不会移动,R在更改完后光标会向右移动一位,如果不想继续更改了摁下Esc即可


1.5 撤销上一次操作

u: 回到上一个操作,按多次可以执行多次回复
ctrl + r:  撤销的恢复


1.6 更改

cw更改光标所在处的字到字尾处
c#w表示更改#个字符


1.7 跳至指定的行

ctrl+g 列出光标所在行的行号
#G表示移动光标至文章的第#行行首


1.8 保存并退出

  • 先按键盘 Esc 键,确保进入命令模式。
  • 输入 :q!(强制退出,不保存修改)或 :wq(保存并退出),再按回车。

2. 底行模式(常用指令)

2.1 列出行号
set nu:  在文件中的每一行前面列出行号。


2.2 跳到文件中的某一行
#: 跳到第#行


2.3 查找字符
/关键字:   先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往后寻找
?关键字:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往前寻找


2.4 保存与退出
w:   可以将文件保存起来,使用!强制保存
q: 退出vim,后加!强制离开vim
wq:保存并退出


3.插入模式

插入模式下进行编写代码即可


我们再回到这一张图上

这里我们解释一下,最开始我们进入的模式为普通模式,在普通模式下摁 : 即可进入底行模式,如果想从底行模式返回普通模式,直接无脑Esc即可,因为任何模式摁Esc都是返回普通模式,以此类推即可

🌟3.gcc与g++ 

 在之前的C语言部分,我们知道我们所写的C代码要经过一系列处理为可执行程序后才能被系统执行(即变为可执行程序),其中包括预编译、编译、汇编、链接


在Windows环境下我们经常使用Visual Studio、DevC、VC等开发环境环境进行代码的编写、编译与运行。而在Linux下我们使用vim编写代码后,就使用gccg++编译C与C++代码


gcc的使用(g++类似)

首先创建一个test_gcc.c文件,并使用vim在其中编辑一段代码:

为了变为可执行程序,接着它会进行如下操作->:


1. 预编译

在预编译中会进行头文件包含、宏替换、注释删除、条件编译等,在Linux中执行完预编译后会生成一个.i文件

使用 gcc -E 依赖文件 -o 目标.i文件 就可以实现将原文件只处理到预编译结束,生成.i文件为止

我们可以使用vim打开这个test1.i文件查看预编译后的代码:

(不展示了,vim打开后一直到最后就是我们写的代码,约900行左右位置)


2.编译

编译即将预编译后的文件转化为汇编代码,在这之前还需要做词法分析、语法分析、语义分析、代码优化等的行为,在这过程中将会检查代码中的错误(即编译错误)。编译结束后会生成一个.s文件

使用gcc -S 原文件 -o 目标.s文件 就可以实现将原文件只处理到编译结束,生成.s文件中止,(原文件可以为.c文件,也可以是已经预编译后的.i文件)

当然我们也可以使用vim查看这个.s文件


3.汇编

汇编即将之前生成的汇编代码生成目标代码(在这里就是机器可识别的二进制代码),这其中还要进行符号表的生成等(符号与其地址),之后会生成一个.o文件

使用 gcc -c 原文件 -o 目标.o文件 就可以将原文件处理到汇编结束,生成.o文件为止(原文件可以为之前的任意状态的文件)

我们当然也可以通过vim查看这个.o文件


4.链接

在进行完之前的处理后,就需要将我们写的文件与库,或者与我们写的其他文件链接起来,最终生成一个可执行程序。这个过程中会重新定位符表

使用 gcc 原文件 -o 可执行文件 就可以实现将之前任一状态的文件处理后进行链接从而生成一个可执行程序

./打开这个可执行程序就可以运行了:


需要注意的是,当编辑的代码中含有C99标准及以后的语法时,需要在编译时加上 -std=c99 选项

🌟4.静态库与动态库 

我们在文件中包含的stdio.h只是头文件,即声明。而这些函数的定义是在库中的,这也就是为什么我们需要将我们写的代码与库进行链接后才能生成可执行程序。 系统中有两种类型的库,即静态库与动态库


静态库是指编译链接时,把库文件的代码全部加入到可执行文件中。所以生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为.a


动态库是在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为.so


gcc 在编译时默认使用动态库(可以通过file查看):

🌟5.完结