滨州网站网站建设,网站类型案例,WordPress数据库备份还原,网站建设费财务列账vim详解 引言vimVim的三种模式及模式切换普通模式下操作底行模式下操作 gcc与ggcc的使用#xff08;g类似#xff09;预编译编译汇编链接静态库与动态库 总结 引言
vim#xff08;vi improved#xff09;编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳… vim详解 引言vimVim的三种模式及模式切换普通模式下操作底行模式下操作 gcc与ggcc的使用g类似预编译编译汇编链接静态库与动态库 总结 引言
vimvi improved编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳转、语法高亮等方便编程的功能特别丰富在程序员中被广泛使用。 vim 可以说是程序开发者的一项很好用的工具它更是一个程序开发工具而不只是文字处理软件。 在vim中编辑代码可以使程序员的手指集中在键盘中央从而提高效率。
在vim中编辑代码后要执行代码就需要编译器在Linux中使用gcc与g编译C与C代码
vim
为方便演示我们touch一个test_vim.c文件并使用vim 文件名以vim方式打开这个文件
Vim的三种模式及模式切换
vim编辑器有许多模式在这里只介绍三种常用的模式命令普通模式Normal mode、底行模式Last line mode、插入模式Insert mode 命令模式(Normal mode) 控制屏幕光标的移动字符、字或行的删除移动复制某区段及进入到Insert mode或者到 last line mode下
使用vim 文件名 打开后的状态就是命令正常模式
插入模式(Insert mode) 只有在Insert mode下才可以做文字输入是使用的最频繁的编辑模式。在命令模式下按i即可进入该模式按Esc键可回到命令行模式 这个模式中可以正常编辑代码就不赘述了。
末行模式(last line mode) 文件保存或退出也可以进行文件替换找字符串列出行号等操作。 在命令模式下按: 即可进入该模式按Esc键可回到普通模式
普通模式下操作
由于空文件下无法观察普通模式的操作所以先使用插入模式在test_vim.c文件中输入一些内容
常用命令 移动光标 小写英文字母h、j、k、l分别控制光标左、下、上、右移一格 G移动到文章的最后 $ 移动到光标所在行的“行尾” ^移动到光标所在行的“行首” w光标跳到下个字的开头 e光标跳到下个字的字尾 b光标回到上个字的开头 #l光标移到该行的第#个位置 gg进入到文本开始 ctrl b屏幕向后移动一页 ctrl f屏幕向前移动一页 ctrl u屏幕向后移动半页 ctrl d屏幕向前移动半页 移动光标的命令就不举例使用了 删除文字 x每按一次删除光标所在位置的一个字符 #x表示删除光标所在位置的后包含自己在内#个字符 X每按一次删除光标所在位置的前一个字符 #X表示删除光标所在位置的前#个字符 dd删除光标所在行 #dd从光标所在行开始删除#行 复制 yw将光标所在之处到字尾的字符复制到缓冲区中 #yw复制#个字到缓冲区 yy复制光标所在行到缓冲区。 #yy表示拷贝从光标所在行向下#行文字 p将缓冲区内的字符贴到光标所在位置 需要注意的是所有与y有关的复制命令都必须与p配合才能完成复制与粘贴功能 替换 r替换光标所在处的字符。 R替换光标所到之处的字符直到按下Esc键为止。 撤销上一次操作 u回到上一个操作按多次可以执行多次回复 ctrl r: 撤销的恢复 更改 cw更改光标所在处的字到字尾处 c#w表示更改#个字符 跳至指定的行 ctrlg 列出光标所在行的行号 #G表示移动光标至文章的第#行行首
底行模式下操作
常用命令 列出行号 set nu: 在文件中的每一行前面列出行号。 我使用的vim环境已经是配置过的所以会默认显示行号 跳到文件中的某一行 #:跳到第#行 查找字符 /关键字: 先按「/」键再输入您想寻找的字符如果第一次找的关键字不是您想要的可以一直按n会往后寻找 ?关键字先按「?」键再输入您想寻找的字符如果第一次找的关键字不是您想要的可以一直按n会往前寻找 保存与退出 w: 可以将文件保存起来使用强制保存 q退出vim后加!强制离开vim wq保存并退出
gcc与g
在之前的C语言部分我们知道我们所写的C代码要经过一系列处理为可执行程序后才能被系统执行其中包括预编译、编译、汇编、链接
在Windows环境下我们经常使用Visual Studio、DevC、VC等开发环境环境进行代码的编写、编译与运行。而在Linux下我们使用vim编写代码后就使用gcc与g编译C与C代码
gcc的使用g类似
首先创建一个test_gcc.c文件并使用vim在其中编辑一段代码
预编译
在预编译中会进行头文件包含、宏替换、注释删除、条件编译等在Linux中执行完预编译后会生成一个.i文件
使用 gcc -E 依赖文件 -o 目标.i文件 就可以实现将原文件只处理到预编译结束生成.i文件为止
我们可以使用vim打开这个test_gcc.i文件查看预编译后的代码 可以看到与之前的代码对比将stdio.h文件拷贝到这里并删除了注释将M替换为100。
编译
编译即将预编译后的文件转化为汇编代码在这之前还需要做词法分析、语法分析、语义分析、代码优化等的行为在这过程中将会检查代码中的错误即编译错误。编译结束后会生成一个.s文件
使用gcc -S 原文件 -o 目标.s文件 就可以实现将原文件只处理到编译结束生成.s文件中止原文件可以为.c文件也可以是已经预编译后的.i文件 当然我们也可以使用vim查看这个.s文件
汇编
汇编即将之前生成的汇编代码生成目标代码在这里就是机器可识别的二进制代码这其中还要进行符号表的生成等符号与其地址之后会生成一个.o文件
使用 gcc -c 原文件 -o 目标.o文件 就可以将原文件处理到汇编结束生成.o文件为止原文件可以为之前的任意状态的文件 我们当然也可以通过vim查看这个.o文件但这并没有什么意义因为完全看不懂这里就不展示了
链接
在进行完之前的处理后就需要将我们写的文件与库或者与我们写的其他文件链接起来最终生成一个可执行程序。这个过程中会重新定位符表 使用 gcc 原文件 -o 可执行文件 就可以实现将之前任一状态的文件处理后进行链接从而生成一个可执行程序 ./打开这个可执行程序就可以运行了
需要注意的是当编辑的代码中含有C99标准及以后的语法时需要在编译时加上 -stdc99 选项
静态库与动态库
我们在文件中包含的stdio.h只是头文件即声明。而这些函数的定义是在库中的这也就是为什么我们需要将我们写的代码与库进行链接后才能生成可执行程序。 系统中有两种类型的库即静态库与动态库。
静态库是指编译链接时把库文件的代码全部加入到可执行文件中。所以生成的文件比较大但在运行时也就不再需要库文件了其后缀名一般为.a 动态库是在编译链接时并没有把库文件的代码加入到可执行文件中而是在程序执行时由运行时链接文件加载库这样可以节省系统的开销。动态库一般后缀名为.so
gcc 在编译时默认使用动态库可以通过file查看
总结
到此关于Linux工具中的编译器vim与编译器gcc/g就介绍完了 在下一篇文章中将介绍其余的Linux工具希望大家持续关注哦
如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题欢迎大家在评论区提出
如果本文对你有帮助希望一键三连哦
希望与大家共同进步哦