VIM的使用以及Makefile的编写 |
您所在的位置:网站首页 › vim新建文件在哪个文件夹下找 › VIM的使用以及Makefile的编写 |
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/aaronlanni/article/details/79792927
一、有关vi与vim 1、概念 - vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,我们将会在Linux的世界里畅行无阻。 - vim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计;因为程序简单,编辑速度相当快速。 - vim可以当作vi的升级版本,他可以用多种颜色的方式来显示一些特殊的信息。 - vim会依据文件扩展名或者是文件内的开头信息, 判断该文件的内容而自动的执行该程序的语法判断式,再以颜色来显示程序代码与一般信息。 - vim里面加入了很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。 总之,这对于我们在Linux上进行一些配置文件的修改工作时是很棒的功能。 2、模式 vim目前总共有12种模式,其中对于我们目前来说,底行模式,插入模式,命令模式,下面我们来一一来介绍这些模式。 二、VIM的使用 1、几种常用模式 - 正常/命令模式:控制屏幕光标的移动,字符、字或⾏行的删除,移动复制某区段及进入Insert mode下,或者到 lastline mode。 - 插入模式(Insert mode)只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。 - 末行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 - 在命令模式下,shift+: 即可进⼊入该模式。要查看你的所有模式:打开vim,底行模式直接输⼊。 2、几种模式的转换 几种特殊用法:按shift %可查找括号匹配(光标跳转) 跳转至下一个顶格的大括号(函数查找){{(两个) * 末行模式 注意:在使⽤用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进⼊末⾏模式。 1)列出行号 「set nu」: 输⼊「set nu」后,会在文件中的每一行前面列出行号 !man 函数名:可查找函数的具体定义 2)跳到⽂件中的某一⾏ 「#」:「#」号表示一个数字,在冒号后输⼊一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到⽂章的第15行。 3)查找字符 「/关键字」: 先按「/」键,再输⼊您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往后寻找到您要的关键字为止。 「?关键字」:先按「?」键,再输⼊您想寻找的字符,如果第⼀次找的关键字不是您想要的,可以⼀直按「n」会往前寻找到您要的关键字为止。 问题:/ 和 ?查找有和区别? /:利用这种方式查找是正向查找,按照从头到尾的顺序查找 ?:这种方式的查找是按照反向查找,是按照从尾到头的顺序开始查找 两种查找方式,均是循环式的查找,第一次出现的位置都是该字符第一次出现的所在行。 4)替换字符 :s /SEARCH/REPLACE/g 注:把当前光标所处的行中的SEARCH单词,替换成REPLACE,并把所有SEARCH高亮显示; :%s /SEARCH/REPLACE 注:把文档中所有SEARCH替换成REPLACE; :#,# s /SEARCH/REPLACE/g 注:#号表示数字,表示从多少行到多少行,把SEARCH替换成REPLACE; 注:在这之中,g表示全局查找;我们注意到,就是没有替换的地方,也会把SEARCH高亮显示; 在底行模式下:vsp +目标文件 进行分屏模式 Ctrl+ww切换光标的位置 多个文件之间的切换:例如从add.c切换到add.h gt切换标签页, g+shift+t 反向切换 r add.c 将add.c中的内容全部加载到当前文件中,最后在替换 * 可视模式 选择多行 shift v:按行选择 ctrl v :按列选择 在Linux中一次注释多行:在Windows下的方法也可用,这块将一种特殊的方法 Ctrl v进入可视化模式中的按列选择,按列选中需要注释的几行——>shift i +//(注释符),此处已经注释——->按Esc键回到正常模式,此处已经显示注释多行 一次删除多行注释:按Ctrl v进入可视化模式中的按列选择,按列选中需要取消注释的几行,注意此处在按列选择中只选择//(注释符两个字符)—–>x 删除 三、有gcc/g++ (一)背景知识(详细过程请参考《程序员的自我修养》) 预处理(进行宏替换).i 编译(生成汇编).s 汇编(生成机器可识别代码).o 链接(生成可执行文件或者库文件) (二)gcc过程 * 预处理 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作⽤用是让 gcc 在预处理结束后停⽌止编译过程。 选项“-o”是指目标文件,“.i”⽂件为已经过预处理的C原始程序。 * 编译 在这个阶段中,gcc ⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。 用户可以使⽤用“-S”选项来进行查看,该选项只进⾏行编译而不进行汇编,生成汇编代码。 实例: gcc –S hello.i –o hello.s * 汇编 汇编阶段是把编译阶段生成的“.s”文件转成目标文件 在此可使⽤用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了 实例: gcc –c hello.s –o hello.o * 链接 在成功编译之后,就进入了链接阶段。 实例: gcc hello.o –o hello (三)gcc总结 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件⾥里⾯面-S 编译到汇编语⾔言不进行汇编和链接-c 编译到目标代码-o ⽂文件输出到 ⽂文件-static 此选项对⽣生成的⽂文件采⽤用静态链接-g ⽣生成调试信息。GNU 调试器可利⽤用该信息。-share 此选项将尽量使⽤用动态库,所以⽣生成⽂文件⽐比较⼩小,但是需要系统由动态库.-O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高-w 不生成任何警告信息。-Wall ⽣生成所有警告信息。 (四)静态库与动态库在这里需要注意的就是,在定义变量姿势,等号的左右两端都不能有空格,否则将产生错误。 如果Makefile中需要多个文件的时候,利用伪目标文件,从而生成多个目标文件,如下所示: .PHONY:ALL ALL:test1,test2 test1:test1.c gcc -o $@ $^ test2:test2.c gcc -o $@ $^ 123456这里,在对make与Makefile做一个简短的总结,如下所示: 原理: make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么, 1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2. 如果找到,它会找文件中的第一个目标⽂文件(target),在上面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件。 3. 如果hello文件不存在,或是hello所依赖的后面的hello.o文件的文件修改时间要比hello这个文件(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。 4. 如果hello所依赖的hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如果找到则再根据那一个规则⽣生成hello.o文件。(这有点像一个堆栈的过程) 5. 当然,你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o ⽂件声明make的终极任务,也就是执行⽂文件hello了。 6. 这就是整个make的依赖性,make会一层又⼀一层地去找文件的依赖关系,直到最终编译出第一个目标文件。 7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。 8. make只管文件的依赖性,即如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。 9. 项目清理,工程是需要被清理的 10. 像clean这种,没有被第一个目标⽂文件直接或间接关联,那么它后面所定义的命令将不会被⾃自动执行,不过,我们可以显示要make执行。即命令—“make clean”,以此来清除所有的目标文件,以便重编译。 11. 但是一般我们这种clean的目标文件,我们将它设置为伪目标,⽤用 .PHONY 修饰,伪目标的特性是,总是被执⾏行的。 12. 可以将我们的 hello 目标文件声明成伪目标,测试一下。 现在我们来实现一个进度条的小程序,如下所示: 1 #include 2 3 int main() 4 { 5 char bar[102]={0}; 6 int i=0; 7 const char *flag="|/-\\";//zhuan yi zi fu 8 while(i |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |