目录
vi编辑器是 Linux系统下最基本的编辑器,工作在字符模式下。由于不使用图形界面,
因此ⅵ的工作效率非常高,且它在系统和服务管理中的功能是带图形界面的编辑器无法比
拟的。ⅵ编辑器共有三种工作模式,分别是:命令模式( command mode)、插入模式( Insert
mode)和底行模式( last line mode)。
案例2-38:将目录etc下的 passwd文件复制到itheima用户的家目录中,将副本命名
为 passwd,使用ⅵ编辑器打开家目录下的 passwd文件。
cp /etc/passwd passwd
vi passwd
命令模式下,可通过键盘控制光标的移动,实现文本内容的复制、粘贴、删除等操作。
(1)光标移动
光标的移动可分为6个级别,分别为:字符级、行级、单词级、段落级、屏幕级和文档级。
| 级别 | 操作符 | 说明 |
| 字符级 | “左键”或字母“h” | 使光标向字符的左边移动 |
|
| “右键”或字母“l” | 使光标向字符的右边移动 |
| 行级 | “上键”或字母“k” | 使光标移动到上一行 |
| “下键”或字母“j” | 使光标移动到下一行 | |
| 符号“$” | 使光标移动到当前行尾 | |
| 数字“0” | 使光标移动到当前行首 | |
| 单词级 | 字母“w” | 使光标移动到下一个单词的首字母 |
| 字母“e” | 使光标移动到本单词的尾字母 | |
| 字母“b” | 使光标移动到本单词的首字母 | |
| 段落级 | 符号“}” | 使光标移至段落结尾 |
| 符号“{” | 使光标移至段落开头 | |
| 屏幕级 | 字母“H” | 使光标移至屏幕首部 |
| 字母“L” | 使光标移至屏幕尾部 | |
| 文档级 | 字母“G” | 使光标移至文档尾行 |
| n+G | 使光标移至文档的第n行 |
(2)删除
| 操作符 | 说明 |
| 字母“x” | 删除光标所在的单个字符 |
| 字母“dd” | 删除光标所在的当前行 |
| n+dd | 删除包括光标所在行的后边n行内容 |
| d+$ | 删除光标位置到行尾的所有内容 |
(3)复制和粘贴
| 操作符 | 说明 |
| 字母“yy” | 复制光标当前所在行 |
| n+yy | 复制包括光标所在行后的n行内容 |
| y+e | 从光标所在位置开始复制直到当前单词结尾 |
| y+$ | 从光标所在位置开始复制直到当前行结尾 |
| y+{ | 从当前段落开始的位置复制到光标所在位置 |
| p | 将复制的内容粘贴到光标所在位置 |
插入模式下,用户可对文件内容进行修改操作,此模式下的操作与Windows操作系统中记事本的操作类似。
底行模式下可以对文件进行保存,也可进行查找、设置、退出编辑器等操作。
(1):set nu。设置行号,仅对本次操作有效,当重新打开文本时,若需要行号,要重新设置。
(2):set nonu。取消行号,仅对本次操作有效。
(3):n。使光标移动到第n行。
(4):/xx。在文件中查找“xx”,若查找结果不为空,可以使用“n”查找下一个,使用“N”查找上一个。
(5)尾行模式下还可以进行内容替换,其操作符和功能如表所示。
| 操作符 | 说明 |
| :s/被替换内容/替换内容/ | 替换光标所在行的第一个目标 |
| :s/被替换内容/替换内容/g | 替换光标所在行的全部目标 |
| :%s/被替换内容/替换内容/g | 替换整个文档中的全部目标 |
| :%s/被替换内容/替换内容/gc | 替换整个文档中的全部目标,且每替换一个内容都有相应的提示 |
(6)操作完毕后,如要保存文件或退出编辑器,可先使用“ESC”进入底行模式,再使用表中的按键完成所需操作。
| 操作符 | 说明 |
| :q | 退出vi编辑器 |
| :w | 保存编辑后的内容 |
| :wq | 保存并退出vi编辑器 |
| :q! | 强行退出vi编辑器,不保存对文件的修改 |
| :w! | 对于没有修改权限的用户强行保存对文件的修改,并且修改后文件的所有者和所属组都有相应的变化 |
| :wq! | 强行保存文件并退出vi编辑器 |
vi编辑器的三种模式之间可进行转换:
(1)命令模式切换至插入模式:
| 操作符 | 说明 |
| 字母“a” | 光标向后移动一位进入编辑模式 |
| 字母“s” | 删除光标所在字母进入编辑模式 |
| 字母“o” | 在当前行之下新起一行进入编辑模式 |
| 字母“A” | 光标移动到当前行末尾进入编辑模式 |
| 字母“I” | 光标移动到当前行行首进入编辑模式 |
| 字母“S” | 删除光标所在行进入编辑模式 |
| 字母“O” | 在当前行之上新起一行进入编辑模式 |
在命令行中对vi编辑器进行的设置,只对本次操作有效,若想长久保存vi设置,可通过对用户家目录中的.vimrc文件进行编辑实现。常用设置如表所示。
| 设置 | 说明 |
| set number | 设置行号 |
| set autoindent | 自动对齐 |
| set smartindent | 智能对齐 |
| set showmatch | 括号匹配 |
| set tabstop=4 | 使用tab键时为4个空格 |
| set mouse=a | 鼠标支持 |
| set cindent | 使用C语言格式对齐 |
GCC编译过程分为四个步骤,分别是预处理、编译、汇编和链接。
(1)预处理
删除代码中的“#define”,展开所有宏定义;
处理条件编译指令,如#if、#ifdef、#undef等;
将由“#include”包含的文件插入到预编译指令对应的位置,若文件中包含其它文件,同样进行替换;
删除代码中的注释;
添加行号和文件标识;
保留#pragma编译器指令。
(2)编译
在编译阶段,GCC会对经过预处理的文件进行语法、词法和语义分析,确定代码实际要做的工作,若检查无误,则生成相应的汇编代码文件。
汇编过程将编译后生成的汇编代码转换为机器可以执行的命令,即二进制指令,每一个汇编语句几乎都会对应一条机器指令。
链接过程是组装各个目标文件的过程,在这个过程中会解决符号依赖和库依赖关系,最终生成可执行文件。
文件编译
· 单文件编译
$ gcc hello.c
· 多文件编译
$ gcc _main.c _add.c -o _main
GDB可以逐条执行程序、操控程序的运行,并且随时可以查看程序中所有的内部状态,如各变量的值、传给函数的参数、当前执行的语句位置等,藉此判断代码中的逻辑错误。
(1)在代码中加入调试信息,并调试程序
$ gcc gdbtest.c –o app –g
(gdb) gdb app
(2)列出程序代码,并设置断点
list 行号
b 行号
b 22 if i = 5 #在22行设定带条件的断点
info b #查看断点
disable Num #取消断点
(3)查看变量值
p 变量名
(4)继续执行
s —— 单步执行
n —— 单步执行且跳过标准函数库
finish —— 跳出当前函数
(5)结束调试
continue —— 结束当前断点调试
quit —— 退出调试