LINUX系统工具vim和gccWord文档格式.docx
- 文档编号:21049214
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:18
- 大小:183.11KB
LINUX系统工具vim和gccWord文档格式.docx
《LINUX系统工具vim和gccWord文档格式.docx》由会员分享,可在线阅读,更多相关《LINUX系统工具vim和gccWord文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
$
光标移到本行行尾
n
光标下移n行
nG
光标移到第n行
X
删除光标所在位置的前一个字符
x
删除光标所在位置的字符
nx
删除光标所在位置及其后的n个字符
nX
删除光标所在位置及前n个字符
dd
删除光标所在行
ndd
删除光标之后n行
R
修改光标所在位置的字符,可以一直替换,直到按下Esc键
r
修改光标所在字符
/name
查找光标之后name的字符串,系统会自动查找,并突出显示所有找到的字符串,并转到第一个找到的字符串;
如果要继续向下查找,可以按n键;
向上查找按N键
?
name
查找光标之后name的字符串,与“/”类似,但它是向上查找name字符串
{
查找“{”,并将光标移到“{”处
yy
复制所在行
nyy
复制光标之后n行
P
将复制的内容粘贴到光标所在位置
u
撤销最近一次操作,并恢复操作结果,可多次使用u来恢复已经进行了多步的操作
U
撤销当前进行的所有的操作(文件自上次保存到现在的操作)
3.3—2.末行模式
w
写文件,将编辑的内容保存到文件系统
w!
如果是只读文件,强制写入文件
q!
退出vi,但是文件内容有修改的话,并不保存修改
wq!
保存内容并退出vi
/
查找匹配的字符串,在编辑时,要查找包含某个字符串,可以使用“/字符串”,会查找所有的,转到第一个字符
加载新文件,
e
创建新文件
3.4—1.编辑多个文件
vi[文件1][文件2]……[文件N]
n(next)进入下一个文件
rew进入首文件
args当前缓冲区所存的文件的文件名
3.4—2.分割窗口
split上下分割(可加文件名)
vsplit左右分割(可加文件名)
ctrl+w光标到下一个窗口
close:
quit关闭窗口
3.4—3用户命令模式
Vimdiff[文件名][文件名]……左右分割
vi-r[文件名]断电恢复
3.4—4.定义新命令
ab字符一字符串一
imap[快捷键][需要替换的字符串]
3.4.5.文本整体移动
默认为8,用set进行设置
[n,n]>
>
右
[n,n]<
<
左
nmkn,原目的行;
m,(move)移动;
k,第k行下方
[n,n]mk[n,n],原目的行;
3.5高级使用
Vi环境(m)
set功能选项(输入全拼)
首先使用.bash_profile文件,每个文件可以有自己的.exrc配置文件。
ai
autoindent选项把每一行缩排为与其上一行的行首对齐,默认为off
ap
autoprint默认为on
sm
showmatch在输入右圆括号时,显示匹配的左括号。
默认为off
nm
number显示行号。
Wm=n
wrapmargin定义右边距。
n为整数。
默认为0
report
report编辑操作改变的次数,导致信息出现在状态行。
默认为5
smd
showmode给出相关命令时,显示“插入”。
ws
Wordsearch在查找期间遇到结束符时,绕道开头继续查找。
默认为on
eb
errorbells命令错误会报警。
redaw
发生变化时刷新。
warn
修改缓冲区内容后未保存,显示警告信息。
fl
输入无效命令,发出声音;
flash不再发出;
noflash发出。
默认on
list
vi中的Tab用“^1”表示,用“$”表示每行结束。
ic
ignorecase区分大小写搜索,noignorecase不区分大小写。
warp
较长行。
wrap后自动换行,nowrap不自动换行。
默认为On
3.5.2语法高亮显示
/root/.vimrc对文件进行高亮设置的配置文件。
exportTERM=xterm-color
3.5.3.正则表达式
斜杠/
定界符,表示表达式的开始和结束
句点.
匹配任意单个字符,该字符可以代替其后任何单个字符。
/s.d/,点代表任意字符;
/.ping/,代表任意字符。
方括号[]
用来表示匹配括号中的任意一个字符,其中需要指出的是,在括号中出现“-”表示一段范围,如[a-z]表示可以匹配到所有小写字母,[a-zA-Z]可以匹配小写和大写,[0-9]可以匹配0-9的任意数字。
^除外,[^]表示匹配除括号中字符的所有字符,取括号中字符的补集。
例如,/t[aeoi]k/可以匹配到tak、tik、tek等字符;
/bo[okpu].k/可以匹配到boook、bokek、boulk等字符;
/p[a-z].s/可以匹配到paus、pkks、pu7s、prss等字符;
/7[15ui9]h/匹配到71h/7uh/7ih;
/k[0-9]k/匹配到k9k、k7k、k3k等字符;
/k[^a-z]j/匹配到kZj、kSj、k%j、k6j等字符。
唯独不能匹配到中间字符是小写字母的字符串。
星号*
匹配0个或多个字符,如,/ab*c/匹配到abc、abbbbbc、akloic、a*95c等字符;
/[a-z]*/匹配任意以小写字母开头的句子、单词或字符串;
/t*ing/匹配到tkling、tping、t56ing。
反斜杠\
转义字符,把紧跟其后的第一个原字符当做普通文字对待,除第一个以外都保持其原来的含义。
/sound\*/可匹配到包含sound*的行;
/b\[a-z]k/匹配含有b-[a-z]k/;
/s\*a[a-z]*ing/匹配到s*aissing、s*akddssding、s*ajkoplling等。
\<
\>
匹配所有括号中的单词,不仅表示每行包含该文字符即可,而要包含单词。
wth>
表示所有行中包含单词wth的行;
sum\>
表示所有行中包含sun的行。
^
匹配一行的开始。
/^f/表示匹配所有以f作为开头的行;
“^#/[a-z]/”表示匹配所有以#作为一行开头。
并且第二个字符为小写的行。
$符号
$匹配一行的结束,其使用格式是在指定的字符后面加$行。
如,/wth$/,表示所有以wth字符结尾的行;
/[A-Z]$/表示匹配所有以大写字母结尾的行。
由于正则表达式必须与定位命令、全局命令一块儿使用,才能显示其强大。
3.5.4行号和范围确定
光标。
指明行号。
末行模式下。
n1,n2
n1行到n2行
.
光标所在行
%
最后一行
全选。
第一行到最后一行
+n
相对当前行,“.,.+10”向后的10行
-n
相对当前行,“.,.-5”向前的5行
3.5.5全局命令
1.[addr]g/字符串/命令
让系统在指定的行中进行搜索字符串所在行,使用命令操作。
g:
全局,对包含字符串的指定行进行相应的命令操作,通常有:
p(显示)、g(替换)、d(删除)
格式中的g表示进行对选定的行进行操作;
末行的g表示替换。
2.替换
[addr]s/源字符串/目的字符串/[选项]
S:
表示替换工作。
选项表示对字符串操作的类型,当省略选项时,对每行第一个匹配串进行替换。
有:
对全局的字符串替换、c:
对全局要替换的字符进行确认、p:
将替换的结果逐行显示(ctrl+L可恢复)。
命令
操作说明
g/字符串/p
显示所有带有“字符串”的行
g!
/字符串/p
显示所有不带有“字符串”的行
n1,n2g/字符串/p
显示从n1到n2中,所有带“字符串”行
g/字符串/d
删除所有带有“字符串”的行
/字符串/d
删除所有不带有“字符串”的行
g/字符串1/s/字符串2/
用“字符串2”全文替换“字符串1”,但每行只替换第一个“字符串1”
g/字符串1/s//字符串2/g
用“字符串2”全文替换“字符串1”
s/字符串1/字符串2
用“字符串2”替换当前行第一个“字符串1”
s/字符串1/字符串2/g
用“字符串2”替换当前行所有“字符串1”
%s/字符串1/字符串2/
%s/字符串1/字符串2/g
g/字符串1/s/字符串2/字符串3/g
表示在所有包含“字符串1”的行中,把“字符串2”用“字符串3”代替
3.5.6.执行shell命令
使用vi时,执行shell程序的方法通常有3种:
返回式、退出式、执行式。
1、返回式。
末行模式→sh→输入shell命令→exit(退出shell)。
2、退出式。
末行模式→!
command→回车→输入shell命令(加!
)→回车(退出shell)。
3、执行式。
末行模式→r输入shell命令→回车→回车。
软件开发工具——GCC
7.4.编译基础流程和选项
四个步骤:
预处理(pre-processing)、编译(compiling)、汇编(assembling)、连接(linking)。
在处理过程中,C预编译器首先扩展宏定义和相应的头文件,在编译阶段根据源文件的指令创建汇编语言代码;
然后使用汇编器创建计算机可读的目标文件代码,每个源文件代码都会创建一个目标代码;
在编译最后一个阶段,连接器搜索指定的函数库,找到程序中使用的函数,并将这些函数的目标代码和所有的源文件目标代码合并在一起。
编译过程中,使用合适的编译选项,可以控制编译过程,最后生成可执行。
GCC支持的编译源文件的后缀及解释:
后缀名
对应的语言种类
后期可能进行的操作
.c
C语言源程序
预处理、编译、汇编、链接
.C/.cc/.cxx
C++语言源程序
.m
Objective-C语言源程序
.i
预处理后的C文件
编译、汇编、链接
.ii
预处理后的C++文件
.s/.S
汇编语言源程序
汇编、链接
.o
目标文件程序
链接
.a/.so
编译后的库文件
——
.h
预处理所需的文件
GCC编译器使用的主要格式为:
GCC[选项]要编译的文件[选项][目标文件]
如:
GCC-Ehellogcc.c-ohellogcc.i
7.4.1.预处理过程
就是要对源程序中出现的伪指令(以#开头;
宏定义、条件编译、头文件包含、特殊符号)和特殊字符进行处理的过程。
其具体过程就是把包含“#”的文件插入原文中,将宏展开,根据条件编译命令选择要使用的代码,把源文件变为一个没有宏定义、没有条件编译指令、没有特殊字符的文件,最后将代码生成一个.i的文件中,等待下一步处理过程。
如程序hellogcc.c:
gcc-Ehellogcc.c-ohellogcc.i
7.4.2.程序编译过程
主要目标是用预处理过程产生的指令生成汇编语言代码。
新文件中只包含常量、变量以及关键字的信息。
GCC编译器首先检查代码的规范性、可读性以及是否存在错误,检查无误后,把C/C++代码或者.i文件翻译成汇编代码。
如程序hellogcc.i:
gcc-Shellogcc.i-ohellogcc.s
7.4.3.汇编过程
把汇编代码翻译成格式正确的机器代码。
在汇编语言中,用助记符代替操作码,用地址符号代替地址码,因此,使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种程序叫汇编程序,GCC是系统软件中可以进行汇编处理的系统软件。
如程序hellogcc.s:
gcc-chellogcc.s-ohellogcc.o
7.4.4.链接过程
将上步生成的一个或多个.o目标文件盒函数库文件结合起来,最终生成在特定平台上的可执行文件。
函数库:
静态库和动态库。
如程序hellogcc.o:
gcc-ohellogcchellogcc.c
7.5GCC编译高级操作及选项
7.5.1.常规操作选项
选项
解释
-Xlanguage
输入文件的语言language
-E
只进行预处理
-S
只进行编译
-c
只进行汇编
-ofile
输出的文件指定到file中,可以输出汇编文件、目标文件、可执行文件
-v
打印出编译器内部编译各个过程的命令行信息和编译器版本
7.5.2.警告提示功能
对程序结构的诊断信息,不一定有错误,而是存在风险,可能存在错误。
-fsyntax-only
检查语法错误,不产生输出信息
-w
禁止所有警告信息
-Wunused
如果某个局部变量除了声明就没再使用,或者声明了静态函数但是没哟定义,或者某条语句的运算结果显然没有使用,编译器就发出警告
-Wmain
把main函数声明或定义成奇怪的类型
-Werror
视警告为错误,出现任何警告就放弃编译
-Wredundant-decls
同一个可见域定义多次声明
-Wall
允许GCC提供所有有用的报警信息
-pedantic-error
允许发出ANSIC标准所列出的全部信息
gcc-Wall-ohellogcchellogcc.c
7.5.3.代码调试
产生调试信息,方便后面gdb和gprof工具的调试和执行。
说明
-g
产生调试信息,GDB能够使用这些调试信息对程序进行排错
-pg
产生额外代码,输出profile信息,供分析程序gprof使用
-gdwarfleveln
生成调试信息,同时用level指出需要多少信息,默认的level值是2,level1输出最少量的信息,仅包括函数和外部变量的描述,没有局部变量和行号信息。
Level3包含更多的信息,出现的所有宏定义,支持宏扩展。
7.5.5.链接功能
-llibrary
搜索library的库文件,连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是library.a,连接器会把它当做文件名准确引用这个文件。
但是即使不使用这个选项,GCC也把默认的一些库链接进去。
搜索目录除了一些系统标准目录外,还包括用户以“-L”选项指定的路径
-nostartfiles
不连接系统标准启动文件,而标准库文件仍然正常使用
-object-file-name
如果某些文件没有特别明确的后缀,GCC就认为他们生成的是目标文件或库文件
-nostdilb
不连接系统标准启动文件盒标准库文件,只把指定的文件传递给连接器
-static
在动态连接时,阻止连接共享库
-shared
生成一个共享目标文件,它可以和其它目标文件连接产生可执行文件。
只有部分系统支持该选项
-I目录
表示在头文件搜索路径中添加用户自定义的搜索目录。
由于Linux中头文件都默认放到“/usr/include”目录下,当用户希望添加其他位置的头文件时,就可以通过“-Idir”选项指定。
这个选项在编译多个不在同一个目录下的文件时非常有用
-L目录
在库文件的搜索路径中添加用户自定义的搜索的目录名,例如一个程序在连接时需要使用在目录“/home/wth”下libwth.so的库,用户只需要在gcc命令中加入“-L/home/wth/libwth.so”
如程序hellogcc.c,/home/wth目录下的wenjian2.h。
把wenjian2.h在前,hellogcc.c在后:
gcc-I/home/wth-ohellogcchellogcc.c
./hellogcc
7.6.1.程序性能测试gprof(与GCC协同工作)
执行完毕后,在当前目录下生成gmon.out文件,gprof通过这个文件得出统计资料。
格式:
gprof[选项]应用程序gmon.out
Gcc会在用户应用程序中的每一个函数中加入一个名为mcount(或_mcount或__mcount)的函数
-b
不显示详细资料,只是简要信息
-p
函数的调用图
-i
统计总结信息
-T
传统的BSD格式输出
-q
函数的时间消耗列表
-wwidth
输出的宽度
-eName
不输出函数Name及其子函数的调用图
-fName
输出函数Name及其子函数的调用图
-z
从未使用过的函数信息
-D
忽略函数中未知的变量
用gprof查看全部输出信息
函数名称
%time
函数使用占全部时间的百分比
cumulativeseconds
函数累计执行的时间
selfseconds
函数本身执行的时间
calls
函数被调用的次数
Selfcall
每次调用,花费在函数上的时间
Totalcall
每一次调用花费在函数及其子函数的平均时间
如分析程序eg604.c:
gcc-pg-oeg604eg604.c
./eg604
gprof-beg604gmon.out
7.6.2.程序覆盖测试工具gcov(与gcc协同工作)
使用分三步:
需要在gcc编译时添加-fprofile-arcs-ftest-coverage选项,运行结束后,在当前目录下生成数据信息→执行编译的可执行文件→使用gcov命令分析代码运行的效率。
不添加这两个选项不能工作。
Gcov[选项][用户程序]
分支的测试信息
-h
gcov帮助信息
gcov版本信息
不创建gcov的输出信息
-f
输出每个函数的使用信息
分析程序score.c:
gcc-fprofile-arcs-ftest-coverage-oscorescore.c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINUX 系统 工具 vim gcc