Linux系统编程-02(vim-gcc-动态库静态库)

00. 目录

01. 学习目标

02. 编辑器gedit介绍

gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。它使用GTK+编写而成,因此它十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括gb2312gbk在内的多种字符编码。gedit是一个自由软件

这是 Linux 下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。

gedit是一个Linux环境下的文本编辑器,类似windows下的写字板程序,在不需要特别复杂的编程环境下,作为基本的文本编辑器比较合适。

deng@itcast:~$ gedit txt &

打开gedit图形界面如下:

1527505979128

03. 什么是vi(vim)

vi (Visual interface)编辑器是 Linux 系统中最常用的文本编辑器,vi 在Linux界有编辑器之神的美誉,几乎所有的 Linux 发行版中都包含 vi 程序。

vi 工作在字符模式下,不需要图形界面,非常适合远程及嵌入式工作,是效率很高的文本编辑器,尽管在 Linux 上也有很多图形界面的编辑器可用,但vi的功能是那些图形编辑器所无法比拟的。

vim 是 vi 的升级版,它不仅兼容 vi 的所有指令,而且还有一些新的特性,例如 vim 可以撤消无限次、支持关键词自动完成、可以用不同的颜色来高亮你的代码。vim 普遍被推崇为类 vi 编辑器中最好的一个。

vim键盘

vim键盘

04. vim工作模式

vi有三种基本工作模式: 命令模式、文本输入模式(编辑模式)、末行模式

clip_image002

4.1 命令模式

任何时候,不管用户处于何种模式,只要按一下ESC键,即可使vi进入命令模式。我们在shell环境(提示符为$)下输入启动vi命令,进入编辑器时,也是处于该模式下。

在命令模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是vi的合法命令,vi会响铃报警。

4.2 编辑模式

在命令模式下输入插入命令i(I)、附加命令a(A) 、打开命令o(O)、替换命s(S)都可以进入文本输入模式,此时vi窗口的最后一行会显示“插入”。

1527506715865

在该模式下,用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可。

4.3 末行模式

末行模式下,用户可以对文件进行一些附加处理。尽管命令模式下的命令可以完成很多功能,但要执行一些如字符串查找、替换、显示行号等操作还是必须要进入末行模式的。

在命令模式下,输入冒号即可进入末行模式。此时vi窗口的状态行会显示出冒号,等待用户输入命令。用户输入完成后,按回车执行,之后vi编辑器又自动返回到命令模式下。

05. vim教程

deng@itcast:~/test$ vimtutor

1527507035917

06. vim基本操作

6.1 打开文件

vim filename:打开或新建文件,并将光标置于第一行行首,如果文件不存在,则会新建文件。

打开不存在文件:

1527561037701

6.2 编辑文件

如果通过vi打开一个已经存在的文件,首先进入命令模式,此时输入的任何字符都被视为命令,不能输入内容。

在命令模式输入i

6.3 保存文件

一定要先退出插入模式(按Esc进入命令模式),然后(小写状态下),shift + zz (按住 “shift” + 按两下“z”键),或者(大写状态下:ZZ) 即可保存退出当前文件。

第一步:进入命令模式(ESC)

第二步:shifit + z z

07. vim实用操作

7.1 命令模式下的操作

1)切换到编辑模式

按键 功能
i 光标位置当前处插入文字
I 光标所在行首插入文字
o(字母) 光标下一行插入文字(新行)
O(字母) 光标上一行插入文字(新行)
a 光标位置右边插入文字
A 光标所在行尾插入文字
s 删除光标后边的字符,从光标当前位置插入
S 删除光标所在当前行,从行首插入

2) 光标移动

按键 功能
Ctrl + f 向前滚动一个屏幕
Ctrl + b 向后滚动一个屏幕
gg 到文件第一行行首
G(大写) 到文件最后一行行首,G必须为大写
mG或mgg 到指定行,m为目标行数
0(数字) 光标移到到行首(第一个字符位置)
$ 光标移到到行尾
l(小写L) 向右移动光标
h 向左移动光标
k 向上移动光标
j 向下移动光标
^ 光标移到到行首(第一个有效字符位置)

3)复制粘贴

按键 功能
[n]yy 复制从当前行开始的 n 行
p 把粘贴板上的内容插入到当前行

4)删除

按键 功能
[n]x 删除光标后 n 个字符
[n]X 删除光标前 n 个字符
D 删除光标所在开始到此行尾的字符
[n]dd 删除从当前行开始的 n 行(准确来讲,是剪切,剪切不粘贴即为删除)
dG 删除光标所在开始到文件尾的所有字符
dw 删除光标开始位置的字,包含光标所在字符
d0(0为数字) 删除光标前本行所有内容,不包含光标所在字符
dgg 删除光标所在开始到文件首行第一个字符开始的所有字符

5)撤销恢复

按键 功能
.(点) 执行上一次操作
u 撤销前一个命令
ctrl+r 反撤销
100 + . 执行上一次操作100次

6)保存退出

按键 功能
ZZ(shift+z+z) 保存退出

7)查找

按键 功能
/字符串 从当前光标位置向下查找(n,N查找内容切换)
?字符串 从当前光标位置向上查找(n,N查找内容切换)

8)替换

按键 功能
r 替换当前字符
R 替换当前行光标后的字符

9)可视模式

按键 功能
v 按字符移动,选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制
Shift + v 行选(以行为单位)选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制
Ctrl + v 列选 选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制

7.2 末行模式下的操作

1)保存退出

按键 功能
:wq 保存退出
:x(小写) 保存退出
:w filename 保存到指定文件
:q 退出,如果文件修改但没有保存,会提示无法退出
:q! 退出,不保存

all 表示所有

2)替换

按键 功能
:s/abc/123/ 光标所在行的第一个abc替换为123
:s/abc/123/g 光标所在行的所有abc替换为123
:1,10s/abc/123/g 将第一行至第10行之间的abc全部替换成123
:%s/abc/123/g 当前文件的所有abc替换为123
:%s/abc/123/gc 同上,但是每次替换需要用户确认
:1,$s/abc/123/g 当前文件的所有abc替换为123

3)分屏

按键 功能
:sp 当前文件水平分屏
:vsp 当前文件垂直分屏
: sp 文件名 当前文件和另一个文件水平分屏
: vsp 文件名 当前文件和另一个文件垂直分屏
ctrl-w-w 在多个窗口切换光标
:wall/:wqall/:qall 保存/保存退出/退出所有分屏窗口
vim -O a.c b.c 垂直分屏
vim -o a.c b.c 水平分屏

4) 其它用法

按键 功能
:!man 3 printf 在vim中执行命令 (q退出)
:r !ls -l 将ls -l执行的结果写入当前文件中
:r /etc/passwd 将/etc/passwd文件中的内容写入到当前文件中
:w /tmp/txt 将当前文件内容写入到/tmp/txt文件中
:w! /tmp/txt 强制将当前文件内容写入到/tmp/txt文件中
:1,10s/^/\/\/g 将第1行到10行行首添加// (^表示行首) /\/\转移字符
:1,10s#^#//#g 将第1行到10行行首添加// (#可以临时代替/ 分隔)
:%s/;/\r{\r\treturn0;\r}\r/g 将;替换成{ return 0; }
:1,10s#//##g 将第1行到10行行首去掉// (#可以临时代替/ 分隔)

08. GCC编译器简介

编辑器(如vi、记事本)是指我用它来写程序的(编辑代码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我们用编辑器编写程序,由编译器编译后才可以运行!

编译器是将易于编写、阅读和维护的高级计算机语言翻译为计算机能解读、运行的低级机器语言的程序。

gcc(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。gcc原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,gcc同样适用于微软的Windows。

gcc最初用于编译C语言,随着项目的发展gcc已经成为了能够编译C、C++、Java、Ada、fortran、Object C、Object C++、Go语言的编译器大家族。

编译命令格式:

gcc [options] file…

g++ [options] file…

  • 命令、选项和源文件之间使用空格分隔
  • 一行命令中可以有零个、一个或多个选项
  • 文件名可以包含文件的绝对路径,也可以使用相对路径
  • 如果命令中不包含输出可执行文件的文件名,可执行文件的文件名会自动生成一个默认名,Linux平台为a.out,Windows平台为a.exe

09. GCC工作流程和常用选项

gcc编译器从拿到一个c源文件到生成一个可执行程序,中间一共经历了四个步骤:

img

四个步骤并不是gcc独立完成的,而是在内部调用了其他工具,从而完成了整个工作流程:

img

选项 作用
-o file 指定生成的输出文件名为file
-E 只进行预处理
-S(大写) 只进行预处理和编译
-c(小写) 只进行预处理、编译和汇编
-v / –version 查看gcc版本号
-g 包含调试信息
-On n=0~3 编译优化,n越大优化得越多
-Wall 提示更多警告信息
-D 编译时定义宏

显示所有的警告信息

gcc -Wall test.c

将警告信息当做错误处理

gcc -Wall -Werror test.c

测试程序(-D选项):

#include <stdio.h>


int main(void)
{

    printf("SIZE: %d\n", SIZE);

    return 0;
}

deng@itcast:~/test$ gcc 2test.c -DSIZE=10

deng@itcast:~/test$ ./a.out

SIZE: 10

10. 静态连接和动态连接

链接分为两种:静态链接动态链接

1)静态链接

静态链接:由链接器在链接时将库的内容加入到可执行程序中。

优点:

  • 对运行环境的依赖性较小,具有较好的兼容性

    缺点:

  • 生成的程序比较大,需要更多的系统资源,在装入内存时会消耗更多的时间

  • 库函数有了更新,必须重新编译应用程序

2)动态链接

动态链接:连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序。

优点:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值