分类: LINUX
2012-06-30 20:16:19
一.Vi编辑器
三种模式:
命令行模式 文本输入模式 末行模式
一般操作:
l 进入vi
vi filename (例如 $ vi helloworld.c)
如果只键入vi,不带文件名,这样也可以进入vi编辑器,进行编辑,退出之前保存文件即可。
进入vi默认就是命令模式,这时输入的字母都将作为命令来解释,而不是文本输入。“~”符号表示空行。
如果希望在进入vi后,光标处于文件中指定的某行上,可在vi命令上加上行号和文件名,格式如下
vi +行号 文件名 (例如 $ vi +5 helloworld.c)
如果希望在进入vi之后光标处于文件最末行,只需去掉命令中“+”后面的数字即可,格式如下
vi + 文件名 (例如 $ vi + helloworld.c)
vi编辑器支持模式匹配,用户可以在命令中指定一个模式串,进入vi后,光标就处于文件中第一个与指定模式串相匹配的那行
vi + /模式字符串 文件名 (例如 $ vi +/main helloworld.c)
vi支持同时打开多个文件,例如要打开当前目录下的所有.c文件和.h文件,并将当前编辑文件设置为main函数所在文件,只需执行下列命令
$vi +/main *.h *.c
l 插入文本命令:i和I
i命令将文本插入到光标所在位置前。
I命令将文本插入当前行的行首。
l 追加文本命令:a和A
a命令将新文本追加到光标所在位置之后。
A命令将新文本追加到所在行的行尾。
l 空行插入命令:o和O
o命令在光标所在行的下面插入一个空行。
O命令在光标所在行的上面插入一个空行。
l 删除的基本操作
x删除光标处的字符
dd删除光标所在的整行
d
l 文本复制操作
yy 复制光标所在的整行
Y或y$ 复制从光标所在处开始到行尾的内容
y
l 文本粘贴命令
p命令。粘贴当前缓冲区中的内容
l 撤销命令
u命令,撤销上一次所在的操作(在一次切换到文本输入模式中输入的所有文本算一次操作)
U命令,一次性撤销自上次移动到当前行以来所过的所有操作。
l 退出vi
在末行模式下,
:q 若当前内容已保存 直接退出,若当前内容未保存,则等待用户操作
:q! 强行退出vi编辑器。慎用!
:w 新文件名 保存不退出,相当于另存为。
:w! 新文件名 强制保存,不询问是否有重名文件。慎用!
:wq 先保存再退出,如果当前文件未命名,则需指定文件名
:x 如已保存,则直接退出,如未保存,则保存文件
l 光标移动
h 左移一个字符
j 光标下移一行
k 光标上移一行
l 光标右移一个字符
l 屏幕滚动
在命令模式和文本输入模式下均可以使用
Ctrl + u 将屏幕向前翻滚半屏
Ctrl + d 将屏幕向后翻滚半屏
Ctrl + f 将屏幕向文件尾方向翻滚一整屏
Ctrl + b 将屏幕向文件首方向翻滚一整屏
命令之前加数字n,翻滚n行,或移动n页
l 查找命令
/string 从光标处向后查找
?string 从光标处向前查找
g/string 使光标停止在第一个检索到的string串的行首
l 替换命令
:[range]/s/s1/s2/[option]
[range]表示检索范围 "1, 10"。表示从第一行到10行。"%"表示整个文件。".,$"从当前行到文件尾
s为替换命令 。s1要被替换的串。s2为替换的串。
Option: /g 在全局文件中进行替换。/c表示在每次替换之前需要用户确认。省略时仅对每行第一个匹配串进行替换。
l 设置环境
末行模式下输入:
: set nu (nonu)
设置显示行号(或者不显示行号)
: syntax on(off)
设置语法高亮显示(不高亮显示)
二.gcc编译器
gcc编译流程:
n 将C语言源程序预处理,生成.i文件
n 预处理后的.i文件编译成为汇编语言,生成.s文件
n 将汇编语言文件经过汇编,生成目标文件.o文件
n 将各个模块的.o文件链接起来生成一个可执行程序文件
常用选项汇总:
-c 编译、汇编指定的源文件,但是不进行链接
-S 编译指定的源文件,不进行汇编
-E 预处理指定的源文件,不进行编译
-o 编译成可执行文件
-I directory 指定include包含文件的搜索目录
-g 生成调试信息,可被调试器调试
链接器的任务:将多个目标文件链接成一个完整的、可加载的、可执行的目标文件。
连个主要任务:
n 符号解析: 将目标文件内的引用符号和该符号的定义联系起来
n 将符号定义与存储器的位置联系起来,修改对这些符号的引用
下面先来简述一下典型的目标文件:
n 可重定位目标文件:.o文件,包含二进制代码和数据,已经转换成了机器指令代码和数据。不可以直接执行,因为这些指令和数据往往引用了其他模块中的符号,对本模块来说是未知的,这些符号的解析需要链接器将所有的模块进行链接。使用gcc -c filename命令生成。
n 可执行目标文件:同样包含二进制代码和数据,已经经过了链接操作。链接器将所有需要的可重定位目标文件链接成为一个可执行目标文件。这时,每个目标文件中引用其他目标文件中的符号都已经得到了解析和重定位。可被机器直接执行。gcc -o
n 共享目标文件:特殊类型的可定位目标文件,可以在需要它的程序运行或加载时,动态地加载到内存中运行。后缀名为.so,又称为动态库文件或者共享库文件。