vim是增强型的vi,沿用vi的操作方式
高亮显示关键字和语法错误,编程时特别有用
功能强大,可高度定制和拓展
多窗口编辑、语法高亮、代码折叠、代码补全、编译及错误跳命令模式
vim用于文本编辑,而非文本排版
vim基本概念vim是vi命令发展而成的一种文本编辑器,具有代码补充、错误跳转等功能。vim的设计理念是命令的组合。各种各样的文本间移动、跳转命令与其他普通模式的编辑命令灵活地组合使用,更加高效地进行文本编辑,因此这种编辑器被程序员广泛使用。
命令模式启动 vim 后首先进入命令模式
等待输入命令而非普通文本 可以进行移动光标、文本查找与替换,及文本复制、粘贴或删除| 命令模式 - 移动光标 | |
| 操作 | 作用 |
| H或← | 光标向左移动一个字符 |
| L或→ | 光标向右移动一个字符 |
| K或↑ | 光标向上移动一个字符 |
| J或↓ | 光标向下移动一个字符 |
| W | 光标移动到下一个单词 |
| B | 光标移动到上一个单词 |
| G | 光标到文件的最后一行 |
| gg | 光标到文件的第一行 |
| 命令模式 - 剪切、复制、粘贴文本 | |
| 操作 | 作用 |
| x | 伤处光标所在的字符,并向后删除 |
| X | 删除光标所在的字符,并向前删除 |
| n(数字) x | 连续向后删除n个字符 |
| dd | 剪切光标所在行 |
| n(数字) dd | 剪切自光标所在位置以下的n行 |
| yy | 复制光标所在的行 |
| n(数字) yy | 复制光标所在行向下n行 |
| p | 将复制或剪切的内容粘贴到光标所在位置的下一行 |
| P | 将复制或剪切的内容粘贴到光标所在位置的上一行 |
| U | 撤销前一个动作 |
在命令模式下输入 I、i、O、o、A、a或 R、r (替换), 进入插入模式
在插入模式下进行文件编辑
等待输入文本而非命令
按 Esc 键回到命令模式
末行模式
在命令模式下输入 : : / 或 ? ,进入末行模式
光标移至最后一行,等待输入命令而非文本
通过特定命令对文件进行查找、替换、保存、退出等操作
按 Esc 键回到命令模式
末行模式 - 查找与替换文本
末行模式 - 保存、退出、读取文件
GCC编译器 简介
GCC(GNU Compiler Collection)是一款编译语言编译器,此项目最早由GNU计划的发起者理查德· 斯托曼开始实施。第一版GCC于1987年发行,最初的GCC代表GNU C Compiler,即GNU的C语言编译器。后来经过不断地发展,GCC适应了C++、Objective-C、Java、Go等更多编译语言。GCC最重要的特点为实现跨硬件平台编译,即可在当前的CPU平台上为其他体系结构的硬件平台(ARM、MIPS、X86、PowerPC)开发软件,目前这一方式被广泛应用于嵌入式开发中。
GCC编译器流程使用Vim编辑器编辑C语言文件test.c,使用GCC编译器进行编译。
将C语言代码文件test.c通过gcc命令执行编译,生成编译后的执行代码a.out,执行a.out得到程序的运行结果。
分布编译从源代码test.c到执行代码a.out,总共经历了4个编译必不可少的步骤,分别是预处理(Pre-Processing)、编译(Compiling)、汇编(Assembling)、链接(Linking)。
预处理1)在预处理阶段GCC主要处理带“#”的指令,如#include(头文件)、#define(宏定义)等,并删除注释、添加行号和文件名标识。例如,例中的代码,在预处理的阶段将把包含的头文件stdio.h添加进来(解析头文件),然后生成预处理文件test.i。
2)预处理可以通过GCC编译器单步编译实现,只需在命令gcc中添加选项“-E”即可。该选项的作用就是让编译器执行完预处理后停止编译过程。
编译1)编译阶段中,GCC对预处理文件进行词法分析、语法分析、语义分析,检查代码的规范性。确认无误后,GCC将代码翻译为汇编语言。同样,编译也可以使用GCC编译器进行单步操作。添加选项“-S”即可完成编译操作,而不会继续执行汇编处理。
汇编1)汇编阶段汇编代码转换为机器可以执行的指令。使用编译器进行单步操作,通过添加选项“-c”即可指定生成二进制的目标文件。例中生成二进制目标文件test.o。
链接1)链接是一个复杂的过程,包括符号地址确定、符号解析与重定位、指令修正等。链接阶段有一项重要的工作,就是链接库文件,程序代码中经常会出现一些函数接口的使用,这些函数并不需要开发者自己实现,其功能已经被写好并编译到函数库中,开发者只需要调用库函数即可。
2)函数库分为静态库与动态库两种。对静态库而言,编译链接时会把库文件代码加载到执行文件中,因此生成的文件体积较大,但运行时不需要库文件。动态库则刚好相反,在编译链接时并不会将库文件加载到执行文件,而是在程序执行时加载库文件。
执行1)完成链接操作即可生成可执行文件
一步完成(直接执行)创建hello.c
编译成可执行文件:gcc hello.c –o hello
运行可执行文件:./hello
GCC编译选项



