Files
BlogPosts/Collection/YoudaoyunNotes/01Linux基础/04_命令行编辑与编译.md

168 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# **1. 编辑器**
## **1.1 图形编辑器**
平时常见的编辑器都是图形编辑器比如记事本、notepad、office、wps等图形编辑器的意思就是这些编辑器带有图形界面有菜单选项。比如最简单的Windows的记事本
![](images/WEBRESOURCEaf43058e62b1433f8f86ddae338e1a9a截图.png)
记事本
当然编程时不可能使用记事本来写代码常用的专业编程IDE有vsCode、qtCreator等常用的专业编辑器有sumlime、notepad++、vim等它们各有所长。其中在嵌入式开发领域vim是不可或缺的一款字符界面型的高效编辑器下面着重来介绍vim的安装和使用。
## **1.2 字符编辑器vi**
字符编辑器的意思是这种编辑器没有提供图形界面因此也不需要用鼠标去点击菜单栏字符编辑器的所有操作都是只需键盘就能达到的这种设定可以让人在编程时注意力专注于代码将程序思维直接流向键盘行云流水无需任何多余的菜单、鼠标的干扰极大提高效率。在字符编辑器中vi就是其中的典型代表。
![](images/WEBRESOURCE166fbcc666024e3c83bcb4a876265bfc截图.png)
### **vim的安装**
编辑器vi是Ubuntu系统默认已经安装好了的但vi的初始版本功能各方面都较弱一般都需要升级到vim版本下载安装vim版本的命令是
```shell
gec@ubuntu:~$ sudo apt install vim
```
安装完毕之后还可以在vim的配置文件中设置一些常用的选项
```c
gec@ubuntu:~$ sudo gedit /etc/vim/vimrc
...
49 "set showmatch " Show matching brackets.
50 "set ignorecase " Do case insensitive matching
51 "set smartcase " Do smart case matching
52 "set incsearch " Incremental search
53 "set autowrite " Automatically save
54 "set hidden " Hide buffers
55 set mouse=a " Enable mouse usage (all modes)
56 set cindent
57 set number
58
59 " Source a global configuration file if available
60 if filereadable("/etc/vim/vimrc.local")
61 source /etc/vim/vimrc.local
62 endif
```
- 注意:
> set mouse=a 代表开启鼠标追踪
> set cindent 代表开启自动缩进
> set number 代表显示行号
这个没有菜单的编辑器当我们需要执行诸如保存、查找、替换、剪切等等动作的时候怎么办呢答案是将键盘的输入分成两种模式一种模式下键盘敲入的就是编辑的内容另一种模式下键盘敲入的是要编辑器完成的动作。简而言之vim需要两个操作模式
- 一个模式下键入的信息,作为文本本身的内容,称之为编辑模式.
- 一个模式下键入的信息,作为执行的动作,称之为命令模式。
这两种模式的转换:
- 默认打开 vi 的时候,进入了命令模式
- 从命令模式进入编辑模式按i、a、o、I、O……
- 从编辑模式进入命令模式按Esc
编辑模式没什么好研究的主要是命令模式熟练使用vi/vim实际上指的是熟练掌握命令模式中vi所能支持的命令都有哪些答案如下。
### **vim常用指令**
| vim命令 | 含义 |
| -- | -- |
| :w | 保存当前文件 |
| :w filename | 另存为 filename |
| :q | 退出当前正在编辑的文件 |
| :q! | 强制退出当前正在编辑的文件并放弃最近一次保存到现在的所有操作 |
| :wq | 保存文件并退出 |
| u | 撤销最近一次操作。 |
| ctrl+r | 前进一步,恢复撤销掉的操作 |
| i | 在光标所在的位置前面插入字符 |
| a | 在光标所在的位置后面插入字符 |
| o | 在光标所在行的下一行插入新的一行 |
| O | 在光标所在行的上一行插入新的一行 |
| x | 剪切光标处所在的字符。x前可先按一个数字则剪切若干个字符 |
| dd | 剪切光标处所在的一行。dd前可先按一个数字则剪切若干行 |
| yy | 复制光标处所在的一行。yy前可先按一个数字则复制若干行 |
| d$ | 剪切从光标处(含)开始到该行行末的所有字符 |
| d^ | 剪切从光标处(不含)开始到该行行首的所有字符 |
| y$ | 复制从光标处(含)开始到该行行末的所有字符 |
| y^ | 复制从光标处(不含)开始到该行行首的所有字符 |
| p | 将剪切板中的资料粘贴到光标所在下一行 |
| r | 修改光标所在的字符r之后接跟你要修正的字符比如你要把fox中的o改成i只需将光标停在o上接着连续按下r和i |
| h | 将光标向前移动一个字符 |
| j | 将光标向下移动一个字符 |
| k | 将光标向上移动一个字符 |
| l小写L | 将光标向后移动一个字符 |
| gg | 跳到文本的最初一行 |
| G | 跳到文本的最末一行 |
| Ctrl + u | 向上(up)翻页 |
| Ctrl + d | 向下(down)翻页 |
| :%s/old/new | 将文件中所有的old字符串替换成new |
| /string | 从光标处往下查找字符串string注意在输完你要查找的字符串string之后要按回车键。如果你要找的字符串string有多个你可以按n将光标跳到下一个位置按N将光标跳到上一个位置 |
| ?string | 跟上面的</string>是一样的,区别是它从光标处往上查找 |
# 「课堂练习2」
使用 vi 创建一个最简单C语言程序。练习诸如剪切、粘贴、复制、保存、撤销、恢复撤销、替换等技巧熟练切换 vi 模式和普通模式。
![](images/WEBRESOURCE778e6bbd547a49f7a27408810d3e357d截图.png)
# **2. 编译器gcc**
![](images/WEBRESOURCEab3791f6ea2d4ee1a800caaf9d9c809a截图.png)
名称GNU Compiler Collection(gcc)即GNU编译器套件。
简介gcc是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分亦是自由的类Unix 及苹果 MacOS 操作系统的标准编译器主要用与完成C语言的编译功能。
![](images/WEBRESOURCE483559e02d97418681caca2ce4ce7003image.png)
用法:
```
// 安装最新的版本:
gec@ubuntu:~$ sudo apt install gcc -y
// 查看编译器的版本:
gec@ubuntu:~$ gcc -v
// 将源码 a.c 编译生成程序 a
gec@ubuntu:~$ gcc a.c -o a
gec@ubuntu:~$ gcc -o a a.c
// 编译源码的时候打开所有的警告
gec@ubuntu:~$ gcc a.c -o a -Wall
// 将源码 a.c 编译生成默认名称的程序 a.out
gec@ubuntu:~$ gcc a.c //默认生成a.out文件所有的源文件默认生成文件名称都是a.out
```
释义:
-v查看编译器版本
-o指定编译后生成的程序名
-Wall打开所有警告注意W是大写的意为 all Warning
## C语言程序由源代码到可执行程序的过程
预处理-->编译-->汇编-->链接
选项:-E -S -c -o
文件后缀:.i .s .o .elf
预处理阶段主要完成预处理工作:处理以#开头的代码,如将头文件(#include)展开,将宏定义(#define)进行替换,将预处理指令(#if)按条件进行增删代码。
编译阶段主要完成代码的编译工作:检查代码中的语法问题
汇编阶段主完成汇编编译代码工作:将代码编译为汇编编译程序(二进制文件)
链接阶段主要完成程序文件的链接工作:将程序中所使用的库文件进行连接,此时所产生的文件即是最终的可执行程序
![](images/WEBRESOURCE90052f7e84d296350dc684c5f8d9fe79image.png)